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
|
} // else dirtyVersion
|
||||||
versionEvent.broadcast();
|
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/SettingsScreen.dart';
|
||||||
import 'package:pikapika/screens/components/NetworkSetting.dart';
|
import 'package:pikapika/screens/components/NetworkSetting.dart';
|
||||||
|
|
||||||
|
import '../basic/config/Version.dart';
|
||||||
import 'AppScreen.dart';
|
import 'AppScreen.dart';
|
||||||
import 'DownloadListScreen.dart';
|
import 'DownloadListScreen.dart';
|
||||||
import 'ThemeScreen.dart';
|
import 'ThemeScreen.dart';
|
||||||
|
@ -34,7 +35,8 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
_linkSubscription = linkSubscript(context);
|
_linkSubscription = linkSubscript(context);
|
||||||
|
versionEvent.subscribe(_versionSub);
|
||||||
|
versionPop(context);
|
||||||
_loadProperties();
|
_loadProperties();
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
@ -42,9 +44,15 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_linkSubscription.cancel();
|
_linkSubscription.cancel();
|
||||||
|
versionEvent.unsubscribe(_versionSub);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_versionSub(_) {
|
||||||
|
versionPop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Future _loadProperties() async {
|
Future _loadProperties() async {
|
||||||
var username = await method.getUsername();
|
var username = await method.getUsername();
|
||||||
var password = await method.getPassword();
|
var password = await method.getPassword();
|
||||||
|
|
|
@ -29,6 +29,8 @@ class _AppScreenState extends State<AppScreen> {
|
||||||
void initState() {
|
void initState() {
|
||||||
versionEvent.subscribe(_onVersion);
|
versionEvent.subscribe(_onVersion);
|
||||||
_linkSubscription = linkSubscript(context);
|
_linkSubscription = linkSubscript(context);
|
||||||
|
versionEvent.subscribe(_versionSub);
|
||||||
|
versionPop(context);
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,9 +38,14 @@ class _AppScreenState extends State<AppScreen> {
|
||||||
void dispose() {
|
void dispose() {
|
||||||
versionEvent.unsubscribe(_onVersion);
|
versionEvent.unsubscribe(_onVersion);
|
||||||
_linkSubscription.cancel();
|
_linkSubscription.cancel();
|
||||||
|
versionEvent.unsubscribe(_versionSub);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_versionSub(_) {
|
||||||
|
versionPop(context);
|
||||||
|
}
|
||||||
|
|
||||||
void _onVersion(dynamic a) {
|
void _onVersion(dynamic a) {
|
||||||
setState(() {});
|
setState(() {});
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ import 'package:pikapika/screens/PkzArchiveScreen.dart';
|
||||||
import 'package:uni_links/uni_links.dart';
|
import 'package:uni_links/uni_links.dart';
|
||||||
import 'package:uri_to_file/uri_to_file.dart';
|
import 'package:uri_to_file/uri_to_file.dart';
|
||||||
import '../basic/config/ExportRename.dart';
|
import '../basic/config/ExportRename.dart';
|
||||||
|
import '../basic/config/IconLoading.dart';
|
||||||
import '../basic/config/IsPro.dart';
|
import '../basic/config/IsPro.dart';
|
||||||
import 'AccountScreen.dart';
|
import 'AccountScreen.dart';
|
||||||
import 'AppScreen.dart';
|
import 'AppScreen.dart';
|
||||||
|
@ -82,6 +83,7 @@ class _InitScreenState extends State<InitScreen> {
|
||||||
await initShadowCategoriesMode();
|
await initShadowCategoriesMode();
|
||||||
await initShadowCategories();
|
await initShadowCategories();
|
||||||
await initFullScreenUI();
|
await initFullScreenUI();
|
||||||
|
await initIconLoading();
|
||||||
switchFullScreenUI();
|
switchFullScreenUI();
|
||||||
await initContentFailedReloadAction();
|
await initContentFailedReloadAction();
|
||||||
await initVolumeController();
|
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/ExportRename.dart';
|
||||||
import 'package:pikapika/basic/config/FullScreenAction.dart';
|
import 'package:pikapika/basic/config/FullScreenAction.dart';
|
||||||
import 'package:pikapika/basic/config/FullScreenUI.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/IsPro.dart';
|
||||||
import 'package:pikapika/basic/config/KeyboardController.dart';
|
import 'package:pikapika/basic/config/KeyboardController.dart';
|
||||||
import 'package:pikapika/basic/config/NoAnimation.dart';
|
import 'package:pikapika/basic/config/NoAnimation.dart';
|
||||||
|
@ -88,6 +89,7 @@ class SettingsScreen extends StatelessWidget {
|
||||||
volumeControllerSetting(),
|
volumeControllerSetting(),
|
||||||
keyboardControllerSetting(),
|
keyboardControllerSetting(),
|
||||||
noAnimationSetting(),
|
noAnimationSetting(),
|
||||||
|
iconLoadingSetting(),
|
||||||
const Divider(),
|
const Divider(),
|
||||||
fullScreenUISetting(),
|
fullScreenUISetting(),
|
||||||
willPopNoticeSetting(),
|
willPopNoticeSetting(),
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:pikapika/basic/config/IconLoading.dart';
|
||||||
|
|
||||||
class ContentLoading extends StatelessWidget {
|
class ContentLoading extends StatelessWidget {
|
||||||
final String label;
|
final String label;
|
||||||
|
@ -20,7 +21,9 @@ class ContentLoading extends StatelessWidget {
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: min / 2,
|
width: min / 2,
|
||||||
height: min / 2,
|
height: min / 2,
|
||||||
child: CircularProgressIndicator(
|
child: currentIconLoading()
|
||||||
|
? Icon(Icons.refresh, color: Colors.grey[100])
|
||||||
|
: CircularProgressIndicator(
|
||||||
color: theme.colorScheme.secondary,
|
color: theme.colorScheme.secondary,
|
||||||
backgroundColor: Colors.grey[100],
|
backgroundColor: Colors.grey[100],
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in New Issue