Skip to content

Commit 54eeb0b

Browse files
committed
feat:Add copy to clipboard function
1 parent 1779b5c commit 54eeb0b

File tree

3 files changed

+54
-5
lines changed

3 files changed

+54
-5
lines changed

lib/components/upload_item/upload_item.dart

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ import 'dart:io';
33
import 'package:extended_image/extended_image.dart';
44
import 'package:flutter/cupertino.dart';
55
import 'package:flutter/material.dart';
6+
import 'package:flutter/services.dart';
67
import 'package:flutter_picgo/components/upload_item/upload_item_presenter.dart';
78
import 'package:flutter_picgo/utils/extended.dart';
9+
import 'package:flutter_picgo/utils/local_notification.dart';
10+
import 'package:toast/toast.dart';
811

912
enum UploadState {
1013
/// 上传中
@@ -26,8 +29,9 @@ enum UploadState {
2629
class UploadItem extends StatefulWidget {
2730
final File file;
2831
final String rename;
32+
final bool needNotify;
2933

30-
UploadItem(this.file, this.rename);
34+
UploadItem(this.file, this.rename, {this.needNotify = false});
3135

3236
@override
3337
_UploadItemState createState() => _UploadItemState();
@@ -36,6 +40,9 @@ class UploadItem extends StatefulWidget {
3640
class _UploadItemState extends State<UploadItem> implements UploadItemContract {
3741
UploadState _state;
3842
UploadItemPresenter _presenter;
43+
String _uploadedImageUrl = '';
44+
45+
/// construct
3946
_UploadItemState() {
4047
_state = UploadState.Uploading;
4148
_presenter = new UploadItemPresenter(this);
@@ -81,7 +88,9 @@ class _UploadItemState extends State<UploadItem> implements UploadItemContract {
8188
style: TextStyle(color: Colors.grey),
8289
),
8390
trailing: buildStateTip(),
84-
onTap: () {},
91+
onTap: () {
92+
_handleTap();
93+
},
8594
);
8695
}
8796

@@ -98,6 +107,7 @@ class _UploadItemState extends State<UploadItem> implements UploadItemContract {
98107
return Icon(
99108
Icons.done,
100109
size: 16,
110+
color: Colors.green,
101111
);
102112
case UploadState.UploadFail:
103113
case UploadState.SaveFail:
@@ -141,17 +151,43 @@ class _UploadItemState extends State<UploadItem> implements UploadItemContract {
141151
_presenter.doUploadImage(widget.file, widget.rename);
142152
}
143153

154+
/// 处理点击事件
155+
_handleTap() {
156+
if (_state == UploadState.Complete) {
157+
Clipboard.setData(ClipboardData(text: _uploadedImageUrl));
158+
Toast.show('已复制到剪切板', context);
159+
} else {
160+
Toast.show('当前状态无法操作', context);
161+
}
162+
}
163+
144164
@override
145165
uploadFaild(String errorMsg) {
146166
setState(() {
147167
_state = UploadState.UploadFail;
148168
});
169+
170+
_showNotification(0, '${widget.rename}上传失败:$errorMsg');
149171
}
150172

151173
@override
152-
uploadSuccess(String url) {
174+
uploadSuccess(String url) async {
175+
_uploadedImageUrl = url;
153176
setState(() {
154177
_state = UploadState.Complete;
155178
});
179+
180+
_showNotification(0, '${widget.rename}上传成功:$url');
181+
}
182+
183+
Future<void> _showNotification(int id, String body) async {
184+
LocalNotificationUtil.getInstance().show(
185+
id,
186+
'上传提示',
187+
body,
188+
LocalNotificationUtil.createNotificationDetails(
189+
LocalNotificationUtil.uploadAndroidChannel(),
190+
LocalNotificationUtil.normalIOSNotificationDetails(),
191+
LocalNotificationUtil.normalMacOSNotificationDetails()));
156192
}
157193
}

lib/views/album_page/album_page_presenter.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:flutter/foundation.dart';
21
import 'package:flutter_picgo/model/uploaded.dart';
32
import 'package:flutter_picgo/resources/table_name_keys.dart';
43
import 'package:flutter_picgo/utils/image_upload.dart';

lib/views/upload_page/handle_upload_page.dart

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@ class _HandleUploadPageState extends State<HandleUploadPage> {
2626

2727
TextEditingController _controller = new TextEditingController();
2828

29+
/// 通知提示
30+
bool needNotify = false;
31+
32+
_HandleUploadPageState() {
33+
SpUtil.getInstance().then((sp) {
34+
this.needNotify =
35+
sp.getBool(SharedPreferencesKeys.settingIsUploadedTip) ?? false;
36+
});
37+
}
38+
2939
@override
3040
void initState() {
3141
super.initState();
@@ -57,7 +67,11 @@ class _HandleUploadPageState extends State<HandleUploadPage> {
5767

5868
List<UploadItem> items = [];
5969
for (int i = 0; i < files.length; i++) {
60-
items.add(new UploadItem(files[i], filesName[i]));
70+
items.add(new UploadItem(
71+
files[i],
72+
filesName[i],
73+
needNotify: needNotify,
74+
));
6175
}
6276
return items;
6377
}

0 commit comments

Comments
 (0)