add gui animation setting

This commit is contained in:
niuhuan 2021-11-26 11:06:20 +08:00
parent 17f28cfb2f
commit 3a9db2297c
6 changed files with 75 additions and 6 deletions

View File

@ -0,0 +1,42 @@
///
import 'package:flutter/material.dart';
import '../Common.dart';
import '../Method.dart';
const _propertyName = "guiAnimation";
late bool _guiAnimation;
Future<void> initGuiAnimation() async {
_guiAnimation = (await method.loadProperty(_propertyName, "true")) == "true";
}
bool currentGuiAnimation() {
return _guiAnimation;
}
Future<void> _chooseGuiAnimation(BuildContext context) async {
String? result =
await chooseListDialog<String>(context, "进入阅读器自动全屏", ["", ""]);
if (result != null) {
var target = result == "";
await method.saveProperty(_propertyName, "$target");
_guiAnimation = target;
}
}
Widget guiAnimationSetting() {
return StatefulBuilder(
builder: (BuildContext context, void Function(void Function()) setState) {
return ListTile(
title: Text("软件界面动画"),
subtitle: Text(_guiAnimation ? "" : ""),
onTap: () async {
await _chooseGuiAnimation(context);
setState(() {});
},
);
},
);
}

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:pikapika/basic/config/GuiAnimation.dart';
import 'package:pikapika/basic/config/Version.dart';
import 'package:pikapika/screens/components/Badge.dart';
@ -36,19 +37,33 @@ class _AppScreenState extends State<AppScreen> {
];
late int _selectedIndex = 0;
PageController _pageController = PageController(initialPage: 0);
void _onItemTapped(int index) {
if (currentGuiAnimation()) {
_pageController.animateToPage(
index,
duration: Duration(milliseconds: 200),
curve: Curves.ease,
);
} else {
_pageController.jumpToPage(index);
}
}
void _onPageChanged(int index) {
setState(() {
_selectedIndex = index;
this._selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _selectedIndex,
body: PageView(
controller: _pageController,
children: _widgetOptions,
onPageChanged: _onPageChanged,
),
bottomNavigationBar: BottomNavigationBar(
items: <BottomNavigationBarItem>[

View File

@ -24,7 +24,12 @@ class CategoriesScreen extends StatefulWidget {
State<StatefulWidget> createState() => _CategoriesScreenState();
}
class _CategoriesScreenState extends State<CategoriesScreen> {
class _CategoriesScreenState extends State<CategoriesScreen>
with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
late SearchBar _searchBar = SearchBar(
hintText: '搜索',
inBar: false,

View File

@ -11,6 +11,7 @@ import 'package:pikapika/basic/config/DownloadAndExportPath.dart';
import 'package:pikapika/basic/config/DownloadThreadCount.dart';
import 'package:pikapika/basic/config/FullScreenAction.dart';
import 'package:pikapika/basic/config/FullScreenUI.dart';
import 'package:pikapika/basic/config/GuiAnimation.dart';
import 'package:pikapika/basic/config/KeyboardController.dart';
import 'package:pikapika/basic/config/NoAnimation.dart';
import 'package:pikapika/basic/config/PagerAction.dart';
@ -76,6 +77,7 @@ class _InitScreenState extends State<InitScreen> {
await initNoAnimation();
await initVersion();
autoCheckNewVersion();
await initGuiAnimation();
// , token失效重新登录, 1
if (await method.preLogin()) {
// token或username+password有效则直接进入登录好的界面

View File

@ -13,6 +13,7 @@ import 'package:pikapika/basic/config/DownloadAndExportPath.dart';
import 'package:pikapika/basic/config/DownloadThreadCount.dart';
import 'package:pikapika/basic/config/FullScreenAction.dart';
import 'package:pikapika/basic/config/FullScreenUI.dart';
import 'package:pikapika/basic/config/GuiAnimation.dart';
import 'package:pikapika/basic/config/KeyboardController.dart';
import 'package:pikapika/basic/config/NoAnimation.dart';
import 'package:pikapika/basic/config/PagerAction.dart';
@ -43,11 +44,12 @@ class SettingsScreen extends StatelessWidget {
convertToPNGSetting(),
readerTypeSetting(),
readerDirectionSetting(),
noAnimationSetting(),
autoFullScreenSetting(),
fullScreenActionSetting(),
volumeControllerSetting(),
keyboardControllerSetting(),
noAnimationSetting(),
guiAnimationSetting(),
Divider(),
shadowCategoriesModeSetting(),
shadowCategoriesSetting(),

View File

@ -21,7 +21,10 @@ class SpaceScreen extends StatefulWidget {
State<StatefulWidget> createState() => _SpaceScreenState();
}
class _SpaceScreenState extends State<SpaceScreen> {
class _SpaceScreenState extends State<SpaceScreen>
with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;
@override
void initState() {