From 079c9a135d836979616dd3c86b0f2847a706af12 Mon Sep 17 00:00:00 2001 From: phyothandar Date: Fri, 10 Sep 2021 14:25:37 +0630 Subject: [PATCH] null safety --- lib/pages/main/util.dart | 6 +- lib/pages/widgets/bottom_widgets.dart | 2 +- .../widgets/defalut_delivery_address.dart | 18 +++--- .../widgets/delivery_address_selection.dart | 10 ++-- lib/pages/widgets/dialog_input.dart | 12 ++-- lib/pages/widgets/discount_dropdown.dart | 16 ++--- lib/pages/widgets/display_image_source.dart | 8 +-- lib/pages/widgets/display_text.dart | 2 +- lib/pages/widgets/fcs_expansion_tile.dart | 20 +++---- lib/pages/widgets/fcs_icons.dart | 2 +- lib/pages/widgets/image_file_picker.dart | 14 ++--- lib/pages/widgets/img_url.dart | 10 ++-- lib/pages/widgets/input_date.dart | 16 ++--- lib/pages/widgets/input_text.dart | 20 +++---- lib/pages/widgets/input_time.dart | 22 +++---- lib/pages/widgets/length_picker.dart | 58 +++++++++---------- lib/pages/widgets/local_button.dart | 14 ++--- lib/pages/widgets/local_dropdown.dart | 24 ++++---- .../widgets/local_popup_menu_button.dart | 14 ++--- lib/pages/widgets/local_popupmenu.dart | 4 +- lib/pages/widgets/local_radio_buttons.dart | 20 +++---- lib/pages/widgets/local_text.dart | 32 +++++----- lib/pages/widgets/local_title.dart | 10 ++-- lib/pages/widgets/multi_img_controller.dart | 6 +- lib/pages/widgets/multi_img_file.dart | 34 +++++------ lib/pages/widgets/number_cell.dart | 4 +- lib/pages/widgets/offline_redirect.dart | 8 +-- lib/pages/widgets/pdf_screen.dart | 24 ++++---- lib/pages/widgets/popupmenu.dart | 2 +- lib/pages/widgets/progress.dart | 2 +- lib/pages/widgets/show_img.dart | 23 ++++---- 31 files changed, 230 insertions(+), 227 deletions(-) diff --git a/lib/pages/main/util.dart b/lib/pages/main/util.dart index ca1cb18..277bfe1 100644 --- a/lib/pages/main/util.dart +++ b/lib/pages/main/util.dart @@ -54,7 +54,7 @@ Future showConfirmDialog( FlatButton( color: Colors.grey[300], child: Text( - AppTranslations.of(context).text('btn.cancel'), + AppTranslations.of(context)!.text('btn.cancel'), style: Provider.of(context).isEng ? TextStyle() : TextStyle(fontFamily: 'Myanmar3'), @@ -67,7 +67,7 @@ Future showConfirmDialog( ), FlatButton( color: primaryColor, - child: Text(AppTranslations.of(context).text('btn.ok'), + child: Text(AppTranslations.of(context)!.text('btn.ok'), style: Provider.of(context).isEng ? TextStyle( color: Colors.white, @@ -367,7 +367,7 @@ Widget fcsButton(BuildContext context, String text, } String getLocalString(BuildContext context, String key) { - return AppTranslations.of(context).text(key); + return AppTranslations.of(context)!.text(key); } void showToast(GlobalKey key, String text) { diff --git a/lib/pages/widgets/bottom_widgets.dart b/lib/pages/widgets/bottom_widgets.dart index c64ff11..467630c 100644 --- a/lib/pages/widgets/bottom_widgets.dart +++ b/lib/pages/widgets/bottom_widgets.dart @@ -5,7 +5,7 @@ import 'package:fcs/pages/widgets/local_text.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; -import 'package:flutter_icons/flutter_icons.dart'; +import 'package:flutter_vector_icons/flutter_vector_icons.dart'; import 'package:provider/provider.dart'; class BottomWidgets extends StatelessWidget { diff --git a/lib/pages/widgets/defalut_delivery_address.dart b/lib/pages/widgets/defalut_delivery_address.dart index 649abcf..3610701 100644 --- a/lib/pages/widgets/defalut_delivery_address.dart +++ b/lib/pages/widgets/defalut_delivery_address.dart @@ -3,20 +3,20 @@ import 'package:fcs/helpers/theme.dart'; import 'package:fcs/pages/delivery_address/delivery_address_row.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 'callbacks.dart'; import 'display_text.dart'; import 'local_text.dart'; class DefaultDeliveryAddress extends StatelessWidget { - final DeliveryAddress deliveryAddress; - final String labelKey; - final OnTap onTap; - final IconData iconData; + final DeliveryAddress? deliveryAddress; + final String? labelKey; + final OnTap? onTap; + final IconData? iconData; const DefaultDeliveryAddress( - {Key key, this.deliveryAddress, this.onTap, this.labelKey, this.iconData}) + {Key? key, this.deliveryAddress, this.onTap, this.labelKey, this.iconData}) : super(key: key); @override @@ -37,7 +37,7 @@ class DefaultDeliveryAddress extends StatelessWidget { onTap == null ? Container() : GestureDetector( - onTap: () => onTap(), + onTap: () => onTap!(), child: Chip( label: LocalText( context, "delivery_address.change_address", @@ -50,8 +50,8 @@ class DefaultDeliveryAddress extends StatelessWidget { child: deliveryAddress == null ? Container() : DeliveryAddressRow( - key: ValueKey(deliveryAddress.id), - deliveryAddress: deliveryAddress), + key: ValueKey(deliveryAddress!.id), + deliveryAddress: deliveryAddress!), ), ], ); diff --git a/lib/pages/widgets/delivery_address_selection.dart b/lib/pages/widgets/delivery_address_selection.dart index 08ee77f..c21a376 100644 --- a/lib/pages/widgets/delivery_address_selection.dart +++ b/lib/pages/widgets/delivery_address_selection.dart @@ -10,11 +10,11 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class DeliveryAddressSelection extends StatefulWidget { - final DeliveryAddress deliveryAddress; - final User user; + final DeliveryAddress? deliveryAddress; + final User? user; const DeliveryAddressSelection({ - Key key, + Key? key, this.deliveryAddress, this.user, }) : super(key: key); @@ -38,7 +38,7 @@ class _DeliveryAddressSelectionState extends State { Provider.of(context, listen: false); var deliveryAddresses = - await addressModel.getDeliveryAddresses(widget.user.id); + await addressModel.getDeliveryAddresses(widget.user!.id); setState(() { this._deliveryAddresses = deliveryAddresses; }); @@ -95,7 +95,7 @@ class _DeliveryAddressSelectionState extends State { padding: const EdgeInsets.all(10.0), child: Icon(Icons.check, color: widget.deliveryAddress != null && - _deliveryAddress.id == widget.deliveryAddress.id + _deliveryAddress.id == widget.deliveryAddress!.id ? primaryColor : Colors.black26), ), diff --git a/lib/pages/widgets/dialog_input.dart b/lib/pages/widgets/dialog_input.dart index 249e3a1..c1c0a4a 100644 --- a/lib/pages/widgets/dialog_input.dart +++ b/lib/pages/widgets/dialog_input.dart @@ -5,10 +5,10 @@ import 'package:flutter/material.dart'; import 'local_text.dart'; class DialogInput extends StatefulWidget { - final String value; - final String label; + final String? value; + final String? label; - const DialogInput({Key key, this.label, this.value}) : super(key: key); + const DialogInput({Key? key, this.label, this.value}) : super(key: key); @override _DialogInputState createState() => _DialogInputState(); } @@ -24,7 +24,7 @@ class _DialogInputState extends State { void initState() { super.initState(); if (widget.value != null) { - _controller.text = widget.value; + _controller.text = widget.value!; _focusNode.addListener(() { if (_focusNode.hasFocus) { _controller.selection = TextSelection( @@ -41,7 +41,7 @@ class _DialogInputState extends State { child: AlertDialog( title: LocalText( context, - widget.label, + widget.label!, fontSize: 20, color: primaryColor, ), @@ -77,7 +77,7 @@ class _DialogInputState extends State { fontWeight: FontWeight.bold, ), onPressed: () async { - if (!_formKey.currentState.validate()) return; + if (!_formKey.currentState!.validate()) return; _save(); }) ], diff --git a/lib/pages/widgets/discount_dropdown.dart b/lib/pages/widgets/discount_dropdown.dart index 63bf769..b4be510 100644 --- a/lib/pages/widgets/discount_dropdown.dart +++ b/lib/pages/widgets/discount_dropdown.dart @@ -6,13 +6,13 @@ import 'package:flutter/material.dart'; import 'local_text.dart'; class DiscountDropdown extends StatelessWidget { - final Function(T) callback; - final IconData iconData; - final T selectedValue; - final List values; + final Function(T)? callback; + final IconData? iconData; + final T? selectedValue; + final List? values; const DiscountDropdown( - {Key key, this.callback, this.iconData, this.selectedValue, this.values}) + {Key? key, this.callback, this.iconData, this.selectedValue, this.values}) : super(key: key); @override @@ -46,11 +46,11 @@ class DiscountDropdown extends StatelessWidget { height: 1, color: primaryColor, ), - onChanged: (T newValue) { - callback(newValue); + onChanged: (T? newValue) { + callback!(newValue!); }, isExpanded: true, - items: values.map>((T value) { + items: values!.map>((T value) { return DropdownMenuItem( value: value, child: Text(value == null ? "" : (value as Discount).code, diff --git a/lib/pages/widgets/display_image_source.dart b/lib/pages/widgets/display_image_source.dart index 444586d..009cde5 100644 --- a/lib/pages/widgets/display_image_source.dart +++ b/lib/pages/widgets/display_image_source.dart @@ -4,12 +4,12 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/widgets.dart'; class DisplayImageSource { - String url; - File file; + String? url; + File? file; DisplayImageSource({this.url, this.file}); - ImageProvider get imageProvider => - file == null ? CachedNetworkImageProvider(url) : FileImage(file); + ImageProvider? get imageProvider => + file == null ? CachedNetworkImageProvider(url!) : FileImage(file!); @override bool operator ==(other) { diff --git a/lib/pages/widgets/display_text.dart b/lib/pages/widgets/display_text.dart index 1e96c08..c8f8801 100644 --- a/lib/pages/widgets/display_text.dart +++ b/lib/pages/widgets/display_text.dart @@ -62,7 +62,7 @@ class DisplayText extends StatelessWidget { labelTextKey == null ? Container() : Text( - AppTranslations.of(context).text(labelTextKey!), + AppTranslations.of(context)!.text(labelTextKey!), style: labelStyle, ), text == null diff --git a/lib/pages/widgets/fcs_expansion_tile.dart b/lib/pages/widgets/fcs_expansion_tile.dart index f74365e..e1d31eb 100644 --- a/lib/pages/widgets/fcs_expansion_tile.dart +++ b/lib/pages/widgets/fcs_expansion_tile.dart @@ -5,10 +5,10 @@ import 'package:flutter/material.dart'; import 'callbacks.dart'; class FcsExpansionTile extends StatefulWidget { - final ValueChanged onExpansionChanged; - final CallBack onEditPress; - final List children; - final Widget title; + final ValueChanged? onExpansionChanged; + final CallBack? onEditPress; + final List? children; + final Widget? title; final bool isEdit; const FcsExpansionTile( {this.onExpansionChanged, @@ -21,7 +21,7 @@ class FcsExpansionTile extends StatefulWidget { } class _FcsExpansionTileState extends State { - bool expanded; + bool? expanded; @override void initState() { this.expanded = false; @@ -39,22 +39,22 @@ class _FcsExpansionTileState extends State { expanded = value; }); if (widget.onExpansionChanged != null) - widget.onExpansionChanged(value); + widget.onExpansionChanged!(value); }, - title: widget.title, - children: widget.children, + title: widget.title != null ? widget.title! : Container(), + children: widget.children != null ? widget.children! : [Container()], trailing: widget.isEdit ? IconButton( padding: EdgeInsets.all(0), iconSize: 20, onPressed: () => - widget.onEditPress != null ? widget.onEditPress() : {}, + widget.onEditPress != null ? widget.onEditPress!() : {}, icon: Icon( Icons.edit, color: primaryColor, )) : AnimatedSwitcher( - child: expanded + child: expanded! ? Icon( Icons.remove, color: primaryColor, diff --git a/lib/pages/widgets/fcs_icons.dart b/lib/pages/widgets/fcs_icons.dart index 19c844e..8f7e95b 100644 --- a/lib/pages/widgets/fcs_icons.dart +++ b/lib/pages/widgets/fcs_icons.dart @@ -1,4 +1,4 @@ -import 'package:flutter_icons/flutter_icons.dart'; +import 'package:flutter_vector_icons/flutter_vector_icons.dart'; const cartonIconData = MaterialCommunityIcons.package; const customFeeIconData = MaterialCommunityIcons.security; diff --git a/lib/pages/widgets/image_file_picker.dart b/lib/pages/widgets/image_file_picker.dart index 8efc2f6..50dcc98 100644 --- a/lib/pages/widgets/image_file_picker.dart +++ b/lib/pages/widgets/image_file_picker.dart @@ -1,7 +1,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; -import 'package:flutter_icons/flutter_icons.dart'; +import 'package:flutter_vector_icons/flutter_vector_icons.dart'; import 'package:image_picker/image_picker.dart'; import 'local_text.dart'; @@ -18,15 +18,15 @@ modelBottomSheet(BuildContext context, {final OnFile onFile}) { } class ImageFile extends StatefulWidget { - final OnFile onFile; + final OnFile? onFile; - const ImageFile({Key key, this.onFile}) : super(key: key); + const ImageFile({Key? key, this.onFile}) : super(key: key); @override _ImageFileState createState() => _ImageFileState(); } class _ImageFileState extends State { - File selectedFile; + File? selectedFile; @override Widget build(BuildContext context) { return Container( @@ -44,7 +44,7 @@ class _ImageFileState extends State { onTap: () async { Navigator.pop(context); selectedFile = await pickImage(ImageSource.gallery); - if (widget.onFile != null) widget.onFile(selectedFile); + if (widget.onFile != null) widget.onFile!(selectedFile!); }), new ListTile( leading: CircleAvatar( @@ -58,7 +58,7 @@ class _ImageFileState extends State { Navigator.pop(context); selectedFile = await pickImage(ImageSource.camera); - if (widget.onFile != null) widget.onFile(selectedFile); + if (widget.onFile != null) widget.onFile!(selectedFile!); }, ), new ListTile( @@ -75,7 +75,7 @@ class _ImageFileState extends State { selectedFile = null; }); - if (widget.onFile != null) widget.onFile(selectedFile); + if (widget.onFile != null) widget.onFile!(selectedFile!); }, ), ], diff --git a/lib/pages/widgets/img_url.dart b/lib/pages/widgets/img_url.dart index 5747a5e..6cdb69e 100644 --- a/lib/pages/widgets/img_url.dart +++ b/lib/pages/widgets/img_url.dart @@ -8,10 +8,10 @@ import 'show_img.dart'; typedef OnFile = void Function(File); class ImageUrl extends StatefulWidget { - final String title; - final String url; + final String? title; + final String? url; - const ImageUrl({Key key, this.title, this.url}) : super(key: key); + const ImageUrl({Key? key, this.title, this.url}) : super(key: key); @override _ImageUrlState createState() => _ImageUrlState(); } @@ -25,12 +25,12 @@ class _ImageUrlState extends State { context, MaterialPageRoute( builder: (context) => - ShowImage(url: widget.url, fileName: widget.title)), + ShowImage(url: widget.url!, fileName: widget.title!)), ) }, child: Chip( avatar: Icon(Icons.image), - label: Text(widget.title), + label: Text(widget.title!), ), ); } diff --git a/lib/pages/widgets/input_date.dart b/lib/pages/widgets/input_date.dart index c490584..4ee726a 100644 --- a/lib/pages/widgets/input_date.dart +++ b/lib/pages/widgets/input_date.dart @@ -10,19 +10,19 @@ class InputDate extends StatelessWidget { final String labelTextKey; final IconData iconData; final TextEditingController controller; - final FormFieldValidator validator; + final FormFieldValidator? validator; final int maxLines; final bool withBorder; - final Color borderColor; - final TextInputType textInputType; + final Color? borderColor; + final TextInputType? textInputType; final bool autoFocus; final String dateFormatString; const InputDate( - {Key key, - this.labelTextKey, - this.iconData, - this.controller, + {Key? key, + required this.labelTextKey, + required this.iconData, + required this.controller, this.validator, this.maxLines = 1, this.withBorder = false, @@ -72,7 +72,7 @@ class InputDate extends StatelessWidget { ), labelText: labelTextKey == null ? null - : AppTranslations.of(context).text(labelTextKey), + : AppTranslations.of(context)!.text(labelTextKey), labelStyle: languageModel.isEng ? newLabelStyle(color: Colors.black54, fontSize: 20) : newLabelStyleMM(color: Colors.black54, fontSize: 20), diff --git a/lib/pages/widgets/input_text.dart b/lib/pages/widgets/input_text.dart index c94d3ab..639d4b0 100644 --- a/lib/pages/widgets/input_text.dart +++ b/lib/pages/widgets/input_text.dart @@ -6,20 +6,20 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class InputText extends StatelessWidget { - final String labelTextKey; - final IconData iconData; - final TextEditingController controller; - final FormFieldValidator validator; + final String? labelTextKey; + final IconData? iconData; + final TextEditingController? controller; + final FormFieldValidator? validator; final int maxLines; final bool withBorder; - final Color borderColor; - final TextInputType textInputType; + final Color? borderColor; + final TextInputType? textInputType; final bool autoFocus; final TextAlign textAlign; final bool enabled; const InputText( - {Key key, + {Key? key, this.labelTextKey, this.iconData, this.controller, @@ -30,7 +30,7 @@ class InputText extends StatelessWidget { this.autoFocus = false, this.textInputType, this.enabled = true, - this.textAlign}) + this.textAlign = TextAlign.start}) : super(key: key); @override Widget build(BuildContext context) { @@ -46,7 +46,7 @@ class InputText extends StatelessWidget { style: textStyle, maxLines: maxLines, keyboardType: textInputType, - textAlign: textAlign ?? TextAlign.start, + textAlign: textAlign, decoration: new InputDecoration( // hintText: '', hintStyle: TextStyle( @@ -54,7 +54,7 @@ class InputText extends StatelessWidget { ), labelText: labelTextKey == null ? null - : AppTranslations.of(context).text(labelTextKey), + : AppTranslations.of(context)!.text(labelTextKey!), labelStyle: languageModel.isEng ? newLabelStyle(color: Colors.black54, fontSize: 20) : newLabelStyleMM(color: Colors.black54, fontSize: 20), diff --git a/lib/pages/widgets/input_time.dart b/lib/pages/widgets/input_time.dart index 1311bf6..8c283a1 100644 --- a/lib/pages/widgets/input_time.dart +++ b/lib/pages/widgets/input_time.dart @@ -7,18 +7,18 @@ import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; class InputTime extends StatelessWidget { - final String labelTextKey; - final IconData iconData; - final TextEditingController controller; - final FormFieldValidator validator; + final String? labelTextKey; + final IconData? iconData; + final TextEditingController? controller; + final FormFieldValidator? validator; final int maxLines; final bool withBorder; - final Color borderColor; - final TextInputType textInputType; + final Color? borderColor; + final TextInputType? textInputType; final bool autoFocus; const InputTime( - {Key key, + {Key? key, this.labelTextKey, this.iconData, this.controller, @@ -45,14 +45,14 @@ class InputTime extends StatelessWidget { try { final format = DateFormat.jm(); //"6:00 AM" initialDate = - TimeOfDay.fromDateTime(format.parse(controller.text)); + TimeOfDay.fromDateTime(format.parse(controller!.text)); // var values = controller.text.split(":"); // initialDate = TimeOfDay( // hour: int.parse(values[0]), minute: int.parse(values[1])); } catch (e) {} // ignore error } - TimeOfDay t = await showTimePicker( + TimeOfDay? t = await showTimePicker( initialTime: initialDate, context: context, ); @@ -61,7 +61,7 @@ class InputTime extends StatelessWidget { final now = new DateTime.now(); final dt = DateTime(now.year, now.month, now.day, t.hour, t.minute); - controller.text = "${format.format(dt)}"; + controller!.text = "${format.format(dt)}"; } }, controller: controller, @@ -77,7 +77,7 @@ class InputTime extends StatelessWidget { ), labelText: labelTextKey == null ? null - : AppTranslations.of(context).text(labelTextKey), + : AppTranslations.of(context)!.text(labelTextKey!), labelStyle: languageModel.isEng ? newLabelStyle(color: Colors.black54, fontSize: 20) : newLabelStyleMM(color: Colors.black54, fontSize: 20), diff --git a/lib/pages/widgets/length_picker.dart b/lib/pages/widgets/length_picker.dart index fe298c8..f39ba00 100644 --- a/lib/pages/widgets/length_picker.dart +++ b/lib/pages/widgets/length_picker.dart @@ -10,13 +10,13 @@ const MAX_INC = 50.0; const MAX_FEET = 25.0; class LengthPicker extends StatefulWidget { - final TextEditingController controller; - final String lableKey; + final TextEditingController? controller; + final String? lableKey; final bool isReadOnly; final bool displayFeet; const LengthPicker( - {Key key, + {Key? key, this.controller, this.lableKey, this.isReadOnly = false, @@ -35,14 +35,14 @@ class _LengthPickerState extends State { super.initState(); if (widget.controller != null) { _setText(); - widget.controller.addListener(() { + widget.controller!.addListener(() { _setText(); }); } } _setText() { - double v = double.parse(widget.controller.text, (s) => 0); + double v = double.parse(widget.controller!.text, (s) => 0); int _v = v.toInt(); int f = (v / 12).floor(); @@ -72,8 +72,8 @@ class _LengthPickerState extends State { context: context, builder: (BuildContext context) { return LengthPickerDialog( - controller: widget.controller, - labelKey: widget.lableKey, + controller: widget.controller!, + labelKey: widget.lableKey!, displayFeet: widget.displayFeet, ); }, @@ -82,12 +82,12 @@ class _LengthPickerState extends State { } class LengthPickerDialog extends StatefulWidget { - final TextEditingController controller; - final String labelKey; - final bool displayFeet; + final TextEditingController? controller; + final String? labelKey; + final bool? displayFeet; const LengthPickerDialog( - {Key key, this.controller, this.labelKey, this.displayFeet}) + {Key? key, this.controller, this.labelKey, this.displayFeet}) : super(key: key); @override @@ -95,8 +95,8 @@ class LengthPickerDialog extends StatefulWidget { } class _LengthPickerDialogState extends State { - int _valueFeet; - int _valueInc; + late int _valueFeet; + late int _valueInc; TextEditingController inchInputController = TextEditingController(); TextEditingController feetInputController = TextEditingController(); final _focusNode = FocusNode(); @@ -107,9 +107,9 @@ class _LengthPickerDialogState extends State { _valueFeet = 0; _valueInc = 0; if (widget.controller != null) { - double v = double.parse(widget.controller.text, (s) => 0); + double v = double.parse(widget.controller!.text, (s) => 0); _valueFeet = (v / 12).floor(); - _valueInc = widget.displayFeet ? (v % 12).toInt() : v.toInt(); + _valueInc = widget.displayFeet! ? (v % 12).toInt() : v.toInt(); inchInputController.text = _valueInc.toString(); feetInputController.text = _valueFeet.toString(); } @@ -144,7 +144,7 @@ class _LengthPickerDialogState extends State { borderSide: BorderSide(color: primaryColor, width: 1.0), ), enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey[400], width: 1.0), + borderSide: BorderSide(color: Colors.grey.shade400, width: 1.0), ), ), ), @@ -196,7 +196,7 @@ class _LengthPickerDialogState extends State { borderSide: BorderSide(color: primaryColor, width: 1.0), ), enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.grey[400], width: 1.0), + borderSide: BorderSide(color: Colors.grey.shade400, width: 1.0), ), ), ), @@ -233,14 +233,14 @@ class _LengthPickerDialogState extends State { title: Center( child: LocalText( context, - widget.labelKey, + widget.labelKey!, color: primaryColor, fontSize: 16, )), children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceAround, - children: widget.displayFeet + children: widget.displayFeet! ? [ Container(width: 100, child: feetBox), Container(width: 100, child: inchBox), @@ -252,7 +252,7 @@ class _LengthPickerDialogState extends State { SizedBox( height: 10, ), - widget.displayFeet + widget.displayFeet! ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -295,11 +295,11 @@ class _LengthPickerDialogState extends State { ), Slider( activeColor: primaryColor, - value: _valueInc.toDouble() > (widget.displayFeet ? 11 : MAX_INC) + value: _valueInc.toDouble() > (widget.displayFeet! ? 11 : MAX_INC) ? 0 : _valueInc.toDouble(), min: 0, - max: widget.displayFeet ? 11 : MAX_INC, + max: widget.displayFeet! ? 11 : MAX_INC, divisions: 100, label: (_valueInc ?? 0).round().toString(), onChanged: (double v) { @@ -318,10 +318,10 @@ class _LengthPickerDialogState extends State { }); int _v = _valueInc.round() + _valueFeet.round() * 12; if (widget.controller != null) { - widget.controller.text = _v.toString(); + widget.controller!.text = _v.toString(); } feetInputController.text = - widget.displayFeet ? _valueFeet.round().toString() : _v.toString(); + widget.displayFeet! ? _valueFeet.round().toString() : _v.toString(); } _updateInc(double v) { @@ -330,8 +330,8 @@ class _LengthPickerDialogState extends State { }); int _v = _valueInc.round() + _valueFeet.round() * 12; if (widget.controller != null) { - widget.controller.text = - widget.displayFeet ? _v.toString() : _valueInc.toString(); + widget.controller!.text = + widget.displayFeet! ? _v.toString() : _valueInc.toString(); } inchInputController.text = _valueInc.toString(); } @@ -343,8 +343,8 @@ class _LengthPickerDialogState extends State { }); int _v = _valueInc.round() + _valueFeet.round() * 12; if (widget.controller != null) { - widget.controller.text = - widget.displayFeet ? _v.toString() : _valueInc.toString(); + widget.controller!.text = + widget.displayFeet! ? _v.toString() : _valueInc.toString(); } } @@ -355,7 +355,7 @@ class _LengthPickerDialogState extends State { }); int _v = _valueInc.round() + _valueFeet.round() * 12; if (widget.controller != null) { - widget.controller.text = _v.toString(); + widget.controller!.text = _v.toString(); } } diff --git a/lib/pages/widgets/local_button.dart b/lib/pages/widgets/local_button.dart index e7d4edf..8c52eb2 100644 --- a/lib/pages/widgets/local_button.dart +++ b/lib/pages/widgets/local_button.dart @@ -6,13 +6,13 @@ import 'package:flutter/material.dart'; import 'callbacks.dart'; class LocalButton extends StatelessWidget { - final CallBack callBack; - final IconData iconData; - final String textKey; - final Color color; + final CallBack? callBack; + final IconData? iconData; + final String? textKey; + final Color? color; const LocalButton( - {Key key, + {Key? key, this.callBack, this.iconData, this.textKey, @@ -33,7 +33,7 @@ class LocalButton extends StatelessWidget { minWidth: 900.0, height: 100.0, child: FlatButton( - onPressed: callBack == null ? null : () => callBack(), + onPressed: callBack == null ? null : () => callBack!(), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -48,7 +48,7 @@ class LocalButton extends StatelessWidget { ), LocalText( context, - textKey, + textKey!, color: Colors.white, fontSize: 16, ), diff --git a/lib/pages/widgets/local_dropdown.dart b/lib/pages/widgets/local_dropdown.dart index b61c3b8..aa6eb8e 100644 --- a/lib/pages/widgets/local_dropdown.dart +++ b/lib/pages/widgets/local_dropdown.dart @@ -5,15 +5,15 @@ import 'package:flutter/material.dart'; import 'local_text.dart'; class LocalDropdown extends StatelessWidget { - final Function(T) callback; - final IconData iconData; - final T selectedValue; - final List values; - final Function(T) display; - final String labelKey; + final Function(T)? callback; + final IconData? iconData; + final T? selectedValue; + final List? values; + final Function(T)? display; + final String? labelKey; const LocalDropdown( - {Key key, + {Key? key, this.callback, this.iconData, this.selectedValue, @@ -40,7 +40,7 @@ class LocalDropdown extends StatelessWidget { padding: const EdgeInsets.only(right: 18.0), child: LocalText( context, - labelKey, + labelKey!, color: Colors.black54, fontSize: 16, ), @@ -53,20 +53,20 @@ class LocalDropdown extends StatelessWidget { height: 1, color: Colors.grey, ), - onChanged: (T newValue) { - callback(newValue); + onChanged: (T? newValue) { + callback!(newValue!); }, isExpanded: true, items: values == null ? [] - : values.map>((T value) { + : values!.map>((T value) { return DropdownMenuItem( value: value, child: Text( value == null ? "" : display != null - ? display(value) + ? display!(value) : value.toString(), overflow: TextOverflow.ellipsis, style: TextStyle(color: primaryColor)), diff --git a/lib/pages/widgets/local_popup_menu_button.dart b/lib/pages/widgets/local_popup_menu_button.dart index 53701e7..a73bb86 100644 --- a/lib/pages/widgets/local_popup_menu_button.dart +++ b/lib/pages/widgets/local_popup_menu_button.dart @@ -7,15 +7,15 @@ import 'local_popupmenu.dart'; typedef PopupMenuCallback = Function(LocalPopupMenu popupMenu); class LocalPopupMenuButton extends StatefulWidget { - final PopupMenuCallback popupMenuCallback; - final List popmenus; + final PopupMenuCallback? popupMenuCallback; + final List? popmenus; final bool multiSelect; final bool selectable; - final IconData buttonIcon; + final IconData? buttonIcon; final Color buttonColor; const LocalPopupMenuButton( - {Key key, + {Key? key, this.popupMenuCallback, this.popmenus, this.buttonIcon, @@ -29,11 +29,11 @@ class LocalPopupMenuButton extends StatefulWidget { } class _LocalPopupMenuButtonState extends State { - List popmenus; + late List popmenus; @override void initState() { - popmenus = widget.popmenus; + popmenus = widget.popmenus!; super.initState(); } @@ -64,7 +64,7 @@ class _LocalPopupMenuButtonState extends State { } } if (selected.enabled && widget.popupMenuCallback != null) - widget.popupMenuCallback(selected); + widget.popupMenuCallback!(selected); }, icon: Container( width: 30, diff --git a/lib/pages/widgets/local_popupmenu.dart b/lib/pages/widgets/local_popupmenu.dart index d3778ee..d5931b1 100644 --- a/lib/pages/widgets/local_popupmenu.dart +++ b/lib/pages/widgets/local_popupmenu.dart @@ -1,11 +1,11 @@ class LocalPopupMenu { int id; - String textKey; + String? textKey; bool selected; bool highlight; bool enabled; LocalPopupMenu( - {this.id, + {required this.id, this.textKey, this.selected = false, this.highlight = false, diff --git a/lib/pages/widgets/local_radio_buttons.dart b/lib/pages/widgets/local_radio_buttons.dart index e2b2f96..11c72ad 100644 --- a/lib/pages/widgets/local_radio_buttons.dart +++ b/lib/pages/widgets/local_radio_buttons.dart @@ -3,15 +3,15 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class LocalRadioButtons extends StatelessWidget { - final Function(T) callback; - final IconData iconData; - final T selectedValue; - final List values; + final Function(T)? callback; + final IconData? iconData; + final T? selectedValue; + final List? values; final bool readOnly; final bool hideUnselected; const LocalRadioButtons( - {Key key, + {Key? key, this.callback, this.iconData, this.selectedValue, @@ -26,19 +26,19 @@ class LocalRadioButtons extends StatelessWidget { } List getChildren() { - return values + return values! .toList() .map((e) => SizedBox( height: 30, child: InkWell( - onTap: () => callback(e), + onTap: () => callback!(e), child: Row(children: [ Radio( activeColor: primaryColor, groupValue: selectedValue, value: e, - onChanged: (T value) { - callback(value); + onChanged: (T? value) { + callback!(value!); }, ), Text(e.toString()), @@ -48,7 +48,7 @@ class LocalRadioButtons extends StatelessWidget { } List getReadonlyChildren() { - return values + return values! .toList() .map((e) => hideUnselected && e == selectedValue ? SizedBox( diff --git a/lib/pages/widgets/local_text.dart b/lib/pages/widgets/local_text.dart index c302796..92fbff8 100644 --- a/lib/pages/widgets/local_text.dart +++ b/lib/pages/widgets/local_text.dart @@ -7,26 +7,26 @@ import 'package:fcs/helpers/theme.dart'; class LocalText extends Text { final BuildContext context; LocalText(this.context, String translationKey, - {Color color, - double fontSize, - FontWeight fontWeight, - List translationVariables, - String text, + {Color? color, + double? fontSize, + FontWeight? fontWeight, + List? translationVariables, + String? text, bool underline = false}) : super( text ?? - AppTranslations.of(context).text(translationKey, + AppTranslations.of(context)!.text(translationKey, translationVariables: translationVariables), style: Provider.of(context, listen: false).isEng ? newLabelStyle( - color: color, - fontSize: fontSize, - fontWeight: fontWeight, + color: color!, + fontSize: fontSize!, + fontWeight: fontWeight!, underline: underline) : newLabelStyleMM( - color: color, - fontSize: fontSize, - fontWeight: fontWeight, + color: color!, + fontSize: fontSize!, + fontWeight: fontWeight!, underline: underline)); } @@ -35,10 +35,10 @@ class LocalLargeTitle extends Text { LocalLargeTitle( this.context, String translationKey, { - Color color, - List translationVariables, + Color? color, + List? translationVariables, }) : super( - AppTranslations.of(context).text(translationKey, + AppTranslations.of(context)!.text(translationKey, translationVariables: translationVariables), style: Provider.of(context).isEng ? TextStyle(color: color) @@ -48,7 +48,7 @@ class LocalLargeTitle extends Text { class TextLocalStyle extends Text { final BuildContext context; TextLocalStyle(this.context, String text, - {Color color, double fontSize, FontWeight fontWeight}) + {Color? color, double? fontSize, FontWeight? fontWeight}) : super(text, style: Provider.of(context).isEng ? TextStyle( diff --git a/lib/pages/widgets/local_title.dart b/lib/pages/widgets/local_title.dart index 8fc8c72..80397d3 100644 --- a/lib/pages/widgets/local_title.dart +++ b/lib/pages/widgets/local_title.dart @@ -4,10 +4,10 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class LocalTitle extends StatelessWidget { - final String textKey; - final Widget trailing; + final String? textKey; + final Widget? trailing; - const LocalTitle({Key key, this.textKey, this.trailing}) : super(key: key); + const LocalTitle({Key? key, this.textKey, this.trailing}) : super(key: key); @override Widget build(BuildContext context) { @@ -20,13 +20,13 @@ class LocalTitle extends StatelessWidget { children: [ LocalText( context, - textKey, + textKey!, fontSize: 20, fontWeight: FontWeight.bold, color: primaryColor, ), trailing != null ? Spacer() : Container(), - trailing != null ? trailing : Container() + trailing != null ? trailing! : Container() ], ), ), diff --git a/lib/pages/widgets/multi_img_controller.dart b/lib/pages/widgets/multi_img_controller.dart index 84654da..794796a 100644 --- a/lib/pages/widgets/multi_img_controller.dart +++ b/lib/pages/widgets/multi_img_controller.dart @@ -79,16 +79,16 @@ class MultiImgController { } List get getUpdatedFile { - List _addfiles = getAddedFile; + List _addfiles = getAddedFile; this.imageFiles.addAll(_addfiles); return this.imageFiles; } - List get getAddedFile { + List get getAddedFile { return addedFiles.map((e) => e.file).toList(); } - List get getDeletedUrl { + List get getDeletedUrl { return removedFiles.map((e) => e.url).toList(); } } diff --git a/lib/pages/widgets/multi_img_file.dart b/lib/pages/widgets/multi_img_file.dart index 70d7cb4..057869b 100644 --- a/lib/pages/widgets/multi_img_file.dart +++ b/lib/pages/widgets/multi_img_file.dart @@ -8,7 +8,7 @@ import 'package:fcs/pages/widgets/show_img.dart'; import 'package:fcs/pages/widgets/show_multiple_img.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:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:image_picker/image_picker.dart'; @@ -18,13 +18,13 @@ import 'multi_img_controller.dart'; typedef OnFile = void Function(File); class MultiImageFile extends StatefulWidget { - final String title; + final String? title; final bool enabled; final ImageSource imageSource; - final MultiImgController controller; + final MultiImgController? controller; const MultiImageFile( - {Key key, + {Key? key, this.title, this.enabled = true, this.controller, @@ -39,10 +39,10 @@ class _MultiImageFileState extends State { @override void initState() { super.initState(); - fileContainers = widget.controller.fileContainers; - widget.controller.onChange(() { + fileContainers = widget.controller!.fileContainers; + widget.controller!.onChange(() { setState(() { - this.fileContainers = widget.controller.fileContainers; + this.fileContainers = widget.controller!.fileContainers; }); }); } @@ -133,7 +133,7 @@ class _MultiImageFileState extends State { fit: BoxFit.cover, width: 50, height: 50, - imageUrl: fileContainers[index].url, + imageUrl: fileContainers[index].url!, placeholder: (context, url) => Column( mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, @@ -150,7 +150,7 @@ class _MultiImageFileState extends State { : FittedBox( fit: BoxFit.cover, child: Image.file( - fileContainers[index].file, + fileContainers[index].file!, ), ), ), @@ -189,13 +189,13 @@ class _MultiImageFileState extends State { fileContainer.file = selectedFile; setState(() { fileContainers.add(fileContainer); - widget.controller.addFile = fileContainer; + widget.controller!.addFile = fileContainer; }); } _fileRemove(DisplayImageSource fileContainer) { setState(() { - widget.controller.removeFile = fileContainer; + widget.controller!.removeFile = fileContainer; }); } @@ -232,11 +232,11 @@ class _MultiImageFileState extends State { context, MaterialPageRoute( builder: (context) => ShowImage( - imageFile: fileContainer.file, + imageFile: fileContainer.file!, url: fileContainer.file == null - ? fileContainer.url - : null, - fileName: widget.title)), + ? fileContainer.url! + : '', + fileName: widget.title!)), ) }, child: Chip( @@ -249,7 +249,7 @@ class _MultiImageFileState extends State { deleteIcon: Icon( Icons.close, ), - label: Text(widget.title + " - ${index + 1}"), + label: Text("${widget.title}" + " - ${index + 1}"), ), ), ), @@ -308,7 +308,7 @@ class _MultiImageFileState extends State { ); } - Widget actionIcon({OnTap onTap, Color color, IconData iconData}) { + Widget actionIcon({OnTap? onTap, Color? color, IconData? iconData}) { return InkWell( onTap: onTap, child: ClipOval( diff --git a/lib/pages/widgets/number_cell.dart b/lib/pages/widgets/number_cell.dart index ec3efeb..9ec16c2 100644 --- a/lib/pages/widgets/number_cell.dart +++ b/lib/pages/widgets/number_cell.dart @@ -5,9 +5,9 @@ import 'package:fcs/helpers/theme.dart' as theme; class NumberCell extends StatelessWidget { final int number; final numberFormatter; - final TextStyle textStyle; + final TextStyle? textStyle; - NumberCell(this.number, {Key key, this.textStyle}) + NumberCell(this.number, {Key? key, this.textStyle}) : numberFormatter = new NumberFormat("#,###"), super(key: key); diff --git a/lib/pages/widgets/offline_redirect.dart b/lib/pages/widgets/offline_redirect.dart index 9e4609d..df7ec32 100644 --- a/lib/pages/widgets/offline_redirect.dart +++ b/lib/pages/widgets/offline_redirect.dart @@ -6,14 +6,14 @@ import 'package:provider/provider.dart'; class OfflineRedirect extends StatefulWidget { final Widget child; - OfflineRedirect({@required this.child}); + OfflineRedirect({required this.child}); @override _OfflineRedirectState createState() => _OfflineRedirectState(); } class _OfflineRedirectState extends State { - Timer offlineTimer; + Timer? offlineTimer; @override void initState() { @@ -27,7 +27,7 @@ class _OfflineRedirectState extends State { } _startOfflineTimer() async { - if (offlineTimer != null && offlineTimer.isActive) return; + if (offlineTimer != null && offlineTimer!.isActive) return; var _duration = new Duration(milliseconds: 500); this.offlineTimer = new Timer.periodic(_duration, offlineNav); } @@ -41,7 +41,7 @@ class _OfflineRedirectState extends State { } void dispose() { - offlineTimer.cancel(); + offlineTimer!.cancel(); super.dispose(); } diff --git a/lib/pages/widgets/pdf_screen.dart b/lib/pages/widgets/pdf_screen.dart index e9a1397..d0490c3 100644 --- a/lib/pages/widgets/pdf_screen.dart +++ b/lib/pages/widgets/pdf_screen.dart @@ -11,10 +11,10 @@ import 'package:flutter_pdfview/flutter_pdfview.dart'; import 'package:share/share.dart'; class PDFScreen extends StatefulWidget { - final String title; - final String url; + final String? title; + final String? url; - PDFScreen({Key key, this.url, this.title}) : super(key: key); + PDFScreen({Key? key, this.url, this.title}) : super(key: key); _PDFScreenState createState() => _PDFScreenState(); } @@ -33,10 +33,10 @@ class _PDFScreenState extends State with WidgetsBindingObserver { download(); } - File file; + File? file; Future download() async { try { - File f = await PdfCacheMgr.pdfs.getSingleFile(widget.url); + File f = await PdfCacheMgr.pdfs.getSingleFile(widget.url!); setState(() { file = f; }); @@ -89,23 +89,23 @@ class _PDFScreenState extends State with WidgetsBindingObserver { fitPolicy: FitPolicy.BOTH, preventLinkNavigation: false, // if set to true the link is handled in flutter - onRender: (_pages) { + onRender: (int?_pages) { print(('pages => $pages')); setState(() { - pages = _pages; + pages = _pages!; isReady = true; }); }, onViewCreated: (PDFViewController pdfViewController) { _controller.complete(pdfViewController); }, - onLinkHandler: (String uri) { + onLinkHandler: (String? uri) { print('goto uri: $uri'); }, - onPageChanged: (int page, int total) { + onPageChanged: (int? page, int? total) { print('page change: $page/$total'); setState(() { - currentPage = page; + currentPage = page!; }); }, ), @@ -116,8 +116,8 @@ class _PDFScreenState extends State with WidgetsBindingObserver { } _share() async { - final RenderBox box = context.findRenderObject(); - await Share.shareFiles([file.path], + final RenderBox box = context.findRenderObject() as RenderBox; + await Share.shareFiles([file!.path], mimeTypes: ["application/pdf"], subject: "File", sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); diff --git a/lib/pages/widgets/popupmenu.dart b/lib/pages/widgets/popupmenu.dart index 3587571..d4092f9 100644 --- a/lib/pages/widgets/popupmenu.dart +++ b/lib/pages/widgets/popupmenu.dart @@ -1,7 +1,7 @@ class PopupMenu { int id; String status; - PopupMenu({this.id, this.status}); + PopupMenu({required this.id, required this.status}); } List menuPopup = [ diff --git a/lib/pages/widgets/progress.dart b/lib/pages/widgets/progress.dart index 9608049..df0c18d 100644 --- a/lib/pages/widgets/progress.dart +++ b/lib/pages/widgets/progress.dart @@ -4,7 +4,7 @@ import 'package:provider/provider.dart'; import 'package:fcs/helpers/theme.dart'; class LocalProgress extends Progress { - LocalProgress({bool inAsyncCall, Widget child}) + LocalProgress({required bool inAsyncCall, required Widget child}) : super( inAsyncCall: inAsyncCall, child: child, diff --git a/lib/pages/widgets/show_img.dart b/lib/pages/widgets/show_img.dart index 130cdad..191096a 100644 --- a/lib/pages/widgets/show_img.dart +++ b/lib/pages/widgets/show_img.dart @@ -6,12 +6,12 @@ import 'package:flutter/material.dart'; import 'package:photo_view/photo_view.dart'; class ShowImage extends StatefulWidget { - final String url; - final File imageFile; - final String fileName; - final String localImage; + final String? url; + final File? imageFile; + final String? fileName; + final String? localImage; const ShowImage( - {Key key, this.imageFile, this.fileName, this.url, this.localImage}) + {Key? key, this.imageFile, this.fileName, this.url, this.localImage}) : super(key: key); @override _ShowImageState createState() => _ShowImageState(); @@ -20,6 +20,13 @@ class ShowImage extends StatefulWidget { class _ShowImageState extends State { @override Widget build(BuildContext context) { + final ImageProvider? p; + if (widget.imageFile != null) { + p = FileImage(widget.imageFile!); + } else { + p = AssetImage(widget.localImage!); + } + return Scaffold( appBar: AppBar( leading: new IconButton( @@ -35,11 +42,7 @@ class _ShowImageState extends State { backgroundDecoration: const BoxDecoration( color: primaryColor, ), - imageProvider: widget.url != null - ? NetworkImage(widget.url) - : widget.imageFile != null - ? FileImage(widget.imageFile) - : AssetImage(widget.localImage), + imageProvider: widget.url != null ? NetworkImage(widget.url!) : p, minScale: PhotoViewComputedScale.contained * 1)), ); }