version tips, icon loading

This commit is contained in:
niuhuan 2022-09-05 11:05:46 +08:00
parent 0289e964ee
commit 8ea16f4573
7 changed files with 157 additions and 5 deletions

View File

@ -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(() {});
},
);
},
);
}

View File

@ -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);
}
}
}

View File

@ -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();

View File

@ -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(() {});
}

View File

@ -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();

View File

@ -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(),

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:pikapika/basic/config/IconLoading.dart';
class ContentLoading extends StatelessWidget {
final String label;
@ -20,10 +21,12 @@ class ContentLoading extends StatelessWidget {
SizedBox(
width: min / 2,
height: min / 2,
child: CircularProgressIndicator(
color: theme.colorScheme.secondary,
backgroundColor: Colors.grey[100],
),
child: currentIconLoading()
? Icon(Icons.refresh, color: Colors.grey[100])
: CircularProgressIndicator(
color: theme.colorScheme.secondary,
backgroundColor: Colors.grey[100],
),
),
Container(height: min / 10),
Text(label, style: TextStyle(fontSize: min / 15)),