fix(ui): Fix some ui bugs
This commit is contained in:
@@ -28,6 +28,14 @@ apply plugin: 'com.google.gms.google-services'
|
|||||||
apply plugin: 'kotlin-android'
|
apply plugin: 'kotlin-android'
|
||||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||||
|
|
||||||
|
|
||||||
|
def keystoreProperties = new Properties()
|
||||||
|
def keystorePropertiesFile = rootProject.file('key.properties')
|
||||||
|
if (keystorePropertiesFile.exists()) {
|
||||||
|
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace "com.example.sfm_app"
|
namespace "com.example.sfm_app"
|
||||||
compileSdkVersion 34
|
compileSdkVersion 34
|
||||||
@@ -47,6 +55,17 @@ android {
|
|||||||
sourceSets {
|
sourceSets {
|
||||||
main.java.srcDirs += 'src/main/kotlin'
|
main.java.srcDirs += 'src/main/kotlin'
|
||||||
}
|
}
|
||||||
|
subprojects {
|
||||||
|
afterEvaluate { project ->
|
||||||
|
if (project.plugins.hasPlugin("com.android.application") ||
|
||||||
|
project.plugins.hasPlugin("com.android.library")) {
|
||||||
|
project.android {
|
||||||
|
compileSdkVersion 34
|
||||||
|
buildToolsVersion "34.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
// START: Flutter Local Notifications
|
// START: Flutter Local Notifications
|
||||||
@@ -61,7 +80,14 @@ android {
|
|||||||
versionCode flutterVersionCode.toInteger()
|
versionCode flutterVersionCode.toInteger()
|
||||||
versionName flutterVersionName
|
versionName flutterVersionName
|
||||||
}
|
}
|
||||||
|
signingConfigs {
|
||||||
|
release {
|
||||||
|
keyAlias keystoreProperties['keyAlias']
|
||||||
|
keyPassword keystoreProperties['keyPassword']
|
||||||
|
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
|
||||||
|
storePassword keystoreProperties['storePassword']
|
||||||
|
}
|
||||||
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
// TODO: Add your own signing config for the release build.
|
// TODO: Add your own signing config for the release build.
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:data_table_2/data_table_2.dart';
|
||||||
|
import 'package:flutter/gestures.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'add_new_device_widget.dart';
|
import 'add_new_device_widget.dart';
|
||||||
@@ -85,112 +87,105 @@ class _DevicesManagerScreenState extends State<DevicesManagerScreen> {
|
|||||||
stream: devicesManagerBloc.streamUserRole,
|
stream: devicesManagerBloc.streamUserRole,
|
||||||
initialData: role,
|
initialData: role,
|
||||||
builder: (context, roleSnapshot) {
|
builder: (context, roleSnapshot) {
|
||||||
return CardTheme(
|
return SizedBox(
|
||||||
color: Theme.of(context).colorScheme.onPrimary,
|
height: context.dynamicHeight(0.4),
|
||||||
shadowColor:
|
child: CardTheme(
|
||||||
Theme.of(context).colorScheme.onPrimary,
|
color: Theme.of(context).colorScheme.onPrimary,
|
||||||
child: PaginatedDataTable(
|
shadowColor:
|
||||||
headingRowHeight: 30,
|
Theme.of(context).colorScheme.onPrimary,
|
||||||
columnSpacing: 30,
|
child: PaginatedDataTable2(
|
||||||
horizontalMargin: 10,
|
headingRowHeight: 30,
|
||||||
header: Center(
|
columnSpacing: 30,
|
||||||
child: Text(
|
horizontalMargin: 10,
|
||||||
appLocalization(context)
|
fixedLeftColumns: 1,
|
||||||
.paginated_data_table_title,
|
autoRowsToHeight: true,
|
||||||
style: context.headlineMediumTextStyle,
|
renderEmptyRowsInTheEnd: false,
|
||||||
|
dragStartBehavior: DragStartBehavior.down,
|
||||||
|
minWidth: 950,
|
||||||
|
header: Center(
|
||||||
|
child: Text(
|
||||||
|
appLocalization(context)
|
||||||
|
.paginated_data_table_title,
|
||||||
|
style: context.headlineMediumTextStyle,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
columns: [
|
||||||
columns: [
|
if (roleSnapshot.data ==
|
||||||
if (roleSnapshot.data ==
|
RoleEnums.ADMIN.name ||
|
||||||
RoleEnums.ADMIN.name ||
|
roleSnapshot.data ==
|
||||||
roleSnapshot.data ==
|
RoleEnums.USER.name)
|
||||||
RoleEnums.USER.name)
|
DataColumn(
|
||||||
DataColumn(
|
label: Text(appLocalization(context)
|
||||||
label: Center(
|
|
||||||
child: Text(appLocalization(context)
|
|
||||||
.paginated_data_table_column_deviceName),
|
.paginated_data_table_column_deviceName),
|
||||||
),
|
),
|
||||||
),
|
DataColumn(
|
||||||
DataColumn(
|
label: Text(appLocalization(context)
|
||||||
label: Center(
|
|
||||||
child: Text(appLocalization(context)
|
|
||||||
.paginated_data_table_column_deviceStatus),
|
.paginated_data_table_column_deviceStatus),
|
||||||
),
|
),
|
||||||
),
|
DataColumn(
|
||||||
DataColumn(
|
label: Text(appLocalization(context)
|
||||||
label: Center(
|
|
||||||
child: Text(appLocalization(context)
|
|
||||||
.paginated_data_table_column_deviceBaterry),
|
.paginated_data_table_column_deviceBaterry),
|
||||||
),
|
),
|
||||||
),
|
DataColumn(
|
||||||
DataColumn(
|
label: Text(appLocalization(context)
|
||||||
label: Center(
|
|
||||||
child: Text(appLocalization(context)
|
|
||||||
.paginated_data_table_column_deviceSignal),
|
.paginated_data_table_column_deviceSignal),
|
||||||
),
|
),
|
||||||
),
|
DataColumn(
|
||||||
DataColumn(
|
label: Text(appLocalization(context)
|
||||||
label: Center(
|
|
||||||
child: Text(appLocalization(context)
|
|
||||||
.paginated_data_table_column_deviceTemperature),
|
.paginated_data_table_column_deviceTemperature),
|
||||||
),
|
),
|
||||||
),
|
DataColumn(
|
||||||
DataColumn(
|
label: Text(appLocalization(context)
|
||||||
label: Center(
|
|
||||||
child: Text(appLocalization(context)
|
|
||||||
.paginated_data_table_column_deviceHump),
|
.paginated_data_table_column_deviceHump),
|
||||||
),
|
),
|
||||||
),
|
DataColumn(
|
||||||
DataColumn(
|
label: Text(appLocalization(context)
|
||||||
label: Center(
|
|
||||||
child: Text(appLocalization(context)
|
|
||||||
.paginated_data_table_column_devicePower),
|
.paginated_data_table_column_devicePower),
|
||||||
),
|
),
|
||||||
),
|
DataColumn(
|
||||||
DataColumn(
|
label: Text(appLocalization(context)
|
||||||
label: Center(
|
|
||||||
child: Text(appLocalization(context)
|
|
||||||
.paginated_data_table_column_action),
|
.paginated_data_table_column_action),
|
||||||
),
|
),
|
||||||
),
|
],
|
||||||
],
|
onPageChanged: (int pageIndex) {
|
||||||
onPageChanged: (int pageIndex) {
|
// log('Chuyen page: $pageIndex');
|
||||||
// log('Chuyen page: $pageIndex');
|
},
|
||||||
},
|
// rowsPerPage:
|
||||||
rowsPerPage:
|
// (allDeviceSnapshot.data?.length ?? 1) < 6
|
||||||
(allDeviceSnapshot.data?.length ?? 1) < 6
|
// ? (allDeviceSnapshot.data?.length ??
|
||||||
? (allDeviceSnapshot.data?.length ??
|
// 0)
|
||||||
0)
|
// : 5,
|
||||||
: 5,
|
|
||||||
actions: [
|
actions: [
|
||||||
if (roleSnapshot.data ==
|
if (roleSnapshot.data ==
|
||||||
RoleEnums.USER.name ||
|
RoleEnums.USER.name ||
|
||||||
roleSnapshot.data ==
|
roleSnapshot.data ==
|
||||||
RoleEnums.ADMIN.name)
|
RoleEnums.ADMIN.name)
|
||||||
IconButton(
|
IconButton(
|
||||||
style: ButtonStyle(
|
style: ButtonStyle(
|
||||||
backgroundColor:
|
backgroundColor:
|
||||||
WidgetStateProperty.all<Color>(
|
WidgetStateProperty.all<Color>(
|
||||||
Colors.green),
|
Colors.green),
|
||||||
iconColor:
|
iconColor:
|
||||||
WidgetStateProperty.all<Color>(
|
WidgetStateProperty.all<Color>(
|
||||||
Colors.white,
|
Colors.white,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
onPressed: () {
|
||||||
onPressed: () {
|
ScaffoldMessenger.of(context)
|
||||||
ScaffoldMessenger.of(context)
|
.clearSnackBars();
|
||||||
.clearSnackBars();
|
addNewDevice(context,
|
||||||
addNewDevice(context,
|
roleSnapshot.data ?? role);
|
||||||
roleSnapshot.data ?? role);
|
},
|
||||||
},
|
icon: IconConstants.instance
|
||||||
icon: IconConstants.instance
|
.getMaterialIcon(Icons.add))
|
||||||
.getMaterialIcon(Icons.add))
|
],
|
||||||
],
|
source: DeviceSource(
|
||||||
source: DeviceSource(
|
devices: allDeviceSnapshot.data ?? devices,
|
||||||
devices: allDeviceSnapshot.data ?? devices,
|
context: context,
|
||||||
context: context,
|
devicesBloc: devicesManagerBloc,
|
||||||
devicesBloc: devicesManagerBloc,
|
role: role,
|
||||||
role: role,
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import 'package:go_router/go_router.dart';
|
|||||||
import 'package:badges/badges.dart' as badges;
|
import 'package:badges/badges.dart' as badges;
|
||||||
import 'package:persistent_bottom_nav_bar/persistent_bottom_nav_bar.dart';
|
import 'package:persistent_bottom_nav_bar/persistent_bottom_nav_bar.dart';
|
||||||
import 'package:sfm_app/feature/sound_notification_test/notification_screen.dart';
|
import 'package:sfm_app/feature/sound_notification_test/notification_screen.dart';
|
||||||
|
import 'package:sfm_app/product/permission/notification_permission.dart';
|
||||||
import '../settings/profile/profile_model.dart';
|
import '../settings/profile/profile_model.dart';
|
||||||
import '../../product/extention/context_extention.dart';
|
import '../../product/extention/context_extention.dart';
|
||||||
import '../../bloc/home_bloc.dart';
|
import '../../bloc/home_bloc.dart';
|
||||||
@@ -72,6 +73,7 @@ class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
|
|||||||
mainBloc.sinkIsVNIcon.add(isVN);
|
mainBloc.sinkIsVNIcon.add(isVN);
|
||||||
mainBloc.sinkThemeMode.add(isLight);
|
mainBloc.sinkThemeMode.add(isLight);
|
||||||
LocationPermissionRequest.instance.checkLocationPermission(context);
|
LocationPermissionRequest.instance.checkLocationPermission(context);
|
||||||
|
NotificationPermission.instance.checkNotificationPermission(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -148,15 +150,15 @@ class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
|
|||||||
inactiveIcon:
|
inactiveIcon:
|
||||||
IconConstants.instance.getMaterialIcon(Icons.group_outlined),
|
IconConstants.instance.getMaterialIcon(Icons.group_outlined),
|
||||||
),
|
),
|
||||||
PersistentBottomNavBarItem(
|
// PersistentBottomNavBarItem(
|
||||||
icon: IconConstants.instance
|
// icon: IconConstants.instance
|
||||||
.getMaterialIcon(Icons.notifications_outlined),
|
// .getMaterialIcon(Icons.notifications_outlined),
|
||||||
title: appLocalization(context).notification,
|
// title: appLocalization(context).notification,
|
||||||
activeColorPrimary: Colors.blue,
|
// activeColorPrimary: Colors.blue,
|
||||||
inactiveColorPrimary: Colors.grey,
|
// inactiveColorPrimary: Colors.grey,
|
||||||
inactiveIcon: IconConstants.instance
|
// inactiveIcon: IconConstants.instance
|
||||||
.getMaterialIcon(Icons.notifications_outlined),
|
// .getMaterialIcon(Icons.notifications_outlined),
|
||||||
),
|
// ),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,10 +183,10 @@ class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
|
|||||||
child: const InterFamilyScreen(),
|
child: const InterFamilyScreen(),
|
||||||
blocBuilder: () => InterFamilyBloc(),
|
blocBuilder: () => InterFamilyBloc(),
|
||||||
),
|
),
|
||||||
BlocProvider(
|
/*BlocProvider(
|
||||||
child: const NotificationScreen(),
|
child: const NotificationScreen(),
|
||||||
blocBuilder: () => NotificationBloc(),
|
blocBuilder: () => NotificationBloc(),
|
||||||
),
|
),*/
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,8 +223,8 @@ class _MainScreenState extends State<MainScreen> with WidgetsBindingObserver {
|
|||||||
},
|
},
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
themeModeSnapshot.data ?? isLight
|
themeModeSnapshot.data ?? isLight
|
||||||
? Icons.dark_mode_outlined
|
? Icons.light_mode_outlined
|
||||||
: Icons.light_mode_outlined,
|
: Icons.dark_mode_outlined,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
StreamBuilder<bool>(
|
StreamBuilder<bool>(
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ class _MapScreenState extends State<MapScreen> with WidgetsBindingObserver {
|
|||||||
onMapCreated: onMapCreated,
|
onMapCreated: onMapCreated,
|
||||||
markers: markerSnapshot.data ?? markersAll
|
markers: markerSnapshot.data ?? markersAll
|
||||||
..addAll(markers),
|
..addAll(markers),
|
||||||
zoomControlsEnabled: false,
|
zoomControlsEnabled: true,
|
||||||
myLocationEnabled: true,
|
myLocationEnabled: true,
|
||||||
mapToolbarEnabled: false,
|
mapToolbarEnabled: false,
|
||||||
onCameraMove: (position) {
|
onCameraMove: (position) {
|
||||||
@@ -138,10 +138,10 @@ class _MapScreenState extends State<MapScreen> with WidgetsBindingObserver {
|
|||||||
|
|
||||||
void checkTheme() async {
|
void checkTheme() async {
|
||||||
String theme = await apiServices.checkTheme();
|
String theme = await apiServices.checkTheme();
|
||||||
if (theme == AppThemes.LIGHT.name) {
|
if (theme == AppThemes.DARK.name) {
|
||||||
themeMode = '';
|
|
||||||
} else {
|
|
||||||
themeMode = await _getFileData('assets/map_themes/maps_dark_theme.json');
|
themeMode = await _getFileData('assets/map_themes/maps_dark_theme.json');
|
||||||
|
} else {
|
||||||
|
themeMode = '';
|
||||||
}
|
}
|
||||||
mapBloc.sinkMapTheme.add(themeMode);
|
mapBloc.sinkMapTheme.add(themeMode);
|
||||||
}
|
}
|
||||||
@@ -274,10 +274,16 @@ class _MapScreenState extends State<MapScreen> with WidgetsBindingObserver {
|
|||||||
if (response != "") {
|
if (response != "") {
|
||||||
final data = jsonDecode(response);
|
final data = jsonDecode(response);
|
||||||
List<dynamic> result = data['items'];
|
List<dynamic> result = data['items'];
|
||||||
final devicesList = Device.fromJsonDynamicList(result);
|
if(result.isNotEmpty){
|
||||||
for (var device in devicesList) {
|
devices.clear();
|
||||||
devices.add(device);
|
final devicesList = Device.fromJsonDynamicList(result);
|
||||||
|
for (var device in devicesList) {
|
||||||
|
devices.add(device);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -188,8 +188,7 @@ showNearPlacesSideSheet(
|
|||||||
longitude,
|
longitude,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
icon: IconConstants.instance
|
icon: const Icon(Icons.turn_right,color: Colors.white),
|
||||||
.getMaterialIcon(Icons.turn_right),
|
|
||||||
label: Text(appLocalization(listViewContext)
|
label: Text(appLocalization(listViewContext)
|
||||||
.map_show_direction),
|
.map_show_direction),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -81,12 +81,12 @@
|
|||||||
"event_tag_title": "Sự kiện",
|
"event_tag_title": "Sự kiện",
|
||||||
"description_NOTUSE3": "This is vietnamese language in InterFamily",
|
"description_NOTUSE3": "This is vietnamese language in InterFamily",
|
||||||
"interfamily_page_name": "Liên gia",
|
"interfamily_page_name": "Liên gia",
|
||||||
"my_group_title": "Group của tôi",
|
"my_group_title": "Nhóm của tôi",
|
||||||
"invite_group": "Group tham gia",
|
"invite_group": "Nhóm tham gia",
|
||||||
"add_new_group": "Thêm nhóm mới",
|
"add_new_group": "Thêm nhóm mới",
|
||||||
"join_group": "Tham gia nhóm",
|
"join_group": "Tham gia nhóm",
|
||||||
"group_name_title": "Tên nhóm",
|
"group_name_title": "Tên nhóm",
|
||||||
"group_id_title": "ID nhóm",
|
"group_id_title": "Mã nhóm",
|
||||||
"add_new_user_title": "Thêm người dùng",
|
"add_new_user_title": "Thêm người dùng",
|
||||||
"share_group_title": "Chia sẻ nhóm",
|
"share_group_title": "Chia sẻ nhóm",
|
||||||
"change_group_infomation_title": "Đổi thông tin",
|
"change_group_infomation_title": "Đổi thông tin",
|
||||||
|
|||||||
@@ -3,9 +3,25 @@ import 'dart:developer';
|
|||||||
import 'package:app_settings/app_settings.dart';
|
import 'package:app_settings/app_settings.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:permission_handler/permission_handler.dart';
|
||||||
import '../base/widget/dialog/request_permission_dialog.dart';
|
import '../base/widget/dialog/request_permission_dialog.dart';
|
||||||
|
|
||||||
class NotificationPermission {
|
class NotificationPermission {
|
||||||
|
NotificationPermission._init();
|
||||||
|
static NotificationPermission? _instance;
|
||||||
|
static NotificationPermission get instance =>
|
||||||
|
_instance ??= NotificationPermission._init();
|
||||||
|
|
||||||
|
Future<bool> checkNotificationPermission(context) async {
|
||||||
|
var status = await Permission.notification.status;
|
||||||
|
log("Status: $status");
|
||||||
|
if (status.isDenied || status.isPermanentlyDenied) {
|
||||||
|
requestNotificationsPermission(context);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
FirebaseMessaging messaging = FirebaseMessaging.instance;
|
FirebaseMessaging messaging = FirebaseMessaging.instance;
|
||||||
void requestNotificationsPermission(BuildContext context) async {
|
void requestNotificationsPermission(BuildContext context) async {
|
||||||
NotificationSettings settings = await messaging.requestPermission(
|
NotificationSettings settings = await messaging.requestPermission(
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_barcode_scanner/flutter_barcode_scanner.dart';
|
import 'package:flutter_barcode_scanner_plus/flutter_barcode_scanner_plus.dart';
|
||||||
import '../services/language_services.dart';
|
import '../services/language_services.dart';
|
||||||
|
|
||||||
class QRScanUtils {
|
class QRScanUtils {
|
||||||
|
|||||||
16
pubspec.lock
16
pubspec.lock
@@ -97,6 +97,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.6"
|
version: "1.0.6"
|
||||||
|
data_table_2:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: data_table_2
|
||||||
|
sha256: "5a540a7b64809eb46b3809c67fc6faa29ca217864341294df66b1f0eb040c20e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.5.18"
|
||||||
dbus:
|
dbus:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -238,14 +246,14 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
flutter_barcode_scanner:
|
flutter_barcode_scanner_plus:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_barcode_scanner
|
name: flutter_barcode_scanner_plus
|
||||||
sha256: a4ba37daf9933f451a5e812c753ddd045d6354e4a3280342d895b07fecaab3fa
|
sha256: "75bcf27d12ad6cd075dcfc8d838cffc254dab89cf9d33ec470faa1f9b4f97296"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "3.0.8"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -52,7 +52,8 @@ dependencies:
|
|||||||
google_maps_cluster_manager_2: ^3.2.0
|
google_maps_cluster_manager_2: ^3.2.0
|
||||||
dropdown_button2: ^2.3.9
|
dropdown_button2: ^2.3.9
|
||||||
maps_launcher: ^2.2.1
|
maps_launcher: ^2.2.1
|
||||||
flutter_barcode_scanner: ^2.0.0
|
# flutter_barcode_scanner: ^2.0.0
|
||||||
|
flutter_barcode_scanner_plus: ^3.0.8
|
||||||
search_choices: ^2.3.1
|
search_choices: ^2.3.1
|
||||||
dio: ^5.7.0
|
dio: ^5.7.0
|
||||||
rxdart: ^0.28.0
|
rxdart: ^0.28.0
|
||||||
@@ -65,6 +66,7 @@ dependencies:
|
|||||||
persistent_bottom_nav_bar: ^6.2.1
|
persistent_bottom_nav_bar: ^6.2.1
|
||||||
win32: ^5.10.0
|
win32: ^5.10.0
|
||||||
google_maps_flutter: ^2.10.0
|
google_maps_flutter: ^2.10.0
|
||||||
|
data_table_2: ^2.5.18
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user