|
1
|
import 'dart:convert';
|
1
|
import 'dart:convert';
|
|
|
|
2
|
+
|
|
2
|
import 'dart:io';
|
3
|
import 'dart:io';
|
|
3
|
import 'dart:async';
|
4
|
import 'dart:async';
|
|
4
|
|
5
|
|
|
@@ -10,6 +11,7 @@ import 'package:one_key/pages/online_check/photo_view_wiget.dart'; |
|
@@ -10,6 +11,7 @@ import 'package:one_key/pages/online_check/photo_view_wiget.dart'; |
|
10
|
import 'package:one_key/pages/online_check/progress.dart';
|
11
|
import 'package:one_key/pages/online_check/progress.dart';
|
|
11
|
|
12
|
|
|
12
|
import 'package:one_key/provider/online_check_edit_provider.dart';
|
13
|
import 'package:one_key/provider/online_check_edit_provider.dart';
|
|
|
|
14
|
+import 'package:one_key/provider/upload_img_provider.dart';
|
|
13
|
import 'package:one_key/res/colors.dart';
|
15
|
import 'package:one_key/res/colors.dart';
|
|
14
|
import 'package:one_key/utils/dialog_util.dart';
|
16
|
import 'package:one_key/utils/dialog_util.dart';
|
|
15
|
import 'package:one_key/utils/misc.dart';
|
17
|
import 'package:one_key/utils/misc.dart';
|
|
@@ -25,7 +27,6 @@ import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart'; |
|
@@ -25,7 +27,6 @@ import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart'; |
|
25
|
import './dispose.dart';
|
27
|
import './dispose.dart';
|
|
26
|
import 'package:photo_manager/photo_manager.dart';
|
28
|
import 'package:photo_manager/photo_manager.dart';
|
|
27
|
|
29
|
|
|
28
|
-final int MAX_IMAGE_NUMBER = 5;
|
|
|
|
29
|
typedef void OnPickImageCallback(
|
30
|
typedef void OnPickImageCallback(
|
|
30
|
double maxWidth, double maxHeight, int quality);
|
31
|
double maxWidth, double maxHeight, int quality);
|
|
31
|
|
32
|
|
|
@@ -33,11 +34,13 @@ class ImgPickerWidget extends StatefulWidget { |
|
@@ -33,11 +34,13 @@ class ImgPickerWidget extends StatefulWidget { |
|
33
|
final ScrollController scrollController;
|
34
|
final ScrollController scrollController;
|
|
34
|
final Color borderColor;
|
35
|
final Color borderColor;
|
|
35
|
final ValueChanged onChange;
|
36
|
final ValueChanged onChange;
|
|
|
|
37
|
+ final int maxImageNumber;
|
|
36
|
ImgPickerWidget(
|
38
|
ImgPickerWidget(
|
|
37
|
{Key key,
|
39
|
{Key key,
|
|
38
|
this.scrollController,
|
40
|
this.scrollController,
|
|
39
|
this.borderColor = Colors.blue,
|
41
|
this.borderColor = Colors.blue,
|
|
40
|
- this.onChange})
|
42
|
+ this.onChange,
|
|
|
|
43
|
+ this.maxImageNumber = 5})
|
|
41
|
: super(key: key);
|
44
|
: super(key: key);
|
|
42
|
|
45
|
|
|
43
|
@override
|
46
|
@override
|
|
@@ -46,7 +49,8 @@ class ImgPickerWidget extends StatefulWidget { |
|
@@ -46,7 +49,8 @@ class ImgPickerWidget extends StatefulWidget { |
|
46
|
|
49
|
|
|
47
|
class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
|
50
|
class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
|
|
48
|
final picker = ImagePicker();
|
51
|
final picker = ImagePicker();
|
|
49
|
- OnlineCheckEditProvider _onlineCheckEditProvider;
|
52
|
+ // OnlineCheckEditProvider _onlineCheckEditProvider;
|
|
|
|
53
|
+ UploadImageProvider _uploadImageProvider;
|
|
50
|
|
54
|
|
|
51
|
// 用户输入的文件名
|
55
|
// 用户输入的文件名
|
|
52
|
String key;
|
56
|
String key;
|
|
@@ -81,14 +85,14 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -81,14 +85,14 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
81
|
UploadImgModel imgModel = UploadImgModel();
|
85
|
UploadImgModel imgModel = UploadImgModel();
|
|
82
|
imgModel.file = File(pickedFile.path);
|
86
|
imgModel.file = File(pickedFile.path);
|
|
83
|
imgModel.process = 0.01;
|
87
|
imgModel.process = 0.01;
|
|
84
|
- _onlineCheckEditProvider.imageList.add(imgModel);
|
88
|
+ _uploadImageProvider.imageList.add(imgModel);
|
|
85
|
} else {
|
89
|
} else {
|
|
86
|
print('No image selected.');
|
90
|
print('No image selected.');
|
|
87
|
}
|
91
|
}
|
|
88
|
});
|
92
|
});
|
|
89
|
if (pickedFile != null) {
|
93
|
if (pickedFile != null) {
|
|
90
|
startUpload(File(pickedFile.path),
|
94
|
startUpload(File(pickedFile.path),
|
|
91
|
- _onlineCheckEditProvider.imageList.length - 1, true);
|
95
|
+ _uploadImageProvider.imageList.length - 1, true);
|
|
92
|
}
|
96
|
}
|
|
93
|
}
|
97
|
}
|
|
94
|
|
98
|
|
|
@@ -112,7 +116,8 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -112,7 +116,8 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
112
|
// the check box disable color
|
116
|
// the check box disable color
|
|
113
|
itemRadio: 0.88,
|
117
|
itemRadio: 0.88,
|
|
114
|
// the content item radio
|
118
|
// the content item radio
|
|
115
|
- maxSelected: MAX_IMAGE_NUMBER - _onlineCheckEditProvider.imageList.length,
|
119
|
+ maxSelected:
|
|
|
|
120
|
+ widget.maxImageNumber - _uploadImageProvider.imageList.length,
|
|
116
|
// max picker image count
|
121
|
// max picker image count
|
|
117
|
// provider: I18nProvider.english,
|
122
|
// provider: I18nProvider.english,
|
|
118
|
provider: I18nProvider.chinese,
|
123
|
provider: I18nProvider.chinese,
|
|
@@ -146,10 +151,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -146,10 +151,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
146
|
UploadImgModel imgModel = UploadImgModel();
|
151
|
UploadImgModel imgModel = UploadImgModel();
|
|
147
|
imgModel.file = File(file.absolute.path);
|
152
|
imgModel.file = File(file.absolute.path);
|
|
148
|
imgModel.process = 0.01;
|
153
|
imgModel.process = 0.01;
|
|
149
|
- _onlineCheckEditProvider.imageList.add(imgModel);
|
154
|
+ _uploadImageProvider.imageList.add(imgModel);
|
|
150
|
});
|
155
|
});
|
|
151
|
startUpload(File(file.absolute.path),
|
156
|
startUpload(File(file.absolute.path),
|
|
152
|
- _onlineCheckEditProvider.imageList.length - 1, false);
|
157
|
+ _uploadImageProvider.imageList.length - 1, false);
|
|
153
|
}
|
158
|
}
|
|
154
|
}
|
159
|
}
|
|
155
|
}
|
160
|
}
|
|
@@ -166,8 +171,8 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -166,8 +171,8 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
166
|
// 添加整体进度监听
|
171
|
// 添加整体进度监听
|
|
167
|
putController.addProgressListener((percent) {
|
172
|
putController.addProgressListener((percent) {
|
|
168
|
print('${index}任务进度变化:进度:${percent.toStringAsFixed(4)}');
|
173
|
print('${index}任务进度变化:进度:${percent.toStringAsFixed(4)}');
|
|
169
|
- _onlineCheckEditProvider.imageList[index].process = percent;
|
|
|
|
170
|
- _onlineCheckEditProvider.notifyListeners();
|
174
|
+ _uploadImageProvider.imageList[index].process = percent;
|
|
|
|
175
|
+ _uploadImageProvider.notifyListeners();
|
|
171
|
});
|
176
|
});
|
|
172
|
// 添加实际发送进度订阅
|
177
|
// 添加实际发送进度订阅
|
|
173
|
putController.addSendProgressListener((percent) {
|
178
|
putController.addSendProgressListener((percent) {
|
|
@@ -176,9 +181,9 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -176,9 +181,9 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
176
|
print('${index}实际发送变化:进度:${percent.toStringAsFixed(4)}');
|
181
|
print('${index}实际发送变化:进度:${percent.toStringAsFixed(4)}');
|
|
177
|
});
|
182
|
});
|
|
178
|
if (token == null || token == '') {
|
183
|
if (token == null || token == '') {
|
|
179
|
- await _onlineCheckEditProvider.getQiniuInfo(context, {});
|
184
|
+ await _uploadImageProvider.getQiniuInfo(context, {});
|
|
180
|
}
|
185
|
}
|
|
181
|
- var usedToken = _onlineCheckEditProvider.qiniuInfoSunModel.token;
|
186
|
+ var usedToken = _uploadImageProvider.qiniuInfoSunModel.token;
|
|
182
|
if (usedToken == null || usedToken == '') {
|
187
|
if (usedToken == null || usedToken == '') {
|
|
183
|
print('token 不能为空');
|
188
|
print('token 不能为空');
|
|
184
|
return;
|
189
|
return;
|
|
@@ -196,15 +201,15 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -196,15 +201,15 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
196
|
..then((PutResponse response) {
|
201
|
..then((PutResponse response) {
|
|
197
|
print('${index}上传已完成: 原始响应数据: ${jsonEncode(response.rawData)}');
|
202
|
print('${index}上传已完成: 原始响应数据: ${jsonEncode(response.rawData)}');
|
|
198
|
print('------------------------');
|
203
|
print('------------------------');
|
|
199
|
- String imgUrl = _onlineCheckEditProvider.qiniuInfoSunModel.domain +
|
204
|
+ String imgUrl = _uploadImageProvider.qiniuInfoSunModel.domain +
|
|
200
|
'/' +
|
205
|
'/' +
|
|
201
|
response.rawData['key'];
|
206
|
response.rawData['key'];
|
|
202
|
- _onlineCheckEditProvider.imageList[index].process = 1;
|
|
|
|
203
|
- _onlineCheckEditProvider.imageList[index].qiniuUrl = imgUrl;
|
207
|
+ _uploadImageProvider.imageList[index].process = 1;
|
|
|
|
208
|
+ _uploadImageProvider.imageList[index].qiniuUrl = imgUrl;
|
|
204
|
// 取消当前任务
|
209
|
// 取消当前任务
|
|
205
|
putController.cancel();
|
210
|
putController.cancel();
|
|
206
|
// _image
|
211
|
// _image
|
|
207
|
- _onlineCheckEditProvider.notifyListeners();
|
212
|
+ _uploadImageProvider.notifyListeners();
|
|
208
|
})
|
213
|
})
|
|
209
|
..catchError((dynamic error) {
|
214
|
..catchError((dynamic error) {
|
|
210
|
if (error is StorageError) {
|
215
|
if (error is StorageError) {
|
|
@@ -405,59 +410,20 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -405,59 +410,20 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
405
|
|
410
|
|
|
406
|
@override
|
411
|
@override
|
|
407
|
Widget build(BuildContext context) {
|
412
|
Widget build(BuildContext context) {
|
|
408
|
- _onlineCheckEditProvider =
|
|
|
|
409
|
- Provider.of<OnlineCheckEditProvider>(context, listen: true);
|
|
|
|
410
|
- return Container(
|
|
|
|
411
|
- width: double.infinity,
|
|
|
|
412
|
- decoration: BoxDecoration(
|
|
|
|
413
|
- color: Colors.white, borderRadius: BorderRadius.circular(10)),
|
|
|
|
414
|
- child: Column(
|
|
|
|
415
|
- crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
416
|
- children: <Widget>[
|
|
|
|
417
|
- Container(
|
|
|
|
418
|
- height: ScreenUtil().setWidth(53 * 2),
|
|
|
|
419
|
- width: double.infinity,
|
|
|
|
420
|
- decoration: BoxDecoration(
|
|
|
|
421
|
- color: MyColours.color_FAFAFA,
|
|
|
|
422
|
- borderRadius: BorderRadius.only(
|
|
|
|
423
|
- topLeft: Radius.circular(10),
|
|
|
|
424
|
- topRight: Radius.circular(10)),
|
|
|
|
425
|
- ),
|
|
|
|
426
|
- child: Padding(
|
|
|
|
427
|
- padding: EdgeInsets.fromLTRB(
|
|
|
|
428
|
- ScreenUtil().setWidth(20),
|
|
|
|
429
|
- ScreenUtil().setWidth(36),
|
|
|
|
430
|
- ScreenUtil().setWidth(20),
|
|
|
|
431
|
- ScreenUtil().setWidth(26)),
|
|
|
|
432
|
- child: Text(
|
|
|
|
433
|
- '消费清单(选填)',
|
|
|
|
434
|
- style: TextStyle(
|
|
|
|
435
|
- fontSize: ScreenUtil().setSp(32),
|
|
|
|
436
|
- color: MyColours.color_353535,
|
|
|
|
437
|
- fontWeight: FontWeight.bold),
|
|
|
|
438
|
- ),
|
|
|
|
439
|
- )),
|
|
|
|
440
|
- Padding(
|
|
|
|
441
|
- padding: EdgeInsets.all(ScreenUtil().setWidth(40)),
|
|
|
|
442
|
- child: _getGridImg(
|
|
|
|
443
|
- _onlineCheckEditProvider.imageList.length < MAX_IMAGE_NUMBER
|
|
|
|
444
|
- ? _onlineCheckEditProvider.imageList.length + 1
|
|
|
|
445
|
- : _onlineCheckEditProvider.imageList.length,
|
|
|
|
446
|
- context,
|
|
|
|
447
|
- _onlineCheckEditProvider.imageList.length == MAX_IMAGE_NUMBER
|
|
|
|
448
|
- ? true
|
|
|
|
449
|
- : false),
|
|
|
|
450
|
- )
|
|
|
|
451
|
- // _getGridImg(1, context)
|
|
|
|
452
|
- ],
|
|
|
|
453
|
- ),
|
|
|
|
454
|
- );
|
413
|
+ _uploadImageProvider =
|
|
|
|
414
|
+ Provider.of<UploadImageProvider>(context, listen: true);
|
|
|
|
415
|
+ return _getGridImg(
|
|
|
|
416
|
+ _uploadImageProvider.imageList.length < widget.maxImageNumber
|
|
|
|
417
|
+ ? _uploadImageProvider.imageList.length + 1
|
|
|
|
418
|
+ : _uploadImageProvider.imageList.length,
|
|
|
|
419
|
+ context,
|
|
|
|
420
|
+ _uploadImageProvider.imageList.length == widget.maxImageNumber
|
|
|
|
421
|
+ ? true
|
|
|
|
422
|
+ : false);
|
|
455
|
}
|
423
|
}
|
|
456
|
|
424
|
|
|
457
|
/// 九宫格
|
425
|
/// 九宫格
|
|
458
|
Widget _getGridImg(count, context, isLinjie) {
|
426
|
Widget _getGridImg(count, context, isLinjie) {
|
|
459
|
- OnlineCheckEditProvider _provider =
|
|
|
|
460
|
- Provider.of<OnlineCheckEditProvider>(context, listen: false);
|
|
|
|
461
|
return GridView.builder(
|
427
|
return GridView.builder(
|
|
462
|
controller: widget.scrollController,
|
428
|
controller: widget.scrollController,
|
|
463
|
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
|
429
|
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
|
|
@@ -475,9 +441,9 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -475,9 +441,9 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
475
|
childAspectRatio: 1.0),
|
441
|
childAspectRatio: 1.0),
|
|
476
|
itemBuilder: (BuildContext context, int index) {
|
442
|
itemBuilder: (BuildContext context, int index) {
|
|
477
|
//Widget Function(BuildContext context, int index)
|
443
|
//Widget Function(BuildContext context, int index)
|
|
478
|
- var linjie = MAX_IMAGE_NUMBER;
|
444
|
+ var linjie = widget.maxImageNumber;
|
|
479
|
if (isLinjie) {
|
445
|
if (isLinjie) {
|
|
480
|
- linjie = MAX_IMAGE_NUMBER - 1;
|
446
|
+ linjie = widget.maxImageNumber - 1;
|
|
481
|
}
|
447
|
}
|
|
482
|
if (index == count - 1 && index < linjie) {
|
448
|
if (index == count - 1 && index < linjie) {
|
|
483
|
return InkWell(
|
449
|
return InkWell(
|
|
@@ -513,25 +479,24 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -513,25 +479,24 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
513
|
)),
|
479
|
)),
|
|
514
|
);
|
480
|
);
|
|
515
|
}
|
481
|
}
|
|
516
|
- return _provider.imageList.length < 1
|
482
|
+ return _uploadImageProvider.imageList.length < 1
|
|
517
|
? Text('')
|
483
|
? Text('')
|
|
518
|
: InkWell(
|
484
|
: InkWell(
|
|
519
|
onTap: () {
|
485
|
onTap: () {
|
|
520
|
- if (_onlineCheckEditProvider.imageList[index].process ==
|
|
|
|
521
|
- 1) {
|
|
|
|
522
|
- _onlineCheckEditProvider.imageQiniuUrlList = [];
|
|
|
|
523
|
- if (_onlineCheckEditProvider.imageList[index].qiniuUrl !=
|
486
|
+ if (_uploadImageProvider.imageList[index].process == 1) {
|
|
|
|
487
|
+ _uploadImageProvider.imageQiniuUrlList = [];
|
|
|
|
488
|
+ if (_uploadImageProvider.imageList[index].qiniuUrl !=
|
|
524
|
null) {
|
489
|
null) {
|
|
525
|
for (int i = 0;
|
490
|
for (int i = 0;
|
|
526
|
- i < _onlineCheckEditProvider.imageList.length;
|
491
|
+ i < _uploadImageProvider.imageList.length;
|
|
527
|
i++) {
|
492
|
i++) {
|
|
528
|
- _onlineCheckEditProvider.imageQiniuUrlList.add(
|
|
|
|
529
|
- _onlineCheckEditProvider.imageList[i].qiniuUrl);
|
493
|
+ _uploadImageProvider.imageQiniuUrlList
|
|
|
|
494
|
+ .add(_uploadImageProvider.imageList[i].qiniuUrl);
|
|
530
|
}
|
495
|
}
|
|
531
|
|
496
|
|
|
532
|
///没有上传完成的不可以点击
|
497
|
///没有上传完成的不可以点击
|
|
533
|
- _showPhotoView(
|
|
|
|
534
|
- context, index, _provider.imageQiniuUrlList);
|
498
|
+ _showPhotoView(context, index,
|
|
|
|
499
|
+ _uploadImageProvider.imageQiniuUrlList);
|
|
535
|
}
|
500
|
}
|
|
536
|
}
|
501
|
}
|
|
537
|
},
|
502
|
},
|
|
@@ -541,13 +506,15 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -541,13 +506,15 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
541
|
alignment: Alignment.topRight,
|
506
|
alignment: Alignment.topRight,
|
|
542
|
children: [
|
507
|
children: [
|
|
543
|
Image.file(
|
508
|
Image.file(
|
|
544
|
- _provider.imageList[index].file,
|
509
|
+ _uploadImageProvider.imageList[index].file,
|
|
545
|
fit: BoxFit.cover,
|
510
|
fit: BoxFit.cover,
|
|
546
|
width: ScreenUtil().setWidth(100 * 2),
|
511
|
width: ScreenUtil().setWidth(100 * 2),
|
|
547
|
height: ScreenUtil().setWidth(100 * 2),
|
512
|
height: ScreenUtil().setWidth(100 * 2),
|
|
548
|
),
|
513
|
),
|
|
549
|
Offstage(
|
514
|
Offstage(
|
|
550
|
- offstage: _provider.imageList[index].process < 1,
|
515
|
+ offstage:
|
|
|
|
516
|
+ _uploadImageProvider.imageList[index].process <
|
|
|
|
517
|
+ 1,
|
|
551
|
child: GestureDetector(
|
518
|
child: GestureDetector(
|
|
552
|
child: Image.asset(
|
519
|
child: Image.asset(
|
|
553
|
Utils.getImgPath("delete"),
|
520
|
Utils.getImgPath("delete"),
|
|
@@ -557,12 +524,16 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -557,12 +524,16 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
557
|
onTap: () {
|
524
|
onTap: () {
|
|
558
|
//点击删除按钮
|
525
|
//点击删除按钮
|
|
559
|
setState(() {
|
526
|
setState(() {
|
|
560
|
- _provider.imageList.removeWhere((element) =>
|
|
|
|
561
|
- element == _provider.imageList[index]);
|
|
|
|
562
|
- _provider.imageQiniuUrlList.removeWhere(
|
527
|
+ _uploadImageProvider.imageList.removeWhere(
|
|
563
|
(element) =>
|
528
|
(element) =>
|
|
564
|
element ==
|
529
|
element ==
|
|
565
|
- _provider.imageQiniuUrlList[index]);
|
530
|
+ _uploadImageProvider
|
|
|
|
531
|
+ .imageList[index]);
|
|
|
|
532
|
+ _uploadImageProvider.imageQiniuUrlList
|
|
|
|
533
|
+ .removeWhere((element) =>
|
|
|
|
534
|
+ element ==
|
|
|
|
535
|
+ _uploadImageProvider
|
|
|
|
536
|
+ .imageQiniuUrlList[index]);
|
|
566
|
});
|
537
|
});
|
|
567
|
},
|
538
|
},
|
|
568
|
),
|
539
|
),
|
|
@@ -570,8 +541,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
@@ -570,8 +541,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { |
|
570
|
],
|
541
|
],
|
|
571
|
),
|
542
|
),
|
|
572
|
Offstage(
|
543
|
Offstage(
|
|
573
|
- offstage: _provider.imageList[index].process == 1,
|
|
|
|
574
|
- child: Progress(_provider.imageList[index].process),
|
544
|
+ offstage:
|
|
|
|
545
|
+ _uploadImageProvider.imageList[index].process == 1,
|
|
|
|
546
|
+ child: Progress(
|
|
|
|
547
|
+ _uploadImageProvider.imageList[index].process),
|
|
575
|
)
|
548
|
)
|
|
576
|
],
|
549
|
],
|
|
577
|
));
|
550
|
));
|