Compare commits

...

3 Commits

Author SHA1 Message Date
anhtunz
6af1baed32 Resolve merge conflict between main and vypq 2025-04-14 11:41:00 +07:00
anhtunz
758cc22a0f chore(ui): Update notificationCard and warningCard in HomeScreen 2025-04-14 11:30:10 +07:00
anhtunz
345c554519 chore: update ios config to use location 2025-04-14 09:48:29 +07:00
6 changed files with 72 additions and 46 deletions

View File

@@ -37,6 +37,35 @@ end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
# You can remove unused permissions here
# for more information: https://github.com/BaseflowIT/flutter-permission-handler/blob/master/permission_handler/ios/Classes/PermissionHandlerEnums.h
# e.g. when you don't need camera permission, just add 'PERMISSION_CAMERA=0'
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
'$(inherited)',
## dart: PermissionGroup.camera
'PERMISSION_CAMERA=1',
## The 'PERMISSION_LOCATION' macro enables the `locationWhenInUse` and `locationAlways` permission. If
## the application only requires `locationWhenInUse`, only specify the `PERMISSION_LOCATION_WHENINUSE`
## macro.
##
## dart: [PermissionGroup.location, PermissionGroup.locationAlways, PermissionGroup.locationWhenInUse]
'PERMISSION_LOCATION=0',
'PERMISSION_LOCATION_WHENINUSE=1',
## dart: PermissionGroup.notification
'PERMISSION_NOTIFICATIONS=1',
## dart: PermissionGroup.criticalAlerts
'PERMISSION_CRITICAL_ALERTS=1',
]
end
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '14.0'
end

View File

@@ -28,14 +28,12 @@
<true/>
<key>NSCameraUsageDescription</key>
<string>Camera permission is required for barcode scanning.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Always and when in use!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Can I have location always?</string>
<key>NSLocationUsageDescription</key>
<string>Older devices need location.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Need location when in use</string>
<string>Cần vị trí để hiển thị bản đồ hoặc tìm địa điểm gần bạn</string>
<key>NSUserNotificationsUsageDescription</key>
<string>Chúng tôi cần gửi thông báo khẩn cấp để cảnh báo về việc thiết bị phát hiện có cháy.</string>
<key>com.apple.developer.usernotifications.critical-alerts</key>
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>UIBackgroundModes</key>

View File

@@ -82,60 +82,57 @@ class _HomeScreenState extends State<HomeScreen> {
stream: homeBloc.streamOwnerDevicesStatus,
builder: (context, snapshot) {
if (snapshot.data?['state'] != null || snapshot.data?['battery'] != null) {
return Row(
return ConstrainedBox(
constraints: BoxConstraints(minWidth: MediaQuery.of(context).size.width),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (snapshot.data?['state'] != null)
...snapshot.data!['state']!
.map(
(item) => FutureBuilder<Widget>(
(item) => SizedBox(
width: context.dynamicWidth(0.95),
child: FutureBuilder<Widget>(
future: warningCard(context, apiServices, item),
builder: (context, warningCardSnapshot) {
if (warningCardSnapshot.hasData) {
return ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 400,
maxHeight: 260,
),
child: warningCardSnapshot.data!,
);
return warningCardSnapshot.data!;
} else {
return const SizedBox.shrink();
}
},
),
),
)
.toList(),
if (snapshot.data?['battery'] != null)
...snapshot.data!['battery']!
.map(
(batteryItem) => FutureBuilder<Widget>(
(batteryItem) => SizedBox(
width: context.dynamicWidth(0.95),
child: FutureBuilder<Widget>(
future: notificationCard(
context, "lowBattery", appLocalization(context).low_battery_message, batteryItem),
builder: (context, warningCardSnapshot) {
if (warningCardSnapshot.hasData) {
return ConstrainedBox(
constraints: const BoxConstraints(
maxWidth: 400,
maxHeight: 260,
),
child: warningCardSnapshot.data!,
);
return warningCardSnapshot.data!;
} else {
return const SizedBox.shrink();
}
},
),
),
)
.toList(),
],
),
);
} else {
return Padding(
padding: context.paddingMedium,
child: Center(
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
const Icon(
Icons.check_circle_outline_rounded,
@@ -159,6 +156,11 @@ class _HomeScreenState extends State<HomeScreen> {
),
),
),
StreamBuilder<Map<String, List<DeviceWithAlias>>>(
stream: homeBloc.streamAllDevicesAliasMap,
builder: (context, allDevicesAliasMapSnapshot) {

View File

@@ -23,7 +23,6 @@ class OverviewCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Card(
margin: context.paddingLow,
elevation: 8,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(15)),
child: Padding(

View File

@@ -235,9 +235,9 @@ class _MapScreenState extends State<MapScreen> with WidgetsBindingObserver {
if (hasStateOne) {
return flameIcon; // flameIcon
} else if (hasOtherState) {
return normalIcon; // normalIcon
return offlineIcon; // normalIcon
} else {
return offlineIcon; // offlineIcon
return normalIcon; // offlineIcon
}
}
@@ -281,10 +281,7 @@ class _MapScreenState extends State<MapScreen> with WidgetsBindingObserver {
for (var device in devicesList) {
devices.add(device);
}
}else{
}
} else {}
}
}

View File

@@ -163,6 +163,7 @@ onTapMarker(
style: const ButtonStyle(
backgroundColor: WidgetStatePropertyAll(Colors.red),
foregroundColor: WidgetStatePropertyAll(Colors.white),
iconColor: WidgetStatePropertyAll(Colors.white),
),
icon: IconConstants.instance
.getMaterialIcon(Icons.fire_truck_outlined),