代码之家  ›  专栏  ›  技术社区  ›  CanCoder

如何检索RadioPreference,在Flatter中的Preferences中检查Preference值

  •  0
  • CanCoder  · 技术社区  · 6 年前

    我很难在多个数据库中检索用户首选项 RadioPreference https://pub.dev/packages/preferences# . 我知道如何使用 SharedPreferences 在flatter中,但在遵循首选项页面中的示例之后,我似乎无法检索实际的用户选择。

    例如

     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,
          ),
        ),
    

    PrefService.getString('android_listpref_selected'); 还有其他我不断得到的变化 null .

    0 回复  |  直到 6 年前
        1
  •  0
  •   chunhunghan    6 年前

    您可以复制粘贴运行下面的完整代码
    PreferenceDialogLink onPop 召唤 setState 在设置页面中

    代码片段

    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(() {}),
            ),
    

    工作演示

    enter image description here

    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')}'),
            ],
          ),
        );
      }
    }
    
    推荐文章