version tips, icon loading
This commit is contained in:
parent
0289e964ee
commit
8ea16f4573
|
@ -0,0 +1,43 @@
|
|||
/// 自动全屏
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import '../Common.dart';
|
||||
import '../Method.dart';
|
||||
|
||||
const _propertyName = "iconLoading";
|
||||
late bool _iconLoading;
|
||||
|
||||
Future<void> initIconLoading() async {
|
||||
_iconLoading =
|
||||
(await method.loadProperty(_propertyName, "false")) == "true";
|
||||
}
|
||||
|
||||
bool currentIconLoading() {
|
||||
return _iconLoading;
|
||||
}
|
||||
|
||||
Future<void> _chooseIconLoading(BuildContext context) async {
|
||||
String? result =
|
||||
await chooseListDialog<String>(context, "使用静态图标代替加载动画", ["是", "否"]);
|
||||
if (result != null) {
|
||||
var target = result == "是";
|
||||
await method.saveProperty(_propertyName, "$target");
|
||||
_iconLoading = target;
|
||||
}
|
||||
}
|
||||
|
||||
Widget iconLoadingSetting() {
|
||||
return StatefulBuilder(
|
||||
builder: (BuildContext context, void Function(void Function()) setState) {
|
||||
return ListTile(
|
||||
title: const Text("使用静态图标代替加载动画"),
|
||||
subtitle: Text(_iconLoading ? "是" : "否"),
|
||||
onTap: () async {
|
||||
await _chooseIconLoading(context);
|
||||
setState(() {});
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
|
@ -71,3 +71,90 @@ Future _versionCheck() async {
|
|||
} // else dirtyVersion
|
||||
versionEvent.broadcast();
|
||||
}
|
||||
|
||||
var _display = true;
|
||||
|
||||
void versionPop(BuildContext context) {
|
||||
if (latestVersion() != null && _display) {
|
||||
_display = false;
|
||||
TopConfirm.topConfirm(
|
||||
context,
|
||||
"发现新版本",
|
||||
"发现新版本 ${latestVersion()} , 请到关于页面更新",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class TopConfirm {
|
||||
static topConfirm(BuildContext context, String title, String message,
|
||||
{Function()? afterIKnown}) {
|
||||
late OverlayEntry overlayEntry;
|
||||
overlayEntry = OverlayEntry(builder: (BuildContext context) {
|
||||
return LayoutBuilder(
|
||||
builder: (
|
||||
BuildContext context,
|
||||
BoxConstraints constraints,
|
||||
) {
|
||||
var mq = MediaQuery.of(context).size.width - 30;
|
||||
return Material(
|
||||
color: Colors.transparent,
|
||||
child: Container(
|
||||
width: constraints.maxWidth,
|
||||
height: constraints.maxHeight,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withOpacity(.35),
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
Expanded(child: Container()),
|
||||
Container(
|
||||
width: mq,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(height: 30),
|
||||
Text(
|
||||
title,
|
||||
style: const TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 28,
|
||||
),
|
||||
),
|
||||
Container(height: 15),
|
||||
Text(
|
||||
message,
|
||||
style: const TextStyle(
|
||||
color: Colors.black,
|
||||
fontSize: 16,
|
||||
),
|
||||
),
|
||||
Container(height: 25),
|
||||
MaterialButton(
|
||||
elevation: 0,
|
||||
color: Colors.black.withOpacity(.1),
|
||||
onPressed: () {
|
||||
overlayEntry.remove();
|
||||
},
|
||||
child: const Text("朕知道了"),
|
||||
),
|
||||
Container(height: 30),
|
||||
],
|
||||
),
|
||||
),
|
||||
Expanded(child: Container()),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
OverlayState? overlay = Overlay.of(context);
|
||||
if (overlay != null) {
|
||||
overlay.insert(overlayEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import 'package:pikapika/screens/RegisterScreen.dart';
|
|||
import 'package:pikapika/screens/SettingsScreen.dart';
|
||||
import 'package:pikapika/screens/components/NetworkSetting.dart';
|
||||
|
||||
import '../basic/config/Version.dart';
|
||||
import 'AppScreen.dart';
|
||||
import 'DownloadListScreen.dart';
|
||||
import 'ThemeScreen.dart';
|
||||
|
@ -34,7 +35,8 @@ class _AccountScreenState extends State<AccountScreen> {
|
|||
@override
|
||||
void initState() {
|
||||
_linkSubscription = linkSubscript(context);
|
||||
|
||||
versionEvent.subscribe(_versionSub);
|
||||
versionPop(context);
|
||||
_loadProperties();
|
||||
super.initState();
|
||||
}
|
||||
|
@ -42,9 +44,15 @@ class _AccountScreenState extends State<AccountScreen> {
|
|||
@override
|
||||
void dispose() {
|
||||
_linkSubscription.cancel();
|
||||
versionEvent.unsubscribe(_versionSub);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
_versionSub(_) {
|
||||
versionPop(context);
|
||||
}
|
||||
|
||||
|
||||
Future _loadProperties() async {
|
||||
var username = await method.getUsername();
|
||||
var password = await method.getPassword();
|
||||
|
|
|
@ -29,6 +29,8 @@ class _AppScreenState extends State<AppScreen> {
|
|||
void initState() {
|
||||
versionEvent.subscribe(_onVersion);
|
||||
_linkSubscription = linkSubscript(context);
|
||||
versionEvent.subscribe(_versionSub);
|
||||
versionPop(context);
|
||||
super.initState();
|
||||
}
|
||||
|
||||
|
@ -36,9 +38,14 @@ class _AppScreenState extends State<AppScreen> {
|
|||
void dispose() {
|
||||
versionEvent.unsubscribe(_onVersion);
|
||||
_linkSubscription.cancel();
|
||||
versionEvent.unsubscribe(_versionSub);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
_versionSub(_) {
|
||||
versionPop(context);
|
||||
}
|
||||
|
||||
void _onVersion(dynamic a) {
|
||||
setState(() {});
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ import 'package:pikapika/screens/PkzArchiveScreen.dart';
|
|||
import 'package:uni_links/uni_links.dart';
|
||||
import 'package:uri_to_file/uri_to_file.dart';
|
||||
import '../basic/config/ExportRename.dart';
|
||||
import '../basic/config/IconLoading.dart';
|
||||
import '../basic/config/IsPro.dart';
|
||||
import 'AccountScreen.dart';
|
||||
import 'AppScreen.dart';
|
||||
|
@ -82,6 +83,7 @@ class _InitScreenState extends State<InitScreen> {
|
|||
await initShadowCategoriesMode();
|
||||
await initShadowCategories();
|
||||
await initFullScreenUI();
|
||||
await initIconLoading();
|
||||
switchFullScreenUI();
|
||||
await initContentFailedReloadAction();
|
||||
await initVolumeController();
|
||||
|
|
|
@ -13,6 +13,7 @@ import 'package:pikapika/basic/config/DownloadThreadCount.dart';
|
|||
import 'package:pikapika/basic/config/ExportRename.dart';
|
||||
import 'package:pikapika/basic/config/FullScreenAction.dart';
|
||||
import 'package:pikapika/basic/config/FullScreenUI.dart';
|
||||
import 'package:pikapika/basic/config/IconLoading.dart';
|
||||
import 'package:pikapika/basic/config/IsPro.dart';
|
||||
import 'package:pikapika/basic/config/KeyboardController.dart';
|
||||
import 'package:pikapika/basic/config/NoAnimation.dart';
|
||||
|
@ -88,6 +89,7 @@ class SettingsScreen extends StatelessWidget {
|
|||
volumeControllerSetting(),
|
||||
keyboardControllerSetting(),
|
||||
noAnimationSetting(),
|
||||
iconLoadingSetting(),
|
||||
const Divider(),
|
||||
fullScreenUISetting(),
|
||||
willPopNoticeSetting(),
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:pikapika/basic/config/IconLoading.dart';
|
||||
|
||||
class ContentLoading extends StatelessWidget {
|
||||
final String label;
|
||||
|
@ -20,7 +21,9 @@ class ContentLoading extends StatelessWidget {
|
|||
SizedBox(
|
||||
width: min / 2,
|
||||
height: min / 2,
|
||||
child: CircularProgressIndicator(
|
||||
child: currentIconLoading()
|
||||
? Icon(Icons.refresh, color: Colors.grey[100])
|
||||
: CircularProgressIndicator(
|
||||
color: theme.colorScheme.secondary,
|
||||
backgroundColor: Colors.grey[100],
|
||||
),
|
||||
|
|
Loading…
Reference in New Issue