diff --git a/lib/domain/entities/setting.dart b/lib/domain/entities/setting.dart index c0aefe1..dd85745 100644 --- a/lib/domain/entities/setting.dart +++ b/lib/domain/entities/setting.dart @@ -9,7 +9,7 @@ List dayLists = [ ]; class Setting { - final int? supportBuildNum; + final int supportBuildNum; // contact page String? usaAddress; String? mmAddress; @@ -27,7 +27,7 @@ class Setting { List shipmentTypes; Setting( - {this.supportBuildNum, + {this.supportBuildNum = 1, this.usaAddress, this.mmAddress, this.usaContactNumber, diff --git a/lib/domain/entities/user.dart b/lib/domain/entities/user.dart index ae917fe..0ad4100 100644 --- a/lib/domain/entities/user.dart +++ b/lib/domain/entities/user.dart @@ -16,8 +16,8 @@ class User { String? fcsID; DateTime? lastMessageTime; String? lastMessage; - int? userUnseenCount; - int? fcsUnseenCount; + int userUnseenCount; + int fcsUnseenCount; String? preferCurrency; String get initial => @@ -42,12 +42,12 @@ class User { } String get getUserUnseenCount => userUnseenCount != null - ? userUnseenCount! > 100 + ? userUnseenCount > 100 ? "99+" : userUnseenCount.toString() : "0"; String get getFcsUnseenCount => fcsUnseenCount != null - ? fcsUnseenCount! > 100 + ? fcsUnseenCount > 100 ? "99+" : fcsUnseenCount.toString() : "0"; @@ -72,8 +72,8 @@ class User { this.privileges = const [], this.lastMessage, this.lastMessageTime, - this.userUnseenCount, - this.fcsUnseenCount, + this.userUnseenCount = 0, + this.fcsUnseenCount = 0, this.preferCurrency}); factory User.fromJson(Map json) { diff --git a/lib/pages/buying_instruction/buying_online.dart b/lib/pages/buying_instruction/buying_online.dart index 44d3436..fbd8b53 100644 --- a/lib/pages/buying_instruction/buying_online.dart +++ b/lib/pages/buying_instruction/buying_online.dart @@ -1,6 +1,5 @@ import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/main/model/main_model.dart'; -import 'package:fcs/pages/main/util.dart'; import 'package:fcs/pages/widgets/display_text.dart'; import 'package:fcs/pages/widgets/fcs_id_icon.dart'; import 'package:fcs/pages/widgets/local_text.dart'; @@ -28,22 +27,22 @@ class _BuyingOnlinePagetate extends State MainModel mainModel = Provider.of(context); final phoneNumberBox = DisplayText( - text: mainModel.user.phone, + text: mainModel.user?.phone, labelTextKey: "contact.phone", iconData: Icons.location_on, ); final nameBox = Center( child: Text( - mainModel.user.name, + mainModel.user?.name ?? "", style: TextStyle(fontSize: 18, color: primaryColor), )); final fcsIdBox = DisplayText( - text: mainModel.user.fcsID, + text: mainModel.user?.fcsID, labelTextKey: "customer.fcs.id", icon: FcsIDIcon(), ); final shippingAddressBox = DisplayText( - text: mainModel.setting.usaAddress, + text: mainModel.setting?.usaAddress, labelTextKey: "profile.usa.shipping.address", iconData: Icons.location_on, ); diff --git a/lib/pages/carton/model/carton_model.dart b/lib/pages/carton/model/carton_model.dart index 24d3aeb..e8694dc 100644 --- a/lib/pages/carton/model/carton_model.dart +++ b/lib/pages/carton/model/carton_model.dart @@ -3,9 +3,7 @@ import 'dart:async'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:fcs/data/services/services.dart'; import 'package:fcs/domain/constants.dart'; -import 'package:fcs/domain/entities/cargo_type.dart'; import 'package:fcs/domain/entities/carton.dart'; -import 'package:fcs/domain/vo/message.dart'; import 'package:fcs/domain/vo/shipment_status.dart'; import 'package:fcs/helpers/paginator.dart'; import 'package:fcs/pages/main/model/base_model.dart'; @@ -14,13 +12,14 @@ import 'package:logging/logging.dart'; class CartonModel extends BaseModel { List _boxes = []; - PaginatorListener cartonsByFilter; + PaginatorListener? cartonsByFilter; final log = Logger('CartonModel'); - List get boxes => - _selectedIndex == 1 ? _boxes : List.from(_delivered.values); + List get boxes => _selectedIndex == 1 + ? _boxes + : List.from(_delivered?.values ?? []); - Paginator _delivered; + Paginator? _delivered; int _selectedIndex = 1; int _selectedIndexFilter = 1; bool isLoading = false; @@ -87,17 +86,17 @@ class CartonModel extends BaseModel { notifyListeners(); } - get selectedIndex => _selectedIndex; - get selectedIndexFilter => _selectedIndexFilter; + int get selectedIndex => _selectedIndex; + int get selectedIndexFilter => _selectedIndexFilter; initData() async { _selectedIndex = 1; _selectedIndexFilter = 1; _loadBoxes(); - if (_delivered != null) _delivered.close(); + if (_delivered != null) _delivered!.close(); _delivered = _getDelivered(); - _delivered.load(); + _delivered!.load(); } @override diff --git a/lib/pages/chat/model/message_model.dart b/lib/pages/chat/model/message_model.dart index 447a325..e075fd2 100644 --- a/lib/pages/chat/model/message_model.dart +++ b/lib/pages/chat/model/message_model.dart @@ -26,7 +26,8 @@ class MessageModel extends BaseModel { StreamSubscription listener; static const int rowPerLoad = 20; - void initQuery(String userID) { + void initQuery(String? userID) { + if(userID == null)return; this.messages = []; this.userID = userID; this.prevSnap = null; diff --git a/lib/pages/customer/model/customer_model.dart b/lib/pages/customer/model/customer_model.dart index 8dda2f0..ea9525c 100644 --- a/lib/pages/customer/model/customer_model.dart +++ b/lib/pages/customer/model/customer_model.dart @@ -90,7 +90,7 @@ class CustomerModel extends BaseModel { } } - Future getUser(String id) async { + Future getUser(String? id) async { String path = "/$user_collection"; var snap = await Firestore.instance.collection(path).document(id).get(); return User.fromMap(snap.data, snap.documentID); diff --git a/lib/pages/main/home_page.dart b/lib/pages/main/home_page.dart index d1dcf98..abd2f86 100644 --- a/lib/pages/main/home_page.dart +++ b/lib/pages/main/home_page.dart @@ -84,7 +84,7 @@ class _HomePageState extends State { } _loadStaffMode(bool isCustomer) async { - bool staffMode = await SharedPref.getStaffMode(); + bool? staffMode = await SharedPref.getStaffMode(); setState(() { if (isCustomer) { isFcs[0] = false; @@ -117,12 +117,12 @@ class _HomePageState extends State { if (mainModel.isLogin()) { timer.cancel(); bool isCustomer = mainModel.isCustomer(); - String receiverID = isCustomer ? mainModel.user.id : notiUserID; - String receiverName = isCustomer ? mainModel.user.name : notiUserName; + String? receiverID = isCustomer ? mainModel.user?.id : notiUserID; + String? receiverName = isCustomer ? mainModel.user?.name : notiUserName; MessageModel messageModel = Provider.of(context, listen: false); messageModel.initQuery(receiverID); - User user = mainModel.user; + User user = mainModel.user!; if (!isCustomer) { CustomerModel customerModel = Provider.of(context, listen: false); @@ -133,15 +133,15 @@ class _HomePageState extends State { MaterialPageRoute( builder: (context) => MessageDetail( messageModel: messageModel, - receiverID: receiverID, - receiverName: receiverName, + receiverID: receiverID ?? "", + receiverName: receiverName ?? "", ))).then((value) { if (user.userUnseenCount > 0) { - messageModel.seenMessages(user.id, true); + messageModel.seenMessages(user.id ?? "", true); } }); if (user.userUnseenCount > 0) { - messageModel.seenMessages(user.id, true); + messageModel.seenMessages(user.id ?? "", true); } } } @@ -204,7 +204,7 @@ class _HomePageState extends State { @override Widget build(BuildContext context) { - User user = Provider.of(context).user; + User? user = Provider.of(context).user; if (user == null) { Future.microtask( @@ -280,11 +280,11 @@ class _HomePageState extends State { )) .then((value) { if (user.userUnseenCount > 0) { - messageModel.seenMessages(user.id, true); + messageModel.seenMessages(user.id ?? "", true); } }); if (user.userUnseenCount > 0) { - messageModel.seenMessages(user.id, true); + messageModel.seenMessages(user.id ?? "", true); } }); final notiBtn = badgeCounter(notiBtnOrg, user.userUnseenCount); diff --git a/lib/pages/main/initial_language_selection.dart b/lib/pages/main/initial_language_selection.dart index 0253db3..7ce4cfe 100644 --- a/lib/pages/main/initial_language_selection.dart +++ b/lib/pages/main/initial_language_selection.dart @@ -26,9 +26,9 @@ class _InitialLanguageSelectionPageState languagesList[1]: languageCodesList[1], }; - String selectedLanguage = 'en'; + String selectedLanguage = 'en'; late int selectedIndex; - bool _isLoading = false; + bool _isLoading = false; @override void initState() { @@ -101,8 +101,8 @@ class _InitialLanguageSelectionPageState ? BoxDecoration() : BoxDecoration( border: Border( - bottom: - BorderSide(color: Colors.grey.shade300), + bottom: BorderSide( + color: Colors.grey.shade300), ), ), child: ListTile( @@ -177,7 +177,7 @@ class _InitialLanguageSelectionPageState setState(() { selectedIndex = index; selectedLanguage = lang; - Translation().onLocaleChanged!(Locale(languagesMap[lang])); + Translation().onLocaleChanged(Locale(languagesMap[lang])); Provider.of(context, listen: false) .saveLanguage(selectedLanguage); }); diff --git a/lib/pages/main/model/base_model.dart b/lib/pages/main/model/base_model.dart index a0b82d0..a5cbc4f 100644 --- a/lib/pages/main/model/base_model.dart +++ b/lib/pages/main/model/base_model.dart @@ -6,9 +6,9 @@ import 'package:fcs/helpers/api_helper.dart'; import 'main_model.dart'; abstract class BaseModel extends ChangeNotifier { - User user; - Setting setting; - MainModel mainModel; + User? user; + Setting? setting; + MainModel? mainModel; void initUser(User user) async { this.user = user; @@ -16,7 +16,7 @@ abstract class BaseModel extends ChangeNotifier { void privilegeChanged() {} - void initSetting(Setting setting) async { + void initSetting(Setting? setting) async { this.setting = setting; } @@ -32,8 +32,8 @@ abstract class BaseModel extends ChangeNotifier { String path, method, { dynamic payload, - String token, - String url, + required String token, + String? url, }) async { return await requestAPI(path, method, payload: payload, token: token, url: url); diff --git a/lib/pages/main/model/language_model.dart b/lib/pages/main/model/language_model.dart index b6bd04c..5be6d4e 100644 --- a/lib/pages/main/model/language_model.dart +++ b/lib/pages/main/model/language_model.dart @@ -5,7 +5,7 @@ import 'package:flutter/painting.dart'; import 'base_model.dart'; class LanguageModel extends BaseModel { - String language; + late String language; bool get isEng => this.language == "English"; List get currentState => isEng ? [true, false] : [false, true]; diff --git a/lib/pages/main/model/main_model.dart b/lib/pages/main/model/main_model.dart index 5f2180e..67a963b 100644 --- a/lib/pages/main/model/main_model.dart +++ b/lib/pages/main/model/main_model.dart @@ -15,16 +15,16 @@ class MainModel extends ChangeNotifier { final log = Logger('MainModel'); List models = []; - String messagingToken; - User user; - PackageInfo packageInfo; + String? messagingToken; + User? user; + PackageInfo? packageInfo; set setMessaginToken(token) { this.messagingToken = token; uploadMsgToken(); } - Setting setting; + Setting? setting; bool isLoaded = false; bool isOnline = false; @@ -42,23 +42,23 @@ class MainModel extends ChangeNotifier { } bool faqEditable() { - return this.user != null && this.user.hasSupport(); + return this.user != null && this.user!.hasSupport(); } bool rateEditable() { - return this.user != null && this.user.hasSupport(); + return this.user != null && this.user!.hasSupport(); } bool paymentMethodsEditable() { - return this.user != null && this.user.hasSupport(); + return this.user != null && this.user!.hasSupport(); } bool termEditable() { - return this.user != null && this.user.hasSupport(); + return this.user != null && this.user!.hasSupport(); } bool contactEditable() { - return this.user != null && this.user.hasSupport(); + return this.user != null && this.user!.hasSupport(); } bool isLogin() { @@ -66,32 +66,31 @@ class MainModel extends ChangeNotifier { } bool isCustomer() { - return user != null && user.isCustomer(); + return user != null && user!.isCustomer(); } bool isSysAdmin() { - return this.user != null && this.user.hasSysAdmin(); + return this.user != null && this.user!.hasSysAdmin(); } bool isAdmin() { - return this.user != null && this.user.hasAdmin(); + return this.user != null && this.user!.hasAdmin(); } // userListener should never be closed - StreamSubscription userListener; + StreamSubscription? userListener; _init() async { await _listenSetting(); - this.isFirstLaunch = await SharedPref.isFirstLaunch(); - this.isFirstLaunch = this.isFirstLaunch ?? true; + this.isFirstLaunch = await SharedPref.isFirstLaunch() ?? true; this.packageInfo = await PackageInfo.fromPlatform(); - if (userListener != null) userListener.cancel(); + if (userListener != null) userListener!.cancel(); userListener = Services.instance.authService.getUserStream().listen((_user) { if (_user != null) { models.forEach((m) => m.initUser(_user)); // call diffPrivileges if privilege changed or first time login - if (this.user == null || _user.diffPrivileges(this.user)) { + if (this.user == null || _user.diffPrivileges(this.user!)) { models.forEach((m) => m.privilegeChanged()); } if (this.user == null) { @@ -124,7 +123,7 @@ class MainModel extends ChangeNotifier { bool isSupport() { if (packageInfo == null || setting == null) return false; - return int.parse(packageInfo.buildNumber) >= setting.supportBuildNum; + return int.parse(packageInfo!.buildNumber) >= setting!.supportBuildNum; } Future sendSms(String phoneNumber) { @@ -137,14 +136,14 @@ class MainModel extends ChangeNotifier { return authResult; } - Future uploadMsgToken() { + Future? uploadMsgToken() { if (messagingToken == null || user == null) return null; - return Services.instance.userService.uploadMsgToken(messagingToken); + return Services.instance.userService.uploadMsgToken(messagingToken!); } - Future removeMsgToken() { + Future? removeMsgToken() { if (messagingToken == null || user == null) return null; - return Services.instance.userService.removeMsgToken(messagingToken); + return Services.instance.userService.removeMsgToken(messagingToken!); } Future signout() async {