如何在 Flutter 中的 Preferences 中检索 RadioPreference、CheckPreference 值 [英] How To Retrieve RadioPreference, CheckPreference values in Preferences in Flutter
问题描述
我在使用首选项库
完整代码
import 'package:flutter/material.dart';导入 'package:preferences/preferences.dart';导入 'package:validators/validators.dart';主()异步{WidgetsFlutterBinding.ensureInitialized();等待 PrefService.init(前缀:'pref_');PrefService.setDefaultValues({'user_description': '这是我的描述!',});运行应用程序(我的应用程序());}class MyApp 扩展 StatelessWidget {@覆盖小部件构建(BuildContext 上下文){返回 MaterialApp(title: '首选项演示',home: MyHomePage(title: 'Preferences Demo'),);}}class MyHomePage 扩展了 StatefulWidget {MyHomePage({Key key, this.title}) : super(key: key);最终字符串标题;@覆盖_MyHomePageState createState() =>_MyHomePageState();}class _MyHomePageState 扩展 State{@覆盖小部件构建(BuildContext 上下文){返回脚手架(应用栏:应用栏(标题:文本(小部件.标题),),正文:PreferencePage([PreferenceTitle('General'),偏好文本(PrefService.getString('android_listpref_selected') ??'',样式:TextStyle(颜色:Colors.grey),),PreferenceDialogLink('Android' 的ListPreference"',对话框:PreferenceDialog([无线电首选项('选择我!', 'select_1', 'android_listpref_selected'),无线电首选项('Hello World!', 'select_2', 'android_listpref_selected'),RadioPreference('Test', 'select_3', 'android_listpref_selected'),],title: '选择一个选项',cancelText: '取消',submitText: '保存',onlySaveOnSubmit: 真,),onPop: () =>设置状态((){}),),]),浮动动作按钮:浮动动作按钮(按下: () {导航器.push(语境,MaterialPageRoute(builder: (context) => SecondRoute()),);},孩子:图标(Icons.navigation),backgroundColor: Colors.green,),);}}class SecondRoute 扩展了 StatelessWidget {@覆盖小部件构建(BuildContext 上下文){print('${PrefService.getString('android_listpref_selected')}');返回脚手架(应用栏:应用栏(标题:文本(第二条路线"),),正文:列(孩子们:<小部件>[Text('${PrefService.getString('android_listpref_selected')}'),],),);}}
I am having a hard time retrieving the user preference in multiple RadioPreference
in a flutter project using the Preferences library https://pub.dev/packages/preferences#. I know how to use SharedPreferences
in Flutter but after following the example in the preference page, I can't seems to retrieve the actual user selection.
For example
PreferenceDialogLink(
'Android\'s "ListPreference"',
dialog: PreferenceDialog(
[
RadioPreference(
'Select me!', 'select_1', 'android_listpref_selected'),
RadioPreference(
'Hello World!', 'select_2', 'android_listpref_selected'),
RadioPreference('Test', 'select_3', 'android_listpref_selected'),
],
title: 'Select an option',
cancelText: 'Cancel',
submitText: 'Save',
onlySaveOnSubmit: true,
),
),
PreferenceDialogLink(
'Android\'s "MultiSelectListPreference"',
dialog: PreferenceDialog(
[
CheckboxPreference('A enabled', 'android_multilistpref_a'),
CheckboxPreference('B enabled', 'android_multilistpref_b'),
CheckboxPreference('C enabled', 'android_multilistpref_c'),
],
title: 'Select multiple options',
cancelText: 'Cancel',
submitText: 'Save',
onlySaveOnSubmit: true,
),
),
After leaving the Setting page, I tried using PrefService.getString('android_listpref_selected');
and other variations I keep getting null
.
Any help is appreciated.
You can copy paste run full code below
To make sure value is correctly saved , you can use PreferenceDialogLink
's onPop
to call setState
in Setting page
code snippet
PreferenceDialogLink(
'Android\'s "ListPreference"',
dialog: PreferenceDialog(
[
RadioPreference(
'Select me!', 'select_1', 'android_listpref_selected'),
RadioPreference(
'Hello World!', 'select_2', 'android_listpref_selected'),
RadioPreference('Test', 'select_3', 'android_listpref_selected'),
],
title: 'Select an option',
cancelText: 'Cancel',
submitText: 'Save',
onlySaveOnSubmit: true,
),
onPop: () => setState(() {}),
),
working demo
full code
import 'package:flutter/material.dart';
import 'package:preferences/preferences.dart';
import 'package:validators/validators.dart';
main() async {
WidgetsFlutterBinding.ensureInitialized();
await PrefService.init(prefix: 'pref_');
PrefService.setDefaultValues({
'user_description': 'This is my description!',
});
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Preferences Demo',
home: MyHomePage(title: 'Preferences Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: PreferencePage([
PreferenceTitle('General'),
PreferenceText(
PrefService.getString('android_listpref_selected') ?? '',
style: TextStyle(color: Colors.grey),
),
PreferenceDialogLink(
'Android\'s "ListPreference"',
dialog: PreferenceDialog(
[
RadioPreference(
'Select me!', 'select_1', 'android_listpref_selected'),
RadioPreference(
'Hello World!', 'select_2', 'android_listpref_selected'),
RadioPreference('Test', 'select_3', 'android_listpref_selected'),
],
title: 'Select an option',
cancelText: 'Cancel',
submitText: 'Save',
onlySaveOnSubmit: true,
),
onPop: () => setState(() {}),
),
]),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondRoute()),
);
},
child: Icon(Icons.navigation),
backgroundColor: Colors.green,
),
);
}
}
class SecondRoute extends StatelessWidget {
@override
Widget build(BuildContext context) {
print('${PrefService.getString('android_listpref_selected')}');
return Scaffold(
appBar: AppBar(
title: Text("Second Route"),
),
body: Column(
children: <Widget>[
Text('${PrefService.getString('android_listpref_selected')}'),
],
),
);
}
}
这篇关于如何在 Flutter 中的 Preferences 中检索 RadioPreference、CheckPreference 值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!