如何在Flutter的首选项中检索RadioPreference和CheckPreference值

问题描述 投票:0回答:1

我很难使用首选项库RadioPreference来检索Flutter项目中多个https://pub.dev/packages/preferences#中的用户首选项。我知道如何在Flutter中使用SharedPreferences,但是按照首选项页面中的示例进行操作之后,我似乎无法检索到实际的用户选择。

例如

 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。任何帮助表示赞赏。

flutter sharedpreferences preferences
1个回答
0
投票

您可以在下面复制粘贴运行完整代码要确保正确保存值,可以在设置页面中使用PreferenceDialogLinkonPop调用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')}'),
        ],
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.