feat: 高帧率
This commit is contained in:
94
lib/pages/setting/pages/display_mode.dart
Normal file
94
lib/pages/setting/pages/display_mode.dart
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/scheduler.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_displaymode/flutter_displaymode.dart';
|
||||||
|
|
||||||
|
class SetDiaplayMode extends StatefulWidget {
|
||||||
|
const SetDiaplayMode({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<SetDiaplayMode> createState() => _SetDiaplayModeState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _SetDiaplayModeState extends State<SetDiaplayMode> {
|
||||||
|
List<DisplayMode> modes = <DisplayMode>[];
|
||||||
|
DisplayMode? active;
|
||||||
|
DisplayMode? preferred;
|
||||||
|
|
||||||
|
final ValueNotifier<int> page = ValueNotifier<int>(0);
|
||||||
|
late final PageController controller = PageController()
|
||||||
|
..addListener(() {
|
||||||
|
page.value = controller.page!.round();
|
||||||
|
});
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
init();
|
||||||
|
SchedulerBinding.instance.addPostFrameCallback((_) {
|
||||||
|
fetchAll();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> fetchAll() async {
|
||||||
|
preferred = await FlutterDisplayMode.preferred;
|
||||||
|
active = await FlutterDisplayMode.active;
|
||||||
|
// GStorage().setDisplayModeType(preferred!);
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> init() async {
|
||||||
|
try {
|
||||||
|
modes = await FlutterDisplayMode.supported;
|
||||||
|
} on PlatformException catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
// var res = await GStorage().getDisplayModeType();
|
||||||
|
// preferred = modes.toList().firstWhere((el) => el == res);
|
||||||
|
FlutterDisplayMode.setPreferredMode(preferred!);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(title: const Text('屏幕帧率设置')),
|
||||||
|
body: SafeArea(
|
||||||
|
top: false,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
if (modes.isEmpty) const Text('Nothing here'),
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 25, top: 10, bottom: 5),
|
||||||
|
child: Text(
|
||||||
|
'没有生效?重启app试试',
|
||||||
|
style: TextStyle(color: Theme.of(context).colorScheme.outline),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: modes.length,
|
||||||
|
itemBuilder: (_, int i) {
|
||||||
|
final DisplayMode mode = modes[i];
|
||||||
|
return RadioListTile<DisplayMode>(
|
||||||
|
value: mode,
|
||||||
|
title: mode == DisplayMode.auto
|
||||||
|
? const Text('自动')
|
||||||
|
: Text('$mode${mode == active ? " [系统]" : ""}'),
|
||||||
|
groupValue: preferred,
|
||||||
|
onChanged: (DisplayMode? newMode) async {
|
||||||
|
await FlutterDisplayMode.setPreferredMode(newMode!);
|
||||||
|
await Future<dynamic>.delayed(
|
||||||
|
const Duration(milliseconds: 100),
|
||||||
|
);
|
||||||
|
await fetchAll();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,3 +1,5 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
@ -195,12 +197,21 @@ class _StyleSettingState extends State<StyleSetting> {
|
|||||||
dense: false,
|
dense: false,
|
||||||
onTap: () => Get.toNamed('/colorSetting'),
|
onTap: () => Get.toNamed('/colorSetting'),
|
||||||
title: Text('应用主题', style: titleStyle),
|
title: Text('应用主题', style: titleStyle),
|
||||||
|
trailing: const Icon(Icons.arrow_forward_ios, size: 17),
|
||||||
),
|
),
|
||||||
ListTile(
|
ListTile(
|
||||||
dense: false,
|
dense: false,
|
||||||
onTap: () => Get.toNamed('/fontSizeSetting'),
|
onTap: () => Get.toNamed('/fontSizeSetting'),
|
||||||
title: Text('字体大小', style: titleStyle),
|
title: Text('字体大小', style: titleStyle),
|
||||||
)
|
trailing: const Icon(Icons.arrow_forward_ios, size: 17),
|
||||||
|
),
|
||||||
|
if (Platform.isAndroid)
|
||||||
|
ListTile(
|
||||||
|
dense: false,
|
||||||
|
onTap: () => Get.toNamed('/displayModeSetting'),
|
||||||
|
title: Text('屏幕帧率', style: titleStyle),
|
||||||
|
trailing: const Icon(Icons.arrow_forward_ios, size: 17),
|
||||||
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import 'package:pilipala/pages/search/index.dart';
|
|||||||
import 'package:pilipala/pages/searchResult/index.dart';
|
import 'package:pilipala/pages/searchResult/index.dart';
|
||||||
import 'package:pilipala/pages/setting/extra_setting.dart';
|
import 'package:pilipala/pages/setting/extra_setting.dart';
|
||||||
import 'package:pilipala/pages/setting/pages/color_select.dart';
|
import 'package:pilipala/pages/setting/pages/color_select.dart';
|
||||||
|
import 'package:pilipala/pages/setting/pages/display_mode.dart';
|
||||||
import 'package:pilipala/pages/setting/pages/font_size_select.dart';
|
import 'package:pilipala/pages/setting/pages/font_size_select.dart';
|
||||||
import 'package:pilipala/pages/setting/play_setting.dart';
|
import 'package:pilipala/pages/setting/play_setting.dart';
|
||||||
import 'package:pilipala/pages/setting/privacy_setting.dart';
|
import 'package:pilipala/pages/setting/privacy_setting.dart';
|
||||||
@ -101,6 +102,9 @@ class Routes {
|
|||||||
CustomGetPage(name: '/colorSetting', page: () => const ColorSelectPage()),
|
CustomGetPage(name: '/colorSetting', page: () => const ColorSelectPage()),
|
||||||
CustomGetPage(
|
CustomGetPage(
|
||||||
name: '/fontSizeSetting', page: () => const FontSizeSelectPage()),
|
name: '/fontSizeSetting', page: () => const FontSizeSelectPage()),
|
||||||
|
// 屏幕帧率
|
||||||
|
CustomGetPage(
|
||||||
|
name: '/displayModeSetting', page: () => const SetDiaplayMode()),
|
||||||
// 关于
|
// 关于
|
||||||
CustomGetPage(name: '/about', page: () => const AboutPage()),
|
CustomGetPage(name: '/about', page: () => const AboutPage()),
|
||||||
];
|
];
|
||||||
|
|||||||
@ -438,6 +438,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.3.1"
|
version: "3.3.1"
|
||||||
|
flutter_displaymode:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_displaymode
|
||||||
|
sha256: "42c5e9abd13d28ed74f701b60529d7f8416947e58256e6659c5550db719c57ef"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.0"
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -115,6 +115,8 @@ dependencies:
|
|||||||
flutter_svg: ^2.0.7
|
flutter_svg: ^2.0.7
|
||||||
# 防抖节流
|
# 防抖节流
|
||||||
easy_debounce: ^2.0.3
|
easy_debounce: ^2.0.3
|
||||||
|
# 高帧率
|
||||||
|
flutter_displaymode: ^0.6.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user