Commit 2f3ac157b94d71229492108157b2c61516e862d6

Authored by wdn127929
1 parent 456ee5e9

存酒-数量限制输入数字,存酒照片上传总是显示99%

... ... @@ -14,16 +14,16 @@ if (flutterRoot == null) {
def flutterVersionCode = "462"
def flutterVersionCode = "463"
if (flutterVersionCode == null) {
flutterVersionCode = '462'
flutterVersionCode = '463'
}
def flutterVersionName = "4.6.2"
def flutterVersionName = "4.6.3"
if (flutterVersionName == null) {
flutterVersionName = '4.6.2'
flutterVersionName = '4.6.3'
}
... ...
import 'package:cached_network_image/cached_network_image.dart';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/upload_img_provider.dart';
import '../../../res/colors.dart';
import '../../../utils/precision_limit_formatter.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/upload_image_util.dart';
import '../../../utils/utils.dart';
... ... @@ -77,6 +79,16 @@ class _ApplyOutStoreItemPageState extends State<ApplyOutStoreItemPage> {
alignment: Alignment.centerRight,
child: TextField(
maxLines: 1,
keyboardType: TextInputType.numberWithOptions(
decimal:
true), //由于某些机型键盘并不能做到强制故再条件上加上FilteringTextInputFormatter.allow(RegExp('[0-9.,]+')
inputFormatters: title == '出库数量'
? [
PrecisionLimitFormatter(2),
FilteringTextInputFormatter.allow(
RegExp('[0-9.,]+'))
]
: [],
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
... ... @@ -104,15 +116,15 @@ class _ApplyOutStoreItemPageState extends State<ApplyOutStoreItemPage> {
onChanged: (value) {
// print(value);
if (value != null && value.trim().length > 0) {
bool isNumber =
Utils.isInteger(value); //判断输入的内容是否是数字
if (!isNumber) {
Utils.showToast('请输入数字');
controller.text = '';
return;
}
if (int.parse(value) >
int.parse(
// bool isNumber =
// Utils.isInteger(value); //判断输入的内容是否是数字
// if (!isNumber) {
// Utils.showToast('请输入数字');
// controller.text = '';
// return;
// }
if (double.parse(value) >
double.parse(
widget.wineManageSunModel.wineAmount)) {
Utils.showToast('出库数量大于库存数量,请重新输入!');
controller.text = '';
... ... @@ -121,7 +133,6 @@ class _ApplyOutStoreItemPageState extends State<ApplyOutStoreItemPage> {
widget.wineManageSunModel.checkAmount = value;
// controller.text = value;
}
// if (value.trim().isEmpty || value.trim().length > 11) {
// //内容为空,或 超过11位
... ... @@ -149,7 +160,6 @@ class _ApplyOutStoreItemPageState extends State<ApplyOutStoreItemPage> {
// _controller.jumpTo(_controller.position.maxScrollExtent);
// });
},
keyboardType: TextInputType.number,
))),
// InkWell(
// onTap: () {
... ...
... ... @@ -12,6 +12,7 @@ import '../../../app.dart';
import '../../../models/upload_img_model.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/store_wine_provider.dart';
import '../../../provider/upload_img_provider.dart';
import '../../../provider/user_model.dart';
import '../../../res/colors.dart';
import '../../../utils/dialog_util.dart';
... ... @@ -47,6 +48,8 @@ class _CreateStoreWinePageState extends State<CreateStoreWinePage> {
String wineSerial = '';
int wineSerialSub = 1;
UploadImageProvider _uploadImageProvider;
@override
void initState() {
// TODO: implement initState
... ... @@ -61,6 +64,16 @@ class _CreateStoreWinePageState extends State<CreateStoreWinePage> {
wineSerial + Utils.addZeroNumberWithDouble(wineSerialSub);
wineManageModel.img = [];
dataWine.add(wineManageModel);
WidgetsBinding.instance.addPostFrameCallback((_) async {
_getQiniuInfo();
});
}
///获取七牛云token
///
_getQiniuInfo() async {
await _uploadImageProvider.getQiniuInfo(context, {});
}
///初始化存酒编号
... ... @@ -176,6 +189,8 @@ class _CreateStoreWinePageState extends State<CreateStoreWinePage> {
@override
Widget build(BuildContext context) {
storeWineProvider = Provider.of<StoreWineProvider>(context, listen: true);
_uploadImageProvider =
Provider.of<UploadImageProvider>(context, listen: true);
return Scaffold(
appBar: SystemAppBar(
'新建存酒',
... ... @@ -345,6 +360,7 @@ class _CreateStoreWinePageState extends State<CreateStoreWinePage> {
wineManageSunModel: wineManageModel,
controller: _controller,
index: index,
uploadImageProvider: _uploadImageProvider,
onDel: () {
dataWine.removeAt(index);
setState(() {});
... ...
... ... @@ -7,8 +7,10 @@ import 'package:provider/provider.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/upload_img_provider.dart';
import '../../../res/colors.dart';
import '../../../utils/precision_limit_formatter.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/upload_image_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/v_empty_view.dart';
import '../../online_check/img_picker_widget.dart';
... ... @@ -18,13 +20,15 @@ class CreateWineItemPage extends StatefulWidget {
final ScrollController controller;
final int index;
final GestureTapCallback onDel;
final UploadImageProvider uploadImageProvider;
CreateWineItemPage(
{Key key,
this.wineManageSunModel,
this.controller,
this.index,
this.onDel})
this.onDel,
this.uploadImageProvider})
: super(key: key);
@override
... ... @@ -62,6 +66,13 @@ class _CreateWineItemPageState extends State<CreateWineItemPage> {
// focusNode: _phoneNode,
textAlign: TextAlign.right,
textAlignVertical: TextAlignVertical.center,
inputFormatters: title == '存酒数量'
? [
PrecisionLimitFormatter(2),
FilteringTextInputFormatter.allow(
RegExp('[0-9.,]+'))
]
: [],
// textAlignVertical:
// TextAlignVertical.center,
... ... @@ -78,22 +89,20 @@ class _CreateWineItemPageState extends State<CreateWineItemPage> {
border:
OutlineInputBorder(borderSide: BorderSide.none),
),
onChanged: (value) {
print(value);
// if (value.trim().isEmpty || value.trim().length > 11) {
// //内容为空,或 超过11位
// setState(() {
// _baseIndoProvider.userHistorys.clear();
// });
// return;
// print(value);
// if (value != null && value.trim().length > 0) {
// bool isNumber =
// Utils.isInteger(value); //判断输入的内容是否是数字
// if (!isNumber) {
// Utils.showToast('请输入数字');
// controller.text = '';
// return;
// }
// // controller.text = value;
// }
// Map<String, String> params = {
// "keywords": value.trim(),
// "sid": Provider.of<UserModel>(context, listen: false)
// .user
// .sellerid,
// };
// _baseIndoProvider.getUserHistorys(context, params);
},
onEditingComplete: () {
// _phoneNode.unfocus();
... ... @@ -150,7 +159,8 @@ class _CreateWineItemPageState extends State<CreateWineItemPage> {
),
VEmptyView(16),
_textFieldWidget('存酒数量', '点击输入数量', widget.wineManageSunModel.wineNumC,
keyboardType: TextInputType.number),
keyboardType: TextInputType.numberWithOptions(decimal: true)),
// ,//由于某些机型键盘并不能做到强制故再条件上加上FilteringTextInputFormatter.allow(RegExp('[0-9.,]+')
VEmptyView(16),
_textFieldWidget(
'计量单位', '点击输入计量单位', widget.wineManageSunModel.wineUnitC),
... ... @@ -161,7 +171,7 @@ class _CreateWineItemPageState extends State<CreateWineItemPage> {
Consumer<UploadImageProvider>(builder: (context, model, _) {
return ImgPickerWidget(
scrollController: widget.controller,
model: model,
model: widget.uploadImageProvider,
maxImageNumber: 3,
maxRemind: '三',
imageList: widget.wineManageSunModel.img,
... ...
import 'dart:convert';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/res/colors.dart';
... ... @@ -226,7 +227,7 @@ class _SmsCodeInputPageState extends State<SmsCodeInputPage> {
if (element.checkAmount != null &&
element.checkAmount != '' &&
int.parse(element.checkAmount) > 0) {
double.parse(element.checkAmount) > 0) {
//有输入数量
WineCheckModel sunMoveModel = WineCheckModel();
sunMoveModel.wineName = element.wineName;
... ... @@ -258,14 +259,17 @@ class _SmsCodeInputPageState extends State<SmsCodeInputPage> {
if (success) {
List<Map<String, String>> data = [];
widget.wineManageDetail.wineDataMove.forEach((element) {
int wineStock = int.parse(element.wineAmount) -
int.parse(element.checkAmount);
double wineStock = double.parse(element.wineStock) -
double.parse(element.checkAmount);
String winestockStr =
(NumUtil.getNumByValueDouble(wineStock, 2))
.toStringAsFixed(2);
Map<String, String> map = {
'wine_name': element.wineName, //酒名称
'wine_amount': element.wineAmount, //初始存酒量
'unit': element.unit, //单位
'wine_number': element.wineNumber, //存酒编号
'wine_stock': wineStock.toString(), //剩余库存,
'wine_stock': '${winestockStr}', //剩余库存,
'cdate': element.cdate,
'img': element.img == null || element.img.length == 0
? null
... ...
... ... @@ -288,7 +288,7 @@ class _WineDetailPageState extends State<WineDetailPage> {
i++) {
WineManageSunMoveModel element = storeWineProvider
.wineManageDetail.wineDataMove[i];
if (int.parse(element.wineStock) > 0) {
if (double.parse(element.wineStock) > 0) {
can = true;
break outerloop;
}
... ...
import 'package:flutter/services.dart';
import 'dart:math' as math;
import 'package:one_key/utils/utils.dart';
class PrecisionLimitFormatter extends TextInputFormatter {
int _scale;
PrecisionLimitFormatter(this._scale);
RegExp exp = RegExp(r"[0-9]");
static const String POINTER = ".";
static const String DOUBLE_ZERO = "00";
static const String ZERO = "0";
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
print('oldValue:' + oldValue.text);
print('newValue:' + newValue.text);
if (newValue.text.startsWith('.')) {
return TextEditingValue(
text: '0.', selection: TextSelection.collapsed(offset: 2));
}
// if (newValue.text.startsWith(POINTER) && newValue.text.length == 1) {
// //第一个不能输入小数点
// return oldValue;
// }
///输入完全删除
if (newValue.text.isEmpty) {
return TextEditingValue();
}
///只允许输入小数
if (!exp.hasMatch(newValue.text)) {
Utils.showToast('只能输入数字!');
return oldValue;
}
if (newValue.text.startsWith(ZERO) &&
newValue.text.split("0")[1].startsWith(RegExp(r'[0-9]'))) {
return TextEditingValue(
text: '0', selection: TextSelection.collapsed(offset: 1));
// return newValue;
}
///包含小数点的情况
if (newValue.text.contains(POINTER)) {
///包含多个小数
if (newValue.text.indexOf(POINTER) !=
newValue.text.lastIndexOf(POINTER)) {
return oldValue;
}
String input = newValue.text;
int index = input.indexOf(POINTER);
///小数点后位数
int lengthAfterPointer = input.substring(index, input.length).length - 1;
///小数位大于精度
if (lengthAfterPointer > _scale) {
return oldValue;
}
} else if (newValue.text.startsWith(POINTER) ||
newValue.text.startsWith(DOUBLE_ZERO)) {
///不包含小数点,不能以“00”开头
return oldValue;
}
return newValue;
}
}
... ...