fix null safety

This commit is contained in:
2021-09-11 16:56:20 +06:30
parent a4d3777e8a
commit fe799ad820
32 changed files with 125 additions and 93 deletions

View File

@@ -24,12 +24,16 @@ if (flutterVersionName == null) {
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
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 {
compileSdkVersion 30 compileSdkVersion 30
defaultConfig { defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.mokkon.fcs.fcs"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 30 targetSdkVersion 30
versionCode flutterVersionCode.toInteger() versionCode flutterVersionCode.toInteger()

View File

@@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mokkon.fcs_dev.fcs"> package="com.mokkon.fcs.fcs">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- io.flutter.app.FlutterApplication is an android.app.Application that <!-- io.flutter.app.FlutterApplication is an android.app.Application that
@@ -15,7 +15,6 @@
android:name=".MainActivity" android:name=".MainActivity"
android:launchMode="singleTop" android:launchMode="singleTop"
android:theme="@style/LaunchTheme" android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true" android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize">
<!-- This keeps the window background of the activity showing <!-- This keeps the window background of the activity showing

View File

@@ -1,7 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mokkon.fcs.fcs"> package="com.mokkon.fcs.fcs">
<application <application
android:label="fcs"
android:icon="@mipmap/ic_launcher"> android:icon="@mipmap/ic_launcher">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"

View File

@@ -0,0 +1,13 @@
package com.mokkon.fcs.fcs;
import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class Application extends FlutterApplication {
@Override
public void onCreate() {
super.onCreate();
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 721 B

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">FCS</string>
</resources>

View File

@@ -0,0 +1 @@
include ':app'

View File

@@ -32,9 +32,6 @@ class AuthFb {
try { try {
_authResult = await _fb.signInWithCredential(credential); _authResult = await _fb.signInWithCredential(credential);
print("PhoneVerificationCompleted :$_authResult"); print("PhoneVerificationCompleted :$_authResult");
if (_authResult == null) {
throw SigninException("Sigin error!");
}
} catch (e) { } catch (e) {
print("Exception:$e"); print("Exception:$e");
// throw e; // throw e;
@@ -61,6 +58,7 @@ class AuthFb {
_verificationId = verificationId; _verificationId = verificationId;
print("codeSent " + phoneNumber); print("codeSent " + phoneNumber);
codeSentCompleted = true; codeSentCompleted = true;
if (!completer.isCompleted)
completer.complete(fcs.AuthResult(authStatus: AuthStatus.SMS_SENT)); completer.complete(fcs.AuthResult(authStatus: AuthStatus.SMS_SENT));
}; };
@@ -70,6 +68,7 @@ class AuthFb {
_verificationId = verificationId; _verificationId = verificationId;
if (codeSentCompleted) { if (codeSentCompleted) {
if (!completer.isCompleted)
completer.complete(fcs.AuthResult(authStatus: AuthStatus.SMS_SENT)); completer.complete(fcs.AuthResult(authStatus: AuthStatus.SMS_SENT));
} else { } else {
completer.completeError(SigninException("SMS code failed")); completer.completeError(SigninException("SMS code failed"));
@@ -92,11 +91,7 @@ class AuthFb {
final fb.AuthCredential credential = fb.PhoneAuthProvider.credential( final fb.AuthCredential credential = fb.PhoneAuthProvider.credential(
verificationId: _verificationId, smsCode: smsCode); verificationId: _verificationId, smsCode: smsCode);
fb.UserCredential _authResult =
await _fb.signInWithCredential(credential); await _fb.signInWithCredential(credential);
if (_authResult == null) {
throw SigninException("Sigin error!");
}
await _addUserToStream(refreshIdToken: true); await _addUserToStream(refreshIdToken: true);
} on Exception catch (e) { } on Exception catch (e) {
return Future.error(SigninException(e.toString())); return Future.error(SigninException(e.toString()));
@@ -118,7 +113,7 @@ class AuthFb {
log.info("Claims:$claims"); log.info("Claims:$claims");
if (claims == null) return; if (claims == null) return;
String cid = claims["cid"]; String? cid = claims["cid"];
User? user; User? user;
if (cid != null && cid != "") { if (cid != null && cid != "") {
user = await _getUserFromFirestore(cid); user = await _getUserFromFirestore(cid);
@@ -129,7 +124,7 @@ class AuthFb {
} }
// add privileges // add privileges
String privileges = claims["pr"]; String? privileges = claims["pr"];
if (privileges != null && privileges != "") { if (privileges != null && privileges != "") {
user.privileges = privileges.split(":").toList(); user.privileges = privileges.split(":").toList();
} else { } else {
@@ -238,7 +233,7 @@ class AuthFb {
// get privilege from claim // get privilege from claim
fb.IdTokenResult idToken = await firebaseUser.getIdTokenResult(true); fb.IdTokenResult idToken = await firebaseUser.getIdTokenResult(true);
String privileges = idToken.claims?["pr"] ?? ''; String? privileges = idToken.claims?["pr"] ?? '';
if (privileges != null && privileges != "") { if (privileges != null && privileges != "") {
user.privileges = privileges.split(":").toList(); user.privileges = privileges.split(":").toList();
} }
@@ -274,7 +269,7 @@ class AuthFb {
} }
} }
controller = StreamController<User>( controller = StreamController<User?>(
onListen: _start, onPause: _stop, onResume: _start, onCancel: _stop); onListen: _start, onPause: _stop, onResume: _start, onCancel: _stop);
return controller.stream; return controller.stream;

View File

@@ -45,9 +45,13 @@ class MessagingFCM {
} }
}); });
try {
String? token = await _firebaseMessaging.getToken(); String? token = await _firebaseMessaging.getToken();
if (onSetupComplete != null && token != null) onSetupComplete(token); if (onSetupComplete != null && token != null) onSetupComplete(token);
log.info("Messaging Token:$token"); log.info("Messaging Token:$token");
} on Exception catch (e) {
log.shout("Unable to get messing token:$e");
}
} }
Future<void> subscribeToTopic(String topic) { Future<void> subscribeToTopic(String topic) {

View File

@@ -1,3 +1,4 @@
import 'package:firebase_core/firebase_core.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:logging/logging.dart'; import 'package:logging/logging.dart';
@@ -6,8 +7,9 @@ import 'app.dart';
import 'config.dart'; import 'config.dart';
import 'data/provider/messaging_fcm.dart'; import 'data/provider/messaging_fcm.dart';
void main() { Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler);
Config( Config(

View File

@@ -12,7 +12,7 @@ import 'package:logging/logging.dart';
class CartonModel extends BaseModel { class CartonModel extends BaseModel {
List<Carton> _boxes = []; List<Carton> _boxes = [];
late PaginatorListener<Carton> cartonsByFilter; PaginatorListener<Carton>? cartonsByFilter;
final log = Logger('CartonModel'); final log = Logger('CartonModel');
List<Carton> get boxes => _selectedIndex == 1 List<Carton> get boxes => _selectedIndex == 1
@@ -165,8 +165,8 @@ class CartonModel extends BaseModel {
.where("status", isEqualTo: carton_packed_status) .where("status", isEqualTo: carton_packed_status)
.orderBy(orderName, descending: true); .orderBy(orderName, descending: true);
cartonsByFilter.refresh( cartonsByFilter!
listeningQuery: listenerQuery, pageQuery: pageQuery); .refresh(listeningQuery: listenerQuery, pageQuery: pageQuery);
} catch (e) { } catch (e) {
log.warning("Error!! $e"); log.warning("Error!! $e");
} }
@@ -211,7 +211,7 @@ class CartonModel extends BaseModel {
if (listener != null) await listener!.cancel(); if (listener != null) await listener!.cancel();
if (cartonListener != null) await cartonListener!.cancel(); if (cartonListener != null) await cartonListener!.cancel();
if (_delivered != null) _delivered!.close(); if (_delivered != null) _delivered!.close();
if (cartonsByFilter != null) cartonsByFilter.close(); if (cartonsByFilter != null) cartonsByFilter!.close();
_boxes = []; _boxes = [];
} }

View File

@@ -146,7 +146,7 @@ class PartSearchDelegate extends SearchDelegate<Carton> {
return Container( return Container(
padding: EdgeInsets.only(top: 5), padding: EdgeInsets.only(top: 5),
child: PaginatorListView<Carton>( child: PaginatorListView<Carton>(
paginatorListener: cartonModel.cartonsByFilter, paginatorListener: cartonModel.cartonsByFilter!,
rowBuilder: (c) => CartonListRow( rowBuilder: (c) => CartonListRow(
key: ValueKey(c.id), key: ValueKey(c.id),
carton: c, carton: c,

View File

@@ -13,11 +13,11 @@ class DeliveryAddressModel extends BaseModel {
StreamSubscription<QuerySnapshot>? listener; StreamSubscription<QuerySnapshot>? listener;
DeliveryAddress get defalutAddress => DeliveryAddress get defalutAddress => deliveryAddresses
deliveryAddresses.firstWhere((e) => e.isDefault, orElse: () => DeliveryAddress()); .firstWhere((e) => e.isDefault, orElse: () => DeliveryAddress());
DeliveryAddress getLocalDeliveryAddress(String id) => DeliveryAddress getLocalDeliveryAddress(String id) => deliveryAddresses
deliveryAddresses.firstWhere((e) => e.id == id, orElse: () => DeliveryAddress()); .firstWhere((e) => e.id == id, orElse: () => DeliveryAddress());
@override @override
void privilegeChanged() { void privilegeChanged() {
@@ -46,7 +46,8 @@ class DeliveryAddressModel extends BaseModel {
deliveryAddresses.clear(); deliveryAddresses.clear();
deliveryAddresses = snapshot.docs.map((documentSnapshot) { deliveryAddresses = snapshot.docs.map((documentSnapshot) {
var s = DeliveryAddress.fromMap( var s = DeliveryAddress.fromMap(
documentSnapshot.data as Map<String,dynamic>, documentSnapshot.id); documentSnapshot.data() as Map<String, dynamic>,
documentSnapshot.id);
return s; return s;
}).toList(); }).toList();
notifyListeners(); notifyListeners();
@@ -59,7 +60,7 @@ class DeliveryAddressModel extends BaseModel {
Future<DeliveryAddress> getDeliveryAddress(String id) async { Future<DeliveryAddress> getDeliveryAddress(String id) async {
String path = "/$user_collection/${user!.id}/$delivery_address_collection"; String path = "/$user_collection/${user!.id}/$delivery_address_collection";
var snap = await FirebaseFirestore.instance.collection(path).doc(id).get(); var snap = await FirebaseFirestore.instance.collection(path).doc(id).get();
return DeliveryAddress.fromMap(snap.data as Map<String,dynamic>, snap.id); return DeliveryAddress.fromMap(snap.data as Map<String, dynamic>, snap.id);
} }
void initUser(user) { void initUser(user) {
@@ -95,7 +96,8 @@ class DeliveryAddressModel extends BaseModel {
.orderBy("full_name") .orderBy("full_name")
.get(); .get();
return querySnap.docs return querySnap.docs
.map((e) => DeliveryAddress.fromMap(e.data as Map<String,dynamic>, e.id)) .map((e) =>
DeliveryAddress.fromMap(e.data as Map<String, dynamic>, e.id))
.toList(); .toList();
} }
} }

View File

@@ -49,7 +49,8 @@ class DiscountModel extends BaseModel {
.listen((snaps) { .listen((snaps) {
_discounts.clear(); _discounts.clear();
snaps.docs.forEach((d) { snaps.docs.forEach((d) {
_discounts.add(Discount.fromMap(d.data as Map<String,dynamic>, d.id)); _discounts
.add(Discount.fromMap(d.data() as Map<String, dynamic>, d.id));
}); });
notifyListeners(); notifyListeners();
}); });
@@ -81,7 +82,7 @@ class DiscountModel extends BaseModel {
var snaps = await q.get(const GetOptions(source: Source.server)); var snaps = await q.get(const GetOptions(source: Source.server));
var discounts = snaps.docs.map((snap) { var discounts = snaps.docs.map((snap) {
if (snap.exists) { if (snap.exists) {
var s = Discount.fromMap(snap.data as Map<String,dynamic>, snap.id); var s = Discount.fromMap(snap.data as Map<String, dynamic>, snap.id);
return s; return s;
} }
}).toList(); }).toList();

View File

@@ -27,7 +27,7 @@ class FAQModel extends BaseModel {
.listen((snaps) { .listen((snaps) {
faqs.clear(); faqs.clear();
snaps.docs.forEach((d) { snaps.docs.forEach((d) {
faqs.add(FAQ.fromMap(d.data as Map<String,dynamic>, d.id)); faqs.add(FAQ.fromMap(d.data(), d.id));
}); });
notifyListeners(); notifyListeners();
}); });

View File

@@ -58,7 +58,7 @@ class FcsShipmentModel extends BaseModel {
_fcsShipments.clear(); _fcsShipments.clear();
_fcsShipments = snapshot.docs.map((documentSnapshot) { _fcsShipments = snapshot.docs.map((documentSnapshot) {
var s = FcsShipment.fromMap( var s = FcsShipment.fromMap(
documentSnapshot.data as Map<String,dynamic>, documentSnapshot.id); documentSnapshot.data() as Map<String,dynamic>, documentSnapshot.id);
return s; return s;
}).toList(); }).toList();
notifyListeners(); notifyListeners();

View File

@@ -20,9 +20,9 @@ class InvoiceModel extends BaseModel {
List<Invoice> _invoices = []; List<Invoice> _invoices = [];
List<Invoice> get invoices => List<Invoice> get invoices =>
_selectedIndex == 1 ? _invoices : List<Invoice>.from(_paginator.values); _selectedIndex == 1 ? _invoices : List<Invoice>.from(_paginator!.values);
late Paginator _paginator; Paginator? _paginator;
bool endOfPaidInvoices = false; bool endOfPaidInvoices = false;
bool isLoading = false; bool isLoading = false;
@@ -43,9 +43,9 @@ class InvoiceModel extends BaseModel {
initData(bool forCustomer, bool isCanceled, bool isPaid) { initData(bool forCustomer, bool isCanceled, bool isPaid) {
_loadInvoices(forCustomer); _loadInvoices(forCustomer);
if (_paginator != null) _paginator.close(); if (_paginator != null) _paginator!.close();
_paginator = _getPaginator(forCustomer, isCanceled, isPaid); _paginator = _getPaginator(forCustomer, isCanceled, isPaid);
_paginator.load(onFinished: () { _paginator!.load(onFinished: () {
notifyListeners(); notifyListeners();
}); });
} }
@@ -70,7 +70,8 @@ class InvoiceModel extends BaseModel {
listener = q.snapshots().listen((QuerySnapshot snapshot) { listener = q.snapshots().listen((QuerySnapshot snapshot) {
_invoices.clear(); _invoices.clear();
_invoices = snapshot.docs.map((documentSnapshot) { _invoices = snapshot.docs.map((documentSnapshot) {
var s = Invoice.fromMap(documentSnapshot.data as Map<String, dynamic>, var s = Invoice.fromMap(
documentSnapshot.data() as Map<String, dynamic>,
documentSnapshot.id); documentSnapshot.id);
return s; return s;
}).toList(); }).toList();
@@ -106,11 +107,11 @@ class InvoiceModel extends BaseModel {
} }
Future<void> loadMore({bool? isCustomer}) async { Future<void> loadMore({bool? isCustomer}) async {
if (_paginator.ended || _selectedIndex == 1) if (_paginator!.ended || _selectedIndex == 1)
return; // when paid menu is not selected return return; // when paid menu is not selected return
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
await _paginator.load(onFinished: () { await _paginator!.load(onFinished: () {
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
}); });
@@ -118,7 +119,7 @@ class InvoiceModel extends BaseModel {
Future<void> refresh({bool? isCustomer}) async { Future<void> refresh({bool? isCustomer}) async {
if (_selectedIndex == 1) return; // when paid menu is not selected return if (_selectedIndex == 1) return; // when paid menu is not selected return
await _paginator.refresh(onFinished: () { await _paginator!.refresh(onFinished: () {
notifyListeners(); notifyListeners();
}); });
} }
@@ -128,7 +129,7 @@ class InvoiceModel extends BaseModel {
} }
logout() async { logout() async {
if (_paginator != null) _paginator.close(); if (_paginator != null) _paginator!.close();
if (listener != null) await listener!.cancel(); if (listener != null) await listener!.cancel();
_invoices = []; _invoices = [];
} }

View File

@@ -27,7 +27,8 @@ class MarketModel extends BaseModel {
markets.clear(); markets.clear();
markets = snapshot.docs.map((documentSnapshot) { markets = snapshot.docs.map((documentSnapshot) {
var user = Market.fromMap( var user = Market.fromMap(
documentSnapshot.data as Map<String, dynamic>, documentSnapshot.id); documentSnapshot.data() as Map<String, dynamic>,
documentSnapshot.id);
return user; return user;
}).toList(); }).toList();
notifyListeners(); notifyListeners();

View File

@@ -16,9 +16,9 @@ import 'package:path/path.dart' as Path;
class PackageModel extends BaseModel { class PackageModel extends BaseModel {
final log = Logger('PackageModel'); final log = Logger('PackageModel');
late PaginatorListener<Package> packages; PaginatorListener<Package>? packages;
late PaginatorListener<Package> customerPackages; PaginatorListener<Package>? customerPackages;
late PaginatorListener<Package> activePackages; PaginatorListener<Package>? activePackages;
bool isLoading = false; bool isLoading = false;
int _menuSelectedIndex = 1; int _menuSelectedIndex = 1;
@@ -63,9 +63,9 @@ class PackageModel extends BaseModel {
@override @override
logout() async { logout() async {
if (customerPackages != null) customerPackages.close(); if (customerPackages != null) customerPackages!.close();
if (packages != null) packages.close(); if (packages != null) packages!.close();
if (activePackages != null) activePackages.close(); if (activePackages != null) activePackages!.close();
} }
Future<void> _loadPackages(bool isDelivered) async { Future<void> _loadPackages(bool isDelivered) async {
@@ -84,7 +84,7 @@ class PackageModel extends BaseModel {
.where("is_delivered", isEqualTo: isDelivered); .where("is_delivered", isEqualTo: isDelivered);
pageQuery = pageQuery.orderBy("update_time", descending: true); pageQuery = pageQuery.orderBy("update_time", descending: true);
packages.refresh(listeningQuery: listenerQuery, pageQuery: pageQuery); packages!.refresh(listeningQuery: listenerQuery, pageQuery: pageQuery);
} catch (e) { } catch (e) {
log.warning("Error!! $e"); log.warning("Error!! $e");
} }
@@ -105,8 +105,8 @@ class PackageModel extends BaseModel {
.where("user_id", isEqualTo: user!.id) .where("user_id", isEqualTo: user!.id)
.orderBy("update_time", descending: true); .orderBy("update_time", descending: true);
customerPackages.refresh( customerPackages!
listeningQuery: listenerQuery, pageQuery: pageQuery); .refresh(listeningQuery: listenerQuery, pageQuery: pageQuery);
} catch (e) { } catch (e) {
log.warning("Error!! $e"); log.warning("Error!! $e");
} }
@@ -128,8 +128,8 @@ class PackageModel extends BaseModel {
.where("is_delivered", isEqualTo: false); .where("is_delivered", isEqualTo: false);
pageQuery = pageQuery.orderBy("update_time", descending: true); pageQuery = pageQuery.orderBy("update_time", descending: true);
activePackages.refresh( activePackages!
listeningQuery: listenerQuery, pageQuery: pageQuery); .refresh(listeningQuery: listenerQuery, pageQuery: pageQuery);
} catch (e) { } catch (e) {
log.warning("Error!! $e"); log.warning("Error!! $e");
} }
@@ -163,8 +163,7 @@ class PackageModel extends BaseModel {
.get(const GetOptions(source: Source.server)); .get(const GetOptions(source: Source.server));
if (snaps.docs.length == 1) { if (snaps.docs.length == 1) {
var snap = snaps.docs[0]; var snap = snaps.docs[0];
var package = var package = Package.fromMap(snap.data(), snap.id);
Package.fromMap(snap.data as Map<String, dynamic>, snap.id);
return package; return package;
} }
} catch (e) { } catch (e) {

View File

@@ -38,7 +38,7 @@ class PackageInfo extends StatefulWidget {
class _PackageInfoState extends State<PackageInfo> { class _PackageInfoState extends State<PackageInfo> {
var dateFormatter = new DateFormat('dd MMM yyyy'); var dateFormatter = new DateFormat('dd MMM yyyy');
Package? _package; Package? _package = Package();
bool _isLoading = false; bool _isLoading = false;
MultiImgController multiImgController = MultiImgController(); MultiImgController multiImgController = MultiImgController();
@@ -48,13 +48,19 @@ class _PackageInfoState extends State<PackageInfo> {
initPackage(widget.package!); initPackage(widget.package!);
} }
initPackage(Package pkg) async { initPackage(Package? pkg) async {
setState(() {
_isLoading = true;
});
if (pkg == null) return;
PackageModel packageModel = PackageModel packageModel =
Provider.of<PackageModel>(context, listen: false); Provider.of<PackageModel>(context, listen: false);
Package? package = await packageModel.getPackageByTrackingID(pkg.trackingID!); Package? package =
await packageModel.getPackageByTrackingID(pkg!.trackingID!);
setState(() { setState(() {
_package = package; _package = package;
multiImgController.setImageUrls = package!.photoUrls; multiImgController.setImageUrls = package!.photoUrls;
_isLoading = false;
}); });
} }

View File

@@ -84,7 +84,7 @@ class _PackageListState extends State<PackageList> {
], ],
), ),
body: PaginatorListView<Package>( body: PaginatorListView<Package>(
paginatorListener: packages, paginatorListener: packages!,
rowBuilder: (p) => PackageListRow( rowBuilder: (p) => PackageListRow(
key: ValueKey(p.id), key: ValueKey(p.id),
package: p, package: p,

View File

@@ -26,8 +26,7 @@ class PaymentMethodModel extends BaseModel {
.listen((snaps) { .listen((snaps) {
paymentMethods.clear(); paymentMethods.clear();
snaps.docs.forEach((d) { snaps.docs.forEach((d) {
paymentMethods paymentMethods.add(PaymentMethod.fromMap(d.data(), d.id));
.add(PaymentMethod.fromMap(d.data as Map<String, dynamic>, d.id));
}); });
notifyListeners(); notifyListeners();
}); });

View File

@@ -73,7 +73,7 @@ class _ProcessingListState extends State<ProcessingList> {
backgroundColor: primaryColor, backgroundColor: primaryColor,
), ),
body: PaginatorListView<Package>( body: PaginatorListView<Package>(
paginatorListener: packages, paginatorListener: packages!,
rowBuilder: (p) => ProcessingListRow( rowBuilder: (p) => ProcessingListRow(
key: ValueKey(p.id), key: ValueKey(p.id),
package: p, package: p,

View File

@@ -65,7 +65,7 @@ class _ProcessingListState extends State<ProcessingList> {
], ],
), ),
body: PaginatorListView<Package>( body: PaginatorListView<Package>(
paginatorListener: packages, paginatorListener: packages!,
rowBuilder: (p) => ProcessingListRow( rowBuilder: (p) => ProcessingListRow(
key: ValueKey(p.id), key: ValueKey(p.id),
package: p, package: p,

View File

@@ -75,7 +75,7 @@ class _ReceivingListState extends State<ReceivingList> {
backgroundColor: primaryColor, backgroundColor: primaryColor,
), ),
body: PaginatorListView<Package>( body: PaginatorListView<Package>(
paginatorListener: packages, paginatorListener: packages!,
rowBuilder: (p) => ReceivingListRow( rowBuilder: (p) => ReceivingListRow(
key: ValueKey(p.id), key: ValueKey(p.id),
package: p, package: p,

View File

@@ -15,11 +15,11 @@ class ShipmentModel extends BaseModel {
List<Shipment> get shipments => _menuSelectedIndex == 1 List<Shipment> get shipments => _menuSelectedIndex == 1
? _shipments ? _shipments
: List<Shipment>.from(_delivered.values); : List<Shipment>.from(_delivered!.values);
List<Shipment> _shipments = []; List<Shipment> _shipments = [];
late Paginator _delivered; Paginator? _delivered;
bool isLoading = false; bool isLoading = false;
int _menuSelectedIndex = 1; int _menuSelectedIndex = 1;
@@ -34,7 +34,7 @@ class ShipmentModel extends BaseModel {
logout(); logout();
_loadShipments(forCustomer, myPickup); _loadShipments(forCustomer, myPickup);
_delivered = _getDelivered(forCustomer); _delivered = _getDelivered(forCustomer);
_delivered.load(onFinished: () { _delivered!.load(onFinished: () {
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
}); });
@@ -42,7 +42,7 @@ class ShipmentModel extends BaseModel {
@override @override
logout() async { logout() async {
if (_delivered != null) _delivered.close(); if (_delivered != null) _delivered!.close();
if (listener != null) await listener!.cancel(); if (listener != null) await listener!.cancel();
_shipments = []; _shipments = [];
} }
@@ -50,10 +50,10 @@ class ShipmentModel extends BaseModel {
Future<void> loadMore({bool? isCustomer}) async { Future<void> loadMore({bool? isCustomer}) async {
if (menuSelectedIndex == 1) if (menuSelectedIndex == 1)
return; // when delivered menu is not selected return return; // when delivered menu is not selected return
if (_delivered.ended) return; if (_delivered!.ended) return;
isLoading = true; isLoading = true;
notifyListeners(); notifyListeners();
await _delivered.load(onFinished: () { await _delivered!.load(onFinished: () {
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
}); });
@@ -62,7 +62,7 @@ class ShipmentModel extends BaseModel {
Future<void> refresh({bool? isCustomer}) async { Future<void> refresh({bool? isCustomer}) async {
if (menuSelectedIndex == 1) if (menuSelectedIndex == 1)
return; // when delivered menu is not selected return return; // when delivered menu is not selected return
await _delivered.refresh(onFinished: () { await _delivered!.refresh(onFinished: () {
notifyListeners(); notifyListeners();
}); });
} }

View File

@@ -46,8 +46,9 @@ class StaffModel extends BaseModel {
.listen((QuerySnapshot snapshot) { .listen((QuerySnapshot snapshot) {
employees.clear(); employees.clear();
employees = snapshot.docs.map((documentSnapshot) { employees = snapshot.docs.map((documentSnapshot) {
var user = var user = User.fromMap(
User.fromMap(documentSnapshot.data as Map<String,dynamic>, documentSnapshot.id); documentSnapshot.data() as Map<String, dynamic>,
documentSnapshot.id);
return user; return user;
}).toList(); }).toList();
notifyListeners(); notifyListeners();
@@ -66,7 +67,8 @@ class StaffModel extends BaseModel {
privileges.clear(); privileges.clear();
privileges = snapshot.docs.map((documentSnapshot) { privileges = snapshot.docs.map((documentSnapshot) {
var privilege = Privilege.fromMap( var privilege = Privilege.fromMap(
documentSnapshot.data as Map<String,dynamic>, documentSnapshot.id); documentSnapshot.data() as Map<String, dynamic>,
documentSnapshot.id);
return privilege; return privilege;
}).toList(); }).toList();
notifyListeners(); notifyListeners();
@@ -101,8 +103,8 @@ class StaffModel extends BaseModel {
.where("privileges", arrayContains: privilege) .where("privileges", arrayContains: privilege)
.get(const GetOptions(source: Source.server)); .get(const GetOptions(source: Source.server));
users = snaps.docs.map((documentSnapshot) { users = snaps.docs.map((documentSnapshot) {
var user = var user = User.fromMap(
User.fromMap(documentSnapshot.data as Map<String,dynamic>, documentSnapshot.id); documentSnapshot.data as Map<String, dynamic>, documentSnapshot.id);
return user; return user;
}).toList(); }).toList();
} catch (e) { } catch (e) {

View File

@@ -7,9 +7,9 @@ import 'package:fcs/helpers/theme.dart';
class LocalText extends Text { class LocalText extends Text {
final BuildContext context; final BuildContext context;
LocalText(this.context, String translationKey, LocalText(this.context, String translationKey,
{Color? color, {Color color = secondaryColor,
double? fontSize, double fontSize = 13,
FontWeight? fontWeight, FontWeight fontWeight = FontWeight.w500,
List<String>? translationVariables, List<String>? translationVariables,
String? text, String? text,
bool underline = false}) bool underline = false})
@@ -19,14 +19,14 @@ class LocalText extends Text {
translationVariables: translationVariables), translationVariables: translationVariables),
style: Provider.of<LanguageModel>(context, listen: false).isEng style: Provider.of<LanguageModel>(context, listen: false).isEng
? newLabelStyle( ? newLabelStyle(
color: color!, color: color,
fontSize: fontSize!, fontSize: fontSize,
fontWeight: fontWeight!, fontWeight: fontWeight,
underline: underline) underline: underline)
: newLabelStyleMM( : newLabelStyleMM(
color: color!, color: color,
fontSize: fontSize!, fontSize: fontSize,
fontWeight: fontWeight!, fontWeight: fontWeight,
underline: underline)); underline: underline));
} }