| 440505e9ea1eee7043d2cbfeb318f6bc | |||||
| 5729eb498eaeb9c64784fcfc80bbb33b |
| import 'package:farm_tpf/utils/const_common.dart'; | |||||
| import 'package:farm_tpf/utils/const_string.dart'; | |||||
| import 'package:farm_tpf/utils/validators.dart'; | |||||
| import 'package:flutter/material.dart'; | |||||
| import 'package:flutter/services.dart'; | |||||
| import 'package:intl/intl.dart'; | |||||
| import 'package:pattern_formatter/pattern_formatter.dart'; | |||||
| class WidgetTextFormFieldNumber extends StatelessWidget { | |||||
| final TextEditingController textController; | |||||
| final void Function(String) onSaved; | |||||
| final void Function(String) validator; | |||||
| final String hintValue; | |||||
| WidgetTextFormFieldNumber( | |||||
| {@required this.textController, | |||||
| @required this.onSaved, | |||||
| @required this.hintValue, | |||||
| this.validator}); | |||||
| @override | |||||
| Widget build(BuildContext context) { | |||||
| return TextFormField( | |||||
| keyboardType: TextInputType.numberWithOptions(decimal: true), | |||||
| inputFormatters: [ | |||||
| FilteringTextInputFormatter.allow(ConstCommon.regExpDecimal), | |||||
| ThousandsFormatter( | |||||
| formatter: NumberFormat("#,###.####", "es"), allowFraction: true), | |||||
| ], | |||||
| decoration: InputDecoration(labelText: hintValue), | |||||
| validator: validator ?? | |||||
| (String value) { | |||||
| return Validators.validNumberOrEmpty(value, label_invalid_number); | |||||
| }, | |||||
| controller: textController, | |||||
| onSaved: onSaved, | |||||
| ); | |||||
| } | |||||
| } |
| import 'package:farm_tpf/presentation/custom_widgets/bloc/media_helper_bloc.dart'; | import 'package:farm_tpf/presentation/custom_widgets/bloc/media_helper_bloc.dart'; | ||||
| import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart'; | import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart'; | ||||
| import 'package:farm_tpf/presentation/custom_widgets/widget_media_picker.dart'; | import 'package:farm_tpf/presentation/custom_widgets/widget_media_picker.dart'; | ||||
| import 'package:farm_tpf/presentation/custom_widgets/widget_text_form_field.dart'; | |||||
| import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart'; | import 'package:farm_tpf/presentation/custom_widgets/widget_utils.dart'; | ||||
| import 'package:farm_tpf/presentation/screens/actions/bloc/action_detail_bloc.dart'; | import 'package:farm_tpf/presentation/screens/actions/bloc/action_detail_bloc.dart'; | ||||
| import 'package:farm_tpf/presentation/screens/actions/controller/ChangeSupplyUsing.dart'; | import 'package:farm_tpf/presentation/screens/actions/controller/ChangeSupplyUsing.dart'; | ||||
| import 'package:farm_tpf/utils/pref.dart'; | import 'package:farm_tpf/utils/pref.dart'; | ||||
| import 'package:farm_tpf/utils/validators.dart'; | import 'package:farm_tpf/utils/validators.dart'; | ||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/services.dart'; | |||||
| import 'package:flutter_bloc/flutter_bloc.dart'; | import 'package:flutter_bloc/flutter_bloc.dart'; | ||||
| import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; | import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; | ||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||
| } | } | ||||
| Widget _quantityField() { | Widget _quantityField() { | ||||
| return TextFormField( | |||||
| keyboardType: TextInputType.numberWithOptions(decimal: true), | |||||
| inputFormatters: [ | |||||
| ThousandsFormatter( | |||||
| formatter: NumberFormat("#,###.##", "es"), allowFraction: true) | |||||
| ], | |||||
| decoration: InputDecoration(labelText: "Số lượng cây trồng"), | |||||
| controller: _quantityController, | |||||
| return WidgetTextFormFieldNumber( | |||||
| hintValue: "Số lượng cây trồng", | |||||
| textController: _quantityController, | |||||
| onSaved: (newValue) { | onSaved: (newValue) { | ||||
| _plant.quantity = newValue.parseDoubleThousand(); | _plant.quantity = newValue.parseDoubleThousand(); | ||||
| }, | }, |
| static int kMaxAgeCache = 7; // 7days | static int kMaxAgeCache = 7; // 7days | ||||
| static const String baseUrl = "http://tpf.aztrace.vn"; | static const String baseUrl = "http://tpf.aztrace.vn"; | ||||
| static const String baseImageUrl = "http://tpf.aztrace.vn/upload/"; | static const String baseImageUrl = "http://tpf.aztrace.vn/upload/"; | ||||
| static RegExp regExpDecimal = RegExp("[0-9,]"); | |||||
| static const String apiDetailNursery = "api/activity-nursery"; | static const String apiDetailNursery = "api/activity-nursery"; | ||||
| static const String apiDetailCropStatus = "api/activity-crop-status"; | static const String apiDetailCropStatus = "api/activity-crop-status"; |
| const String label_district_empty = "Vui lòng chọn Quận/Huyện"; | const String label_district_empty = "Vui lòng chọn Quận/Huyện"; | ||||
| const String label_district_empty_message = "Quận/Huyện đang trống"; | const String label_district_empty_message = "Quận/Huyện đang trống"; | ||||
| const String label_invalid_number = "Vui lòng nhập số"; | |||||
| //Exception | //Exception | ||||
| const String exception_common = "Đã có lỗi xảy ra"; | const String exception_common = "Đã có lỗi xảy ra"; | ||||
| const String exception_dio_cancle = "Truy vấn đến máy chủ bị huỷ"; | const String exception_dio_cancle = "Truy vấn đến máy chủ bị huỷ"; |
| } | } | ||||
| } | } | ||||
| static String validNumber(String value, String errorMessage) { | |||||
| static String validNumberOrEmpty(String value, String errorMessage) { | |||||
| if (value.isEmpty) return null; | |||||
| try { | try { | ||||
| var doubleValue = value.parseDoubleThousand(); | var doubleValue = value.parseDoubleThousand(); | ||||
| if (doubleValue > 0) { | if (doubleValue > 0) { |