feat: 高帧率

This commit is contained in:
guozhigq
2023-08-26 10:51:14 +08:00
parent 8bc6a32b06
commit 8990c4ae92
5 changed files with 120 additions and 1 deletions

View 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();
},
);
},
),
),
],
),
),
);
}
}

View File

@ -1,3 +1,5 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
@ -195,11 +197,20 @@ class _StyleSettingState extends State<StyleSetting> {
dense: false,
onTap: () => Get.toNamed('/colorSetting'),
title: Text('应用主题', style: titleStyle),
trailing: const Icon(Icons.arrow_forward_ios, size: 17),
),
ListTile(
dense: false,
onTap: () => Get.toNamed('/fontSizeSetting'),
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),
)
],
),

View File

@ -22,6 +22,7 @@ import 'package:pilipala/pages/search/index.dart';
import 'package:pilipala/pages/searchResult/index.dart';
import 'package:pilipala/pages/setting/extra_setting.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/play_setting.dart';
import 'package:pilipala/pages/setting/privacy_setting.dart';
@ -101,6 +102,9 @@ class Routes {
CustomGetPage(name: '/colorSetting', page: () => const ColorSelectPage()),
CustomGetPage(
name: '/fontSizeSetting', page: () => const FontSizeSelectPage()),
// 屏幕帧率
CustomGetPage(
name: '/displayModeSetting', page: () => const SetDiaplayMode()),
// 关于
CustomGetPage(name: '/about', page: () => const AboutPage()),
];

View File

@ -438,6 +438,14 @@ packages:
url: "https://pub.dev"
source: hosted
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:
dependency: "direct dev"
description:

View File

@ -115,6 +115,8 @@ dependencies:
flutter_svg: ^2.0.7
# 防抖节流
easy_debounce: ^2.0.3
# 高帧率
flutter_displaymode: ^0.6.0
dev_dependencies:
flutter_test: