null safety

This commit is contained in:
phyothandar
2021-09-10 12:00:08 +06:30
parent a144c945b6
commit 5e672937b5
67 changed files with 901 additions and 896 deletions

View File

@@ -18,14 +18,14 @@ import 'package:fcs/pages/widgets/multi_img_file.dart';
import 'package:fcs/pages/widgets/progress.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';
class PackageEditor extends StatefulWidget {
final Package package;
final User consignee;
final User sender;
final Package? package;
final User? consignee;
final User? sender;
PackageEditor({this.package, this.consignee, this.sender});
@override
@@ -38,13 +38,13 @@ class _PackageEditorState extends State<PackageEditor> {
bool _isLoading = false;
MultiImgController multiImgController = MultiImgController();
Package _package;
Package? _package;
@override
void initState() {
super.initState();
_package = Package();
_loadPackageData(null);
_loadPackageData(widget.package!.id);
}
_loadPackageData(String id) async {
@@ -64,10 +64,10 @@ class _PackageEditorState extends State<PackageEditor> {
}
}
setState(() {
selectedMarket = _package.market ?? "";
_descCtl.text = _package.desc;
_remarkCtl.text = _package.remark;
multiImgController.setImageUrls = _package.photoUrls;
selectedMarket = _package!.market ?? "";
_descCtl.text = _package!.desc;
_remarkCtl.text = _package!.remark;
multiImgController.setImageUrls = _package!.photoUrls;
});
}
@@ -77,7 +77,7 @@ class _PackageEditorState extends State<PackageEditor> {
children: <Widget>[
Expanded(
child: DisplayText(
text: _package.trackingID,
text: _package!.trackingID != null ? _package!.trackingID : "",
labelTextKey: "processing.tracking.id",
iconData: MaterialCommunityIcons.barcode_scan,
)),
@@ -174,13 +174,13 @@ class _PackageEditorState extends State<PackageEditor> {
);
}
String selectedMarket;
String? selectedMarket;
Widget marketDropdown() {
List<Market> _markets = Provider.of<MarketModel>(context).markets;
List<String> markets = _markets.map((e) => e.name).toList();
markets.insert(0, MANAGE_MARKET);
if (!markets.contains(selectedMarket)) {
markets.insert(0, selectedMarket);
markets.insert(0, selectedMarket!);
}
return Row(
@@ -210,7 +210,7 @@ class _PackageEditorState extends State<PackageEditor> {
height: 1,
color: Colors.grey,
),
onChanged: (String newValue) {
onChanged: (String? newValue) {
setState(() {
if (newValue == MANAGE_MARKET) {
selectedMarket = null;
@@ -254,14 +254,15 @@ class _PackageEditorState extends State<PackageEditor> {
PackageModel packageModel =
Provider.of<PackageModel>(context, listen: false);
try {
_package.market = selectedMarket;
_package.desc = _descCtl.text;
_package.remark = _remarkCtl.text;
_package.photoFiles = multiImgController.getUpdatedFile;
_package.fcsID = widget.consignee.fcsID;
_package.senderFCSID = widget.sender?.fcsID;
_package!.market = selectedMarket!;
_package!.desc = _descCtl.text;
_package!.remark = _remarkCtl.text;
_package!.photoFiles = multiImgController.getUpdatedFile;
_package!.fcsID = widget.consignee!.fcsID;
_package!.senderFCSID =
widget.sender!.fcsID != null ? widget.sender!.fcsID : "";
await packageModel.updateProcessing(_package,
await packageModel.updateProcessing(_package!,
multiImgController.getAddedFile, multiImgController.getDeletedUrl);
Navigator.pop<Package>(context, _package);

View File

@@ -17,12 +17,12 @@ import 'package:fcs/pages/widgets/multi_img_file.dart';
import 'package:fcs/pages/widgets/progress.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class ProcessingEditEditor extends StatefulWidget {
final Package package;
final Package? package;
ProcessingEditEditor({this.package});
@override
@@ -33,22 +33,22 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
TextEditingController _remarkCtl = new TextEditingController();
TextEditingController _descCtl = new TextEditingController();
Package _package;
User _user;
Package? _package;
User? _user;
bool _isLoading = false;
@override
void initState() {
super.initState();
_package = widget.package;
selectedMarket = _package.market ?? "";
_descCtl.text = _package.desc;
_remarkCtl.text = _package.remark;
multiImgController.setImageUrls = _package.photoUrls;
selectedMarket = _package!.market ?? "";
_descCtl.text = _package!.desc;
_remarkCtl.text = _package!.remark;
multiImgController.setImageUrls = _package!.photoUrls;
_user = User(
fcsID: _package.fcsID ?? "",
name: _package.userName ?? "",
phoneNumber: _package.phoneNumber ?? "");
fcsID: _package!.fcsID ?? "",
name: _package!.userName ?? "",
phoneNumber: _package!.phoneNumber ?? "");
}
final DateFormat dateFormat = DateFormat("d MMM yyyy");
@@ -62,7 +62,7 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
children: <Widget>[
Expanded(
child: DisplayText(
text: _user.fcsID,
text: _user!.fcsID,
labelTextKey: "processing.fcs.id",
icon: FcsIDIcon(),
)),
@@ -76,18 +76,18 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
],
);
final namebox = DisplayText(
text: _user.name,
text: _user!.name,
labelTextKey: "processing.name",
iconData: Icons.person,
);
final phoneNumberBox = DisplayText(
text: _user.phoneNumber,
text: _user!.phoneNumber,
labelTextKey: "processing.phone",
iconData: Icons.phone,
);
final trackingIdBox = DisplayText(
text: _package.trackingID,
text: _package!.trackingID,
labelTextKey: "processing.tracking.id",
iconData: MaterialCommunityIcons.barcode_scan,
);
@@ -159,13 +159,13 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
);
}
String selectedMarket;
String? selectedMarket;
Widget marketDropdown() {
List<Market> _markets = Provider.of<MarketModel>(context).markets;
List<String> markets = _markets.map((e) => e.name).toList();
markets.insert(0, MANAGE_MARKET);
if (!markets.contains(selectedMarket)) {
markets.insert(0, selectedMarket);
markets.insert(0, selectedMarket!);
}
return Padding(
@@ -197,7 +197,7 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
height: 1,
color: Colors.grey,
),
onChanged: (String newValue) {
onChanged: (String? newValue) {
setState(() {
if (newValue == MANAGE_MARKET) {
selectedMarket = null;
@@ -236,7 +236,7 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
}
_completeProcessing() async {
if (_user.fcsID == null || _user.fcsID == "") {
if (_user!.fcsID == null || _user!.fcsID == "") {
showMsgDialog(context, "Error", "Expected FCS-ID");
return;
}
@@ -246,11 +246,11 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
PackageModel packageModel =
Provider.of<PackageModel>(context, listen: false);
try {
_package.fcsID = _user.fcsID;
_package.desc = _descCtl.text;
_package.remark = _remarkCtl.text;
_package.market = selectedMarket;
await packageModel.updateProcessing(_package,
_package!.fcsID = _user!.fcsID;
_package!.desc = _descCtl.text;
_package!.remark = _remarkCtl.text;
_package!.market = selectedMarket!;
await packageModel.updateProcessing(_package!,
multiImgController.getAddedFile, multiImgController.getDeletedUrl);
Navigator.pop(context);
} catch (e) {
@@ -264,20 +264,20 @@ class _ProcessingEditEditorState extends State<ProcessingEditEditor> {
isDataChanged() {
if (isNew) {
return _user.fcsID != "" ||
return _user!.fcsID != "" ||
selectedMarket != null ||
_descCtl.text != "" ||
_remarkCtl.text != "" ||
multiImgController.getAddedFile.isNotEmpty;
} else {
var _package = Package(
trackingID: widget.package.trackingID,
fcsID: _user.fcsID,
market: selectedMarket,
trackingID: widget.package!.trackingID,
fcsID: _user!.fcsID,
market: selectedMarket!,
desc: _descCtl.text,
remark: _remarkCtl.text,
photoUrls: widget.package.photoUrls);
return widget.package.isChangedForEditProcessing(_package) ||
photoUrls: widget.package!.photoUrls);
return widget.package!.isChangedForEditProcessing(_package) ||
multiImgController.getAddedFile.isNotEmpty ||
multiImgController.getDeletedUrl.isNotEmpty;
}

View File

@@ -11,14 +11,14 @@ import 'package:fcs/pages/widgets/local_text.dart';
import 'package:fcs/pages/widgets/progress.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
import 'package:provider/provider.dart';
import 'model/processing_model.dart';
import 'package_editor.dart';
class ProcesingEditor extends StatefulWidget {
final Processing processing;
final Processing? processing;
const ProcesingEditor({this.processing});
@override
_ProcesingEditorState createState() => _ProcesingEditorState();
@@ -27,9 +27,9 @@ class ProcesingEditor extends StatefulWidget {
class _ProcesingEditorState extends State<ProcesingEditor> {
Processing processing = Processing();
bool _isLoading = false;
bool _isNew;
User consignee;
User sender;
late bool _isNew;
User? consignee;
User? sender;
List<Package> packages = [];
@override
@@ -37,7 +37,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
super.initState();
_isNew = widget.processing == null;
if (!_isNew) {
processing = widget.processing;
processing = widget.processing!;
consignee = User(
fcsID: processing.userID,
name: processing.userName,
@@ -56,7 +56,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
children: <Widget>[
Expanded(
child: DisplayText(
text: consignee != null ? consignee.fcsID : "",
text: consignee != null ? consignee!.fcsID : "",
labelTextKey: "processing.fcs.id",
icon: FcsIDIcon(),
)),
@@ -71,14 +71,14 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
);
final phoneNumberBox = DisplayText(
text: consignee != null ? consignee.phoneNumber : "",
text: consignee != null ? consignee!.phoneNumber : "",
labelTextKey: "processing.phone",
maxLines: 2,
iconData: Icons.phone,
);
final namebox = DisplayText(
text: consignee != null ? consignee.name : "",
text: consignee != null ? consignee!.name : "",
labelTextKey: "processing.consignee.name",
maxLines: 2,
iconData: Icons.person,
@@ -98,7 +98,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
children: <Widget>[
Expanded(
child: DisplayText(
text: sender != null ? sender.fcsID : "",
text: sender != null ? sender!.fcsID : "",
labelTextKey: "processing.fcs.id",
icon: FcsIDIcon(),
)),
@@ -113,14 +113,14 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
);
final shipperPhoneNumberBox = DisplayText(
text: sender != null ? sender.phoneNumber : "",
text: sender != null ? sender!.phoneNumber : "",
labelTextKey: "processing.phone",
maxLines: 2,
iconData: Icons.phone,
);
final shipperNamebox = DisplayText(
text: sender != null ? sender.name : "",
text: sender != null ? sender!.name : "",
labelTextKey: "processing.shipper.name",
maxLines: 2,
iconData: Icons.person,
@@ -152,7 +152,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
context, "Warning", "Please select 'Consignee'");
return;
}
Package _package = await Navigator.push<Package>(
Package? _package = await Navigator.push<Package>(
context,
CupertinoPageRoute(
builder: (context) => PackageEditor(
@@ -160,7 +160,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
consignee: this.consignee,
)),
);
_addPackage(_package);
_addPackage(_package!);
// _savePackage(_package);
}),
],
@@ -230,10 +230,10 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
return packages.map((p) {
return InkWell(
onTap: () async {
Package _package = await Navigator.of(context).push<Package>(
Package? _package = await Navigator.of(context).push<Package>(
CupertinoPageRoute(
builder: (context) => PackageInfo(package: p)));
_savePackage(_package);
_savePackage(_package!);
},
child: DisplayText(
labelTextKey: "processing.tracking.id",
@@ -273,7 +273,7 @@ class _ProcesingEditorState extends State<ProcesingEditor> {
if (_isNew) {
await processingModel.createProcessing(processing);
} else {
processing.id = widget.processing.id;
processing.id = widget.processing!.id;
await processingModel.updateProcessing(processing);
}
Navigator.pop(context);

View File

@@ -11,7 +11,7 @@ import 'package:fcs/pages/widgets/progress.dart';
import 'package:fcs/pages/widgets/status_tree.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
@@ -20,7 +20,7 @@ import 'processing_edit_editor.dart';
final DateFormat dateFormat = DateFormat("d MMM yyyy");
class ProcessingInfo extends StatefulWidget {
final Package package;
final Package? package;
ProcessingInfo({this.package});
@override
@@ -29,14 +29,14 @@ class ProcessingInfo extends StatefulWidget {
class _ProcessingInfoState extends State<ProcessingInfo> {
var dateFormatter = new DateFormat('dd MMM yyyy');
Package _package;
Package? _package;
bool _isLoading = false;
MultiImgController multiImgController = MultiImgController();
@override
void initState() {
super.initState();
initPackage(widget.package);
initPackage(widget.package!);
}
initPackage(Package package) {
@@ -54,52 +54,52 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
@override
Widget build(BuildContext context) {
final trackingIdBox = DisplayText(
text: _package.trackingID,
text: _package != null ? _package!.trackingID : '',
labelTextKey: "processing.tracking.id",
iconData: MaterialCommunityIcons.barcode_scan,
);
var fcsIDBox = DisplayText(
text: _package.fcsID,
text: _package != null ? _package!.fcsID : "",
labelTextKey: "processing.fcs.id",
icon: FcsIDIcon(),
);
final phoneNumberBox = DisplayText(
text: _package.phoneNumber,
text: _package != null ? _package!.phoneNumber : "",
labelTextKey: "processing.phone",
iconData: Icons.phone,
);
final customerNameBox = DisplayText(
text: _package.userName,
text:_package!=null? _package!.userName:"",
labelTextKey: "processing.consignee.name",
iconData: Icons.perm_identity,
);
var senderFcsIDBox = DisplayText(
text: _package.senderFCSID,
text:_package!=null? _package!.senderFCSID:"",
labelTextKey: "processing.fcs.id",
icon: FcsIDIcon(),
);
final senderPhoneNumberBox = DisplayText(
text: _package.senderPhoneNumber,
text: _package!=null?_package!.senderPhoneNumber:"",
labelTextKey: "processing.phone",
iconData: Icons.phone,
);
final senderNameBox = DisplayText(
text: _package.senderName,
text:_package!=null? _package!.senderName:"",
labelTextKey: "processing.shipper.name",
iconData: Icons.perm_identity,
);
final marketBox = DisplayText(
text: _package.market ?? "-",
text:_package!=null? _package!.market : "-",
labelTextKey: "processing.market",
iconData: Icons.store,
);
final descBox = DisplayText(
text: _package.desc ?? "-",
text:_package!=null? _package!.desc : "-",
labelTextKey: "processing.desc",
iconData: MaterialCommunityIcons.message_text_outline,
);
final remarkBox = DisplayText(
text: _package.remark ?? "-",
text:_package!=null? _package!.remark : "-",
labelTextKey: "processing.remark",
iconData: Entypo.new_message,
);
@@ -172,10 +172,10 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
marketBox,
descBox,
remarkBox,
_package.photoUrls.length == 0 ? Container() : img,
_package!.photoUrls.length == 0 ? Container() : img,
StatusTree(
shipmentHistory: _package.shipmentHistory,
currentStatus: _package.status),
shipmentHistory: _package!.shipmentHistory,
currentStatus: _package!.status),
SizedBox(
height: 20,
)
@@ -199,7 +199,7 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
PackageModel packageModel =
Provider.of<PackageModel>(context, listen: false);
try {
await packageModel.deleteProcessing(_package);
await packageModel.deleteProcessing(_package!);
Navigator.pop<bool>(context, true);
} catch (e) {
showMsgDialog(context, "Error", e.toString());
@@ -211,7 +211,7 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
}
_gotoEditor() async {
bool deleted = await Navigator.push<bool>(
bool? deleted = await Navigator.push<bool>(
context,
CupertinoPageRoute(
builder: (context) => ProcessingEditEditor(
@@ -222,7 +222,7 @@ class _ProcessingInfoState extends State<ProcessingInfo> {
} else {
PackageModel packageModel =
Provider.of<PackageModel>(context, listen: false);
Package p = await packageModel.getPackage(_package.id);
Package p = await packageModel.getPackage(_package!.id);
initPackage(p);
}
}

View File

@@ -3,7 +3,7 @@ import 'package:fcs/helpers/theme.dart';
import 'package:fcs/pages/main/util.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:flutter_vector_icons/flutter_vector_icons.dart';
import 'package:intl/intl.dart';
import 'processing_info.dart';
@@ -11,12 +11,12 @@ import 'processing_info.dart';
typedef CallbackPackageSelect(Package package);
class ProcessingListRow extends StatelessWidget {
final Package package;
final CallbackPackageSelect callbackPackageSelect;
final Package? package;
final CallbackPackageSelect? callbackPackageSelect;
final double dotSize = 15.0;
final DateFormat dateFormat = new DateFormat("dd MMM yyyy");
ProcessingListRow({Key key, this.package, this.callbackPackageSelect})
ProcessingListRow({Key? key, this.package, this.callbackPackageSelect})
: super(key: key);
@override
@@ -24,7 +24,7 @@ class ProcessingListRow extends StatelessWidget {
return InkWell(
onTap: () {
if (callbackPackageSelect != null) {
callbackPackageSelect(package);
callbackPackageSelect!(package!);
return;
}
Navigator.push(
@@ -57,7 +57,7 @@ class ProcessingListRow extends StatelessWidget {
Padding(
padding: const EdgeInsets.only(left: 8.0),
child: new Text(
package.id == null ? '' : package.trackingID,
package!.id == null ? '' : package!.trackingID,
style: new TextStyle(
fontSize: 15.0, color: Colors.black),
),
@@ -65,7 +65,7 @@ class ProcessingListRow extends StatelessWidget {
Padding(
padding: const EdgeInsets.only(left: 8.0),
child: new Text(
package.market == null ? '' : package.market,
package!.market == null ? '' : package!.market,
style: new TextStyle(
fontSize: 15.0, color: Colors.black),
),
@@ -81,12 +81,12 @@ class ProcessingListRow extends StatelessWidget {
children: <Widget>[
Padding(
padding: const EdgeInsets.all(3.0),
child: getStatus(package.status),
child: getStatus(package!.status),
),
Padding(
padding: const EdgeInsets.all(0),
child: new Text(
dateFormat.format(package.currentStatusDate),
dateFormat.format(package!.currentStatusDate),
style: new TextStyle(fontSize: 15.0, color: Colors.grey),
),
),