✨ copy skip confirm
This commit is contained in:
parent
d66ff4d536
commit
c12750680e
|
@ -1,6 +1,7 @@
|
|||
v1.7.8
|
||||
- [x] ♻️ iOS可以使用FaceID进行解锁App
|
||||
- [x] ✨ 音量键快速翻阅下一章节(设置中开启)
|
||||
- [x] ✨ 音量键快速翻阅下一章节(设置中默认开启)
|
||||
- [x] ✨ 长按复制不需要确认(设置中默认关闭)
|
||||
|
||||
v1.7.7
|
||||
- [x] 🐛 修复一些极端情况下崩溃
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:file_picker/file_picker.dart';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:permission_handler/permission_handler.dart';
|
||||
import 'package:pikapika/basic/Common.dart';
|
||||
import 'package:pikapika/basic/config/CopySkipConfirm.dart';
|
||||
import 'package:pikapika/basic/config/Platform.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
|
||||
|
@ -18,6 +19,11 @@ void copyToClipBoard(BuildContext context, String string) {
|
|||
defaultToast(context, "已复制到剪切板");
|
||||
}
|
||||
|
||||
void copyToClipBoardTips(BuildContext context, String string) {
|
||||
FlutterClipboard.copy(string);
|
||||
defaultToast(context, "已复制到剪切板 :\n$string");
|
||||
}
|
||||
|
||||
/// 打开web页面
|
||||
Future<dynamic> openUrl(String url) async {
|
||||
if (await canLaunch(url)) {
|
||||
|
@ -72,7 +78,7 @@ Future<dynamic> _saveImageAndroid(String path, BuildContext context) async {
|
|||
late bool g;
|
||||
if (androidVersion < 30) {
|
||||
g = await Permission.storage.request().isGranted;
|
||||
}else{
|
||||
} else {
|
||||
g = await Permission.manageExternalStorage.request().isGranted;
|
||||
}
|
||||
if (!g) {
|
||||
|
@ -85,16 +91,18 @@ Future<dynamic> _saveImageAndroid(String path, BuildContext context) async {
|
|||
Future<String?> chooseFolder(BuildContext context) async {
|
||||
return FilePicker.platform.getDirectoryPath(
|
||||
dialogTitle: "选择一个文件夹, 将文件保存到这里",
|
||||
initialDirectory: Directory
|
||||
.fromUri(Uri.file(await currentChooserRoot()))
|
||||
.absolute
|
||||
.path,
|
||||
initialDirectory:
|
||||
Directory.fromUri(Uri.file(await currentChooserRoot())).absolute.path,
|
||||
);
|
||||
}
|
||||
|
||||
/// 复制对话框
|
||||
void confirmCopy(BuildContext context, String content) async {
|
||||
if (copySkipConfirm()) {
|
||||
copyToClipBoardTips(context, content);
|
||||
} else {
|
||||
if (await confirmDialog(context, "复制", content)) {
|
||||
copyToClipBoard(context, content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import '../Method.dart';
|
||||
|
||||
const _propertyName = "copySkipConfirm";
|
||||
|
||||
late bool _copySkipConfirm;
|
||||
|
||||
Future initCopySkipConfirm() async {
|
||||
_copySkipConfirm = (await method.loadProperty(_propertyName, "false")) == "true";
|
||||
}
|
||||
|
||||
bool copySkipConfirm() {
|
||||
return _copySkipConfirm;
|
||||
}
|
||||
|
||||
Widget copySkipConfirmSetting() {
|
||||
return StatefulBuilder(
|
||||
builder: (BuildContext context, void Function(void Function()) setState) {
|
||||
return SwitchListTile(
|
||||
title: const Text("长按复制不需要确认"),
|
||||
value: _copySkipConfirm,
|
||||
onChanged: (value) async {
|
||||
await method.saveProperty(_propertyName, "$value");
|
||||
_copySkipConfirm = value;
|
||||
setState(() {});
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
|
@ -11,6 +11,7 @@ import 'package:pikapika/basic/config/AutoFullScreen.dart';
|
|||
import 'package:pikapika/basic/config/CategoriesColumnCount.dart';
|
||||
import 'package:pikapika/basic/config/ChooserRoot.dart';
|
||||
import 'package:pikapika/basic/config/ContentFailedReloadAction.dart';
|
||||
import 'package:pikapika/basic/config/CopySkipConfirm.dart';
|
||||
import 'package:pikapika/basic/config/DownloadAndExportPath.dart';
|
||||
import 'package:pikapika/basic/config/DownloadThreadCount.dart';
|
||||
import 'package:pikapika/basic/config/EBookScrolling.dart';
|
||||
|
@ -127,6 +128,7 @@ class _InitScreenState extends State<InitScreen> {
|
|||
await initEBookScrollingRange();
|
||||
await initEBookScrollingTrigger();
|
||||
await initVolumeNextChapter();
|
||||
await initCopySkipConfirm();
|
||||
|
||||
String? initUrl;
|
||||
if (Platform.isAndroid || Platform.isIOS) {
|
||||
|
|
|
@ -8,6 +8,7 @@ import 'package:pikapika/basic/config/AutoClean.dart';
|
|||
import 'package:pikapika/basic/config/AutoFullScreen.dart';
|
||||
import 'package:pikapika/basic/config/ChooserRoot.dart';
|
||||
import 'package:pikapika/basic/config/ContentFailedReloadAction.dart';
|
||||
import 'package:pikapika/basic/config/CopySkipConfirm.dart';
|
||||
import 'package:pikapika/basic/config/DownloadAndExportPath.dart';
|
||||
import 'package:pikapika/basic/config/DownloadThreadCount.dart';
|
||||
import 'package:pikapika/basic/config/EBookScrollingRange.dart';
|
||||
|
@ -101,6 +102,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
|||
androidSecureFlagSetting(),
|
||||
authenticationSetting(),
|
||||
const Divider(),
|
||||
copySkipConfirmSetting(),
|
||||
iconLoadingSetting(),
|
||||
eBookScrollingSetting(),
|
||||
eBookScrollingRangeSetting(),
|
||||
|
|
Loading…
Reference in New Issue