Files
PiliPlus/lib/pages/setting/pages/display_mode.dart
My-Responsitories 172389b12b tweaks (#1187)
* opt: marquee

* fix: bangumi seek

* opt: post panel

* opt: remove deprecated code

* opt: singleton dynController

* fix: music scheme

* feat: MemberVideo jump keep position

* tweak
2025-09-04 12:29:02 +00:00

109 lines
3.2 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:PiliPlus/utils/storage.dart';
import 'package:PiliPlus/utils/storage_key.dart';
import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show PlatformException;
import 'package:flutter_displaymode/flutter_displaymode.dart';
import 'package:get/get.dart';
import 'package:hive/hive.dart';
class SetDisplayMode extends StatefulWidget {
const SetDisplayMode({super.key});
@override
State<SetDisplayMode> createState() => _SetDisplayModeState();
}
class _SetDisplayModeState extends State<SetDisplayMode> {
List<DisplayMode> modes = <DisplayMode>[];
DisplayMode? active;
DisplayMode? preferred;
Box setting = GStorage.setting;
@override
void initState() {
super.initState();
init();
}
// 获取所有的mode
Future<void> fetchAll() async {
preferred = await FlutterDisplayMode.preferred;
active = await FlutterDisplayMode.active;
setting.put(SettingBoxKey.displayMode, preferred.toString());
if (mounted) {
setState(() {});
}
}
// 初始化mode/手动设置
Future<void> init() async {
try {
modes = await FlutterDisplayMode.supported;
} on PlatformException catch (e) {
if (kDebugMode) debugPrint(e.toString());
}
var value = setting.get(SettingBoxKey.displayMode);
if (value != null) {
preferred = modes.firstWhereOrNull((e) => e.toString() == value);
}
preferred ??= DisplayMode.auto;
FlutterDisplayMode.setPreferredMode(preferred!).whenComplete(() {
Future.delayed(const Duration(milliseconds: 100), fetchAll);
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(title: const Text('屏幕帧率设置')),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding:
MediaQuery.viewPaddingOf(context).copyWith(top: 0, bottom: 0) +
const EdgeInsets.only(left: 25, top: 10, bottom: 5),
child: Text(
'没有生效重启app试试',
style: TextStyle(color: Theme.of(context).colorScheme.outline),
),
),
Expanded(
child: RadioGroup(
onChanged: (DisplayMode? newMode) {
FlutterDisplayMode.setPreferredMode(
newMode!,
).whenComplete(
() => Future.delayed(
const Duration(milliseconds: 100),
fetchAll,
),
);
},
groupValue: preferred,
child: ListView.builder(
itemCount: modes.length,
itemBuilder: (context, index) {
final DisplayMode mode = modes[index];
return RadioListTile<DisplayMode>(
value: mode,
title: mode == DisplayMode.auto
? const Text('自动')
: Text('$mode${mode == active ? ' [系统]' : ''}'),
);
},
),
),
),
],
),
);
}
}