forked from canxin121/app_rhyme
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchore.dart
68 lines (58 loc) · 1.94 KB
/
chore.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import 'dart:io';
import 'dart:math';
import 'package:app_rhyme/utils/log_toast.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:flutter_exit_app/flutter_exit_app.dart';
import 'package:url_launcher/url_launcher.dart';
List<T> shuffleList<T>(List<T> items) {
var random = Random();
// 创建列表的副本以避免修改原始列表
List<T> shuffledItems = List<T>.from(items);
for (int i = shuffledItems.length - 1; i > 0; i--) {
int n = random.nextInt(i + 1);
T temp = shuffledItems[i];
shuffledItems[i] = shuffledItems[n];
shuffledItems[n] = temp;
}
return shuffledItems;
}
void openProjectRepoLink() async {
Uri uri = Uri.parse("https://github.com/canxin121/app_rhyme");
if (await canLaunchUrl(uri)) {
await launchUrl(uri);
} else {
await Clipboard.setData(
const ClipboardData(text: "https://github.com/canxin121/app_rhyme"));
LogToast.error("打开项目页面失败", "已复制链接到剪切板,请在浏览器中打开",
"[openProjectLink] Failed to launch github url, copied to clipboard");
}
}
Future<void> exitApp() async {
if (Platform.isAndroid || Platform.isIOS) {
await FlutterExitApp.exitApp(iosForceExit: true);
} else {
exit(0);
}
}
bool? globalIsTouchScreenTablet;
bool isTouchScreenDesktop(BuildContext context) {
if (isDesktopDevice()) {
return false;
}
if (globalIsTouchScreenTablet != null) {
return globalIsTouchScreenTablet!;
}
final mediaQuery = MediaQuery.of(context);
final size = mediaQuery.size;
final diagonal = sqrt(size.width * size.width + size.height * size.height);
globalIsTouchScreenTablet = diagonal > 600;
return globalIsTouchScreenTablet!;
}
bool isDesktopDevice() {
return Platform.isLinux || Platform.isMacOS || Platform.isWindows;
}
bool isWidthGreaterThanHeight(BuildContext context) {
final size = MediaQuery.of(context).size;
return size.width > size.height;
}