Files
flutter-picgo/lib/views/upload_page/handle_upload_page.dart
2021-04-23 16:13:43 +08:00

195 lines
5.1 KiB
Dart

import 'dart:io';
import 'package:flutter_picgo/components/upload_item/upload_item.dart';
import 'package:flutter_picgo/utils/strings.dart';
import 'package:path/path.dart' as path;
import 'package:flutter/material.dart';
import 'package:flutter_picgo/resources/shared_preferences_keys.dart';
import 'package:flutter_picgo/utils/image_upload.dart';
import 'package:flutter_picgo/utils/shared_preferences.dart';
import 'package:wechat_assets_picker/wechat_assets_picker.dart';
class HandleUploadPage extends StatefulWidget {
final List<AssetEntity> assets;
HandleUploadPage(this.assets, {Key key}) : super(key: key);
@override
_HandleUploadPageState createState() => _HandleUploadPageState();
}
class _HandleUploadPageState extends State<HandleUploadPage> {
String _title = '';
bool isParse = false;
List<File> files;
List<String> filesName;
TextEditingController _controller = new TextEditingController();
/// 通知提示
bool needNotify = false;
_HandleUploadPageState() {
SpUtil.getInstance().then((sp) {
this.needNotify =
sp.getBool(SharedPreferencesKeys.settingIsUploadedTip) ?? false;
});
}
@override
void initState() {
super.initState();
_getCurrentPb();
_parseAsset();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(this._title),
centerTitle: true,
),
body: isParse ? buildList() : buildParseTip(),
);
}
Widget buildList() {
return Column(
children: buildUploadItem(),
);
}
List<UploadItem> buildUploadItem() {
if (files == null || files.length <= 0) {
return [];
}
List<UploadItem> items = [];
for (int i = 0; i < files.length; i++) {
items.add(new UploadItem(
files[i],
filesName[i],
needNotify: needNotify,
));
}
return items;
}
Widget buildParseTip() {
return Center(
child: SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
backgroundColor: Colors.transparent,
valueColor: AlwaysStoppedAnimation(Colors.blue),
),
),
);
}
_getCurrentPb() async {
String pbType = await ImageUploadUtils.getDefaultPB();
String name = await ImageUploadUtils.getPBName(pbType);
setState(() {
this._title = '图片上传 - $name';
});
}
_parseAsset() async {
if (widget.assets != null && widget.assets.length > 0) {
files = [];
filesName = [];
File tmp;
/// 将Assets文件转换成File
for (int i = 0; i < widget.assets.length; i++) {
tmp = await widget.assets[i].originFile;
files.add(tmp);
filesName.add(path.basename(tmp.path));
}
var sp = await SpUtil.getInstance();
var settingIsTimestampRename =
sp.getBool(SharedPreferencesKeys.settingIsTimestampRename) ?? false;
if (settingIsTimestampRename) {
int timestamp = new DateTime.now().millisecondsSinceEpoch;
/// 处理时间戳命名
for (int i = 0; i < widget.assets.length; i++) {
/// 获取图片名
String suffix = path.extension(tmp.path);
/// replace
filesName[i] = '${timestamp + i}$suffix';
}
}
var settingIsUploadedRename =
sp.getBool(SharedPreferencesKeys.settingIsUploadedRename) ?? false;
if (settingIsUploadedRename) {
String content = filesName.join('\n');
/// 处理默认文本内容
_controller.text = content;
/// 处理重命名
await showDialog(
context: context,
barrierDismissible: false,
builder: (context) {
return AlertDialog(
title: Center(
child: Text('重命名图片,多张图片时以换行符分隔'),
),
content: Container(
padding: EdgeInsets.only(left: 4, right: 4),
child: TextField(
textInputAction: TextInputAction.newline,
controller: _controller,
scrollPadding: EdgeInsets.zero,
maxLines: null,
),
),
actions: <Widget>[
TextButton(
child: Text('确定'),
onPressed: () {
Navigator.pop(context);
_handleTextFieldContent(_controller.text.trim());
}),
],
);
},
);
} else {
_parseAssetsSuccess();
}
} else {
Navigator.pop(context);
}
}
_handleTextFieldContent(String content) {
List<String> splits = content.split('\n');
if (splits != null && splits.length >= widget.assets.length) {
/// 处理内容是否正确
for (int i = 0; i < widget.assets.length; i++) {
if (!isBlank(splits[i])) {
/// 不为空,则再覆盖
filesName[i] = splits[i];
}
}
}
_parseAssetsSuccess();
}
_parseAssetsSuccess() {
setState(() {
isParse = true;
});
}
}