@@ -81,70 +81,79 @@ class _ExperimentSettingScreenState extends State<ExperimentSettingScreen>
8181 children: [
8282 if (ResponsiveUtil .isLandscape ()) const SizedBox (height: 10 ),
8383 ..._privacySettings (),
84- if (ResponsiveUtil .isAndroid ()) const SizedBox (height: 10 ),
85- if (ResponsiveUtil .isAndroid ())
86- ItemBuilder .buildEntryItem (
87- // tip: _modes.isNotEmpty
88- // ? _modes[_refreshRate.clamp(0, _modes.length - 1)]
89- // .toString()
90- // : "",
91- context: context,
92- title: "刷新率" ,
93- description:
94- "意在解决部分机型高刷失效的问题,如无问题,请不要修改\n 如果您的设备支持LTPO,可能会设置失败\n 已选模式: ${_modes .isNotEmpty ? _modes [_refreshRate .clamp (0 , _modes .length - 1 )].toString () : "" }\n 首选模式: ${_preferredMode ?.toString () ?? "Unknown" }\n 活动模式: ${_activeMode ?.toString () ?? "Unknown" }" ,
95- topRadius: true ,
96- bottomRadius: true ,
97- onTap: () {
98- getRefreshRate ();
99- BottomSheetBuilder .showListBottomSheet (
100- context,
101- (context) => TileList .fromOptions (
102- _supportedModeTuples,
103- (item2) async {
104- try {
105- ILogger .info (
106- "Try to set display mode: ${item2 .toString ()}" );
107- ILogger .info (
108- "Active display mode before set: ${_activeMode .toString ()}\n Preferred display mode before set: ${_preferredMode .toString ()}" );
109- await FlutterDisplayMode .setPreferredMode (item2);
110- _activeMode = await FlutterDisplayMode .active;
111- _preferredMode = await FlutterDisplayMode .preferred;
112- ILogger .info (
113- "Active display mode after set: ${_activeMode .toString ()}\n Preferred display mode after set: ${_preferredMode .toString ()}" );
114- if (_preferredMode? .toString () != item2.toString ()) {
115- IToast .showTop ("刷新率设置失败" );
116- } else {
117- if (_activeMode? .toString () != item2.toString ()) {
118- IToast .showTop ("刷新率设置成功,但当前显示模式未改变" );
119- } else {
120- IToast .showTop ("刷新率设置成功" );
121- }
122- }
123- } catch (e, t) {
124- IToast .showTop ("刷新率设置失败: ${e .toString ()}" );
125- ILogger .error ("Failed to set display mode" , e, t);
126- }
127- _refreshRate = _modes.indexOf (item2);
128- getRefreshRate ();
129- HiveUtil .put (HiveUtil .refreshRateKey, _refreshRate);
130- Navigator .pop (context);
131- },
132- selected:
133- _modes[_refreshRate.clamp (0 , _modes.length - 1 )],
134- context: context,
135- title: "选择刷新率" ,
136- onCloseTap: () => Navigator .pop (context),
137- ),
138- );
139- },
140- ),
84+ if (ResponsiveUtil .isAndroid ()) ..._fpsSettings (),
14185 const SizedBox (height: 30 ),
14286 ],
14387 ),
14488 ),
14589 );
14690 }
14791
92+ _fpsSettings () {
93+ return [
94+ const SizedBox (height: 10 ),
95+ ItemBuilder .buildEntryItem (
96+ context: context,
97+ title: "刷新率" ,
98+ description:
99+ "意在解决部分机型高刷失效的问题,如无问题,请不要修改\n 如果您的设备支持LTPO,可能会设置失败\n 已选模式: ${_modes .isNotEmpty ? _modes [_refreshRate .clamp (0 , _modes .length - 1 )].toString () : "" }\n 首选模式: ${_preferredMode ?.toString () ?? "Unknown" }\n 活动模式: ${_activeMode ?.toString () ?? "Unknown" }" ,
100+ topRadius: true ,
101+ onTap: () {
102+ getRefreshRate ();
103+ BottomSheetBuilder .showListBottomSheet (
104+ context,
105+ (context) => TileList .fromOptions (
106+ _supportedModeTuples,
107+ (item2) async {
108+ try {
109+ ILogger .info ("Try to set display mode: ${item2 .toString ()}" );
110+ ILogger .info (
111+ "Active display mode before set: ${_activeMode .toString ()}\n Preferred display mode before set: ${_preferredMode .toString ()}" );
112+ await FlutterDisplayMode .setPreferredMode (item2);
113+ _activeMode = await FlutterDisplayMode .active;
114+ _preferredMode = await FlutterDisplayMode .preferred;
115+ ILogger .info (
116+ "Active display mode after set: ${_activeMode .toString ()}\n Preferred display mode after set: ${_preferredMode .toString ()}" );
117+ if (_preferredMode? .toString () != item2.toString ()) {
118+ IToast .showTop ("刷新率设置失败" );
119+ } else {
120+ if (_activeMode? .toString () != item2.toString ()) {
121+ IToast .showTop ("刷新率设置成功,但当前显示模式未改变" );
122+ } else {
123+ IToast .showTop ("刷新率设置成功" );
124+ }
125+ }
126+ } catch (e, t) {
127+ IToast .showTop ("刷新率设置失败: ${e .toString ()}" );
128+ ILogger .error ("Failed to set display mode" , e, t);
129+ }
130+ _refreshRate = _modes.indexOf (item2);
131+ getRefreshRate ();
132+ HiveUtil .put (HiveUtil .refreshRateKey, _refreshRate);
133+ Navigator .pop (context);
134+ },
135+ selected: _modes[_refreshRate.clamp (0 , _modes.length - 1 )],
136+ context: context,
137+ title: "选择刷新率" ,
138+ onCloseTap: () => Navigator .pop (context),
139+ ),
140+ );
141+ },
142+ ),
143+ ItemBuilder .buildRadioItem (
144+ context: context,
145+ value: appProvider.showFPS,
146+ title: "显示实时FPS" ,
147+ bottomRadius: true ,
148+ onTap: () {
149+ setState (() {
150+ appProvider.showFPS = ! appProvider.showFPS;
151+ });
152+ },
153+ ),
154+ ];
155+ }
156+
148157 _privacySettings () {
149158 return [
150159 ItemBuilder .buildCaptionItem (
0 commit comments