fix(ui): display interfamily tags when interfamily's devices state = 1

This commit is contained in:
anhtunz
2025-02-17 11:09:55 +07:00
parent bfeba03490
commit 16244d6768
6 changed files with 304 additions and 276 deletions

View File

@@ -1,12 +1,11 @@
import 'dart:async';
import 'dart:convert';
import 'dart:developer';
import 'package:sfm_app/feature/devices/device_model.dart';
import 'package:sfm_app/product/base/bloc/base_bloc.dart';
import 'package:sfm_app/product/constant/app/app_constants.dart';
import 'package:sfm_app/product/services/api_services.dart';
import 'package:sfm_app/product/utils/date_time_utils.dart';
import '../feature/devices/device_model.dart';
import '../product/base/bloc/base_bloc.dart';
import '../product/constant/app/app_constants.dart';
import '../product/services/api_services.dart';
import '../product/utils/date_time_utils.dart';
import '../product/utils/device_utils.dart';
import '../feature/device_log/device_logs_model.dart';

View File

@@ -1,4 +1,3 @@
import 'dart:developer';
import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart';

View File

@@ -103,8 +103,7 @@ class _HomeScreenState extends State<HomeScreen> {
(item) => FutureBuilder<Widget>(
future: warningCard(
context, apiServices, item),
builder:
(context, warningCardSnapshot) {
builder: (context, warningCardSnapshot) {
if (warningCardSnapshot.hasData) {
return ConstrainedBox(
constraints: const BoxConstraints(
@@ -128,11 +127,9 @@ class _HomeScreenState extends State<HomeScreen> {
context,
"lowBattery",
"Cảnh báo pin yếu",
batteryItem.name!,
batteryItem.areaPath!,
batteryItem
),
builder:
(context, warningCardSnapshot) {
builder: (context, warningCardSnapshot) {
if (warningCardSnapshot.hasData) {
return ConstrainedBox(
constraints: const BoxConstraints(
@@ -148,7 +145,8 @@ class _HomeScreenState extends State<HomeScreen> {
),
)
.toList(),
]);
],
);
} else {
return Padding(
padding: context.paddingMedium,
@@ -355,13 +353,14 @@ class _HomeScreenState extends State<HomeScreen> {
}
}
}
checkSettingdevice(allDevicesAliasJoined);
// checkSettingdevice(allDevicesAliasJoined);
homeBloc.sinkAllDevicesAlias.add(allDevicesAlias);
homeBloc.sinkAllDevicesAliasJoined.add(allDevicesAliasJoined);
}
void checkSettingdevice(List<DeviceWithAlias> devices) async {
if (isFunctionCall) {
log("Ham check setting da duoc goi");
} else {
String? response =
await apiServices.getAllSettingsNotificationOfDevices();
@@ -380,7 +379,7 @@ class _HomeScreenState extends State<HomeScreen> {
await apiServices.setupDeviceNotification(
device.thingId!, device.name!);
} else {
log("All devives are in the notification settings list.");
log("All devices are in the notification settings list.");
}
}
} else {

View File

@@ -1,6 +1,9 @@
// ignore_for_file: use_build_context_synchronously
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:sfm_app/feature/home/device_alias_model.dart';
import '../../../product/constant/enums/app_route_enums.dart';
import '../../../product/constant/image/image_constants.dart';
import '../../../product/extention/context_extention.dart';
import '../../../product/services/language_services.dart';
@@ -8,14 +11,13 @@ import '../../../product/utils/device_utils.dart';
import '../../../product/constant/icon/icon_constants.dart';
Future<Widget> notificationCard(
BuildContext context,
String notiticationType,
String notificationTitle,
String notificationDevicename,
String notificationLocation) async {
String location = await DeviceUtils.instance
.getFullDeviceLocation(context, notificationLocation);
Future<Widget> notificationCard(BuildContext context, String notiticationType,
String notificationTitle, DeviceWithAlias device) async {
String location = "";
if (device.areaPath != "") {
location = await DeviceUtils.instance
.getFullDeviceLocation(context, device.areaPath!);
}
String path = "";
DateTime time = DateTime.now();
if (notiticationType == "lowBattery") {
@@ -50,7 +52,7 @@ Future<Widget> notificationCard(
SizedBox(height: context.lowValue),
SizedBox(
child: Text(
"${appLocalization(context).device_title} $notificationDevicename",
"${appLocalization(context).device_title} ${device.isOwner! ? device.name : device.alias}",
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
@@ -113,8 +115,12 @@ Future<Widget> notificationCard(
alignment: Alignment.centerRight,
child: OutlinedButton(
style: const ButtonStyle(
backgroundColor: WidgetStatePropertyAll(Colors.blueAccent)),
onPressed: () {},
backgroundColor: WidgetStatePropertyAll(Colors.blueAccent),
),
onPressed: () {
context.pushNamed(AppRoutes.DEVICE_DETAIL.name,
pathParameters: {'thingID': device.thingId!});
},
child: Text(
appLocalization(context).detail_message,
style: const TextStyle(

View File

@@ -3,6 +3,7 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:maps_launcher/maps_launcher.dart';
import 'package:badges/badges.dart' as badges;
import '../device_alias_model.dart';
import '../../../product/constant/icon/icon_constants.dart';
import '../../../product/constant/image/image_constants.dart';
@@ -12,30 +13,33 @@ import '../../../product/services/language_services.dart';
import '../../../product/utils/device_utils.dart';
import '../../../product/shared/shared_snack_bar.dart';
Future<Widget> warningCard(
BuildContext context, APIServices apiServices, DeviceWithAlias item) async {
Future<Widget> warningCard(BuildContext context, APIServices apiServices,
DeviceWithAlias device) async {
Color backgroundColor = Colors.blue;
Color textColor = Colors.white;
String message = "";
String fullLocation =
await DeviceUtils.instance.getFullDeviceLocation(context, item.areaPath!);
String fullLocation = "";
if (device.areaPath != "") {
fullLocation = await DeviceUtils.instance
.getFullDeviceLocation(context, device.areaPath!);
}
String time = "";
for (var sensor in item.status!.sensors!) {
for (var sensor in device.status!.sensors!) {
if (sensor.name! == "11") {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch((sensor.time!) * 1000);
time = DateFormat('yyyy-MM-dd HH:mm:ss').format(dateTime);
}
}
if (item.state! == 3) {
if (device.state! == 3) {
backgroundColor = Colors.grey;
textColor = Colors.black;
message = appLocalization(context).in_progress_message;
} else if (item.state! == 2) {
} else if (device.state! == 2) {
backgroundColor = const Color.fromARGB(255, 6, 138, 72);
textColor = const Color.fromARGB(255, 255, 255, 255);
message = appLocalization(context).gf_in_firefighting_message;
} else if (item.state! == 1) {
} else if (device.state! == 1) {
backgroundColor = const Color.fromARGB(255, 250, 63, 63);
textColor = Colors.white;
message = appLocalization(context).button_fake_fire_message;
@@ -44,8 +48,26 @@ Future<Widget> warningCard(
textColor = Colors.white;
message = appLocalization(context).disconnect_message_uppercase;
}
return Card(
// color: Color.fromARGB(255, 208, 212, 217),
return badges.Badge(
badgeAnimation: const badges.BadgeAnimation.fade(),
position: badges.BadgePosition.bottomStart(bottom: 15, start: 10),
badgeContent: device.isOwner!
? null
: Text(
appLocalization(context).interfamily_page_name,
style: TextStyle(
fontSize: 20,
color: Theme.of(context).colorScheme.onSurface,
fontWeight: FontWeight.bold),
),
badgeStyle: badges.BadgeStyle(
shape: badges.BadgeShape.square,
borderRadius: BorderRadius.circular(10),
borderSide: const BorderSide(color: Colors.white, width: 2),
badgeColor: Theme.of(context).colorScheme.surfaceDim,
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
),
child: Card(
child: Padding(
padding: context.paddingLow,
child: Column(
@@ -74,7 +96,7 @@ Future<Widget> warningCard(
SizedBox(height: context.lowValue),
SizedBox(
child: Text(
"${appLocalization(context).device_title}: ${item.name}",
"${appLocalization(context).device_title}: ${device.isOwner! ? device.name : device.alias}",
style: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 18,
@@ -156,8 +178,8 @@ Future<Widget> warningCard(
onPressed: () async {
String markerLabel = "Destination";
MapsLauncher.launchCoordinates(
double.parse(item.settings!.latitude!),
double.parse(item.settings!.longitude!),
double.parse(device.settings!.latitude!),
double.parse(device.settings!.longitude!),
markerLabel);
},
icon: const Icon(Icons.directions),
@@ -191,7 +213,7 @@ Future<Widget> warningCard(
TextButton(
onPressed: () async {
int statusCode = await apiServices
.confirmFakeFireByUser(item.thingId!);
.confirmFakeFireByUser(device.thingId!);
if (statusCode == 200) {
showNoIconTopSnackBar(
context,
@@ -212,7 +234,8 @@ Future<Widget> warningCard(
child: Text(
appLocalization(context)
.confirm_fake_fire_sure_message,
style: const TextStyle(color: Colors.red)),
style:
const TextStyle(color: Colors.red)),
),
TextButton(
onPressed: () {
@@ -244,5 +267,6 @@ Future<Widget> warningCard(
],
),
),
),
);
}

View File

@@ -329,4 +329,5 @@ class DeviceUtils {
return Colors.red;
}
}
}