使用 flutter_settings_screen 从另一个页面检索存储的共享首选项值

retrieve stored shared preference value from another page with flutter_settings_screen

我正在使用这个插件 flutter_settings_screen 但无法弄清楚如何从另一个页面获取存储值。我应该使用 Settings.getValue<bool>('key_wifi', false) 从 "AppSettings" 页面

检索 key_wifi

这是我处理的完整简单代码:

import 'package:draft/app_settings.dart';
import 'package:flutter/material.dart';
import 'package:flutter_settings_screens/flutter_settings_screens.dart';

final bool isWifiEnabled = Settings.getValue<bool>('key_wifi', false);

void main() {
  initSettings();
  runApp(MyApp());
}

void initSettings() {
  SharePreferenceCache spCache = SharePreferenceCache()
    ..init();
  Settings.init(cacheProvider: spCache);
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MyHomePage(title: 'Flutter Demo Home Page');
  }
}

class MyHomePage extends StatefulWidget {
  final String title;

  const MyHomePage({Key key, this.title}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App Settings Demo',
      theme: ThemeData.dark(),
      home: Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(
          child: Column(
            children: <Widget>[
              isWifiEnabled? Text("Wifi is ON") : Text("Wifi is OFF"),
              RaisedButton(
                child: Text("Open Settings"),
                onPressed: () {
                  Navigator.push(context, MaterialPageRoute(
                builder: (context) => AppSettings()));
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class AppSettings extends StatefulWidget {
  @override
  _AppSettingsState createState() => _AppSettingsState();
}

String keywifi = 'keywifi';

class _AppSettingsState extends State<AppSettings> {

  final bool isWifiEnabled = Settings.getValue<bool>(keywifi, false);

  @override
  Widget build(BuildContext context) {
    return Container(
      child: SettingsScreen(
        title: "Application Settings",
        children: [
          SettingsGroup(
            title: 'Single Choice Settings',
            children: <Widget>[
              SwitchSettingsTile(
                settingKey: 'key_wifi',
                title: 'Wi-Fi',
                enabledLabel: 'Enabled',
                disabledLabel: 'Disabled',
                leading: Icon(Icons.wifi),
                onChange: (value) {
                  debugPrint('keywifi: $value');
                },
              ),
            ],
          ),
        ],
      ),
    );
  }
}

您可以复制粘贴运行下面的完整代码
第 1 步:您需要 await initSettings()
第 2 步:您需要 await spCache.init();

Future<void> initSettings() async {
      SharePreferenceCache spCache = SharePreferenceCache();
      await spCache.init();
      await Settings.init(cacheProvider: spCache);
    }

第 3 步:直接使用 Settings.getValue

Settings.getValue<bool>('key_wifi', false)
                ? Text("Wifi is ON")
                : Text("Wifi is OFF"),

第 4 步:await Navigator.pushsetState

onPressed: () async {
                await Navigator.push(context,
                    MaterialPageRoute(builder: (context) => AppSettings()));
                setState(() {});

第 5 步:打字错误 String keywifi = 'keywifi'; 将 'keywifi' 更改为 'key_wifi'

工作演示

完整代码

//import 'package:draft/app_settings.dart';
import 'package:flutter/material.dart';
import 'package:flutter_settings_screens/flutter_settings_screens.dart';

//final bool isWifiEnabled = Settings.getValue<bool>('key_wifi', false) ?? false;

Future<void> main() async {
  await initSettings();

  runApp(MyApp());
}

Future<void> initSettings() async {
  SharePreferenceCache spCache = SharePreferenceCache();
  await spCache.init();
  await Settings.init(cacheProvider: spCache);
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'App Settings Demo',
        theme: ThemeData.dark(),
        home: MyHomePage(title: 'Flutter Demo Home Page'));
  }
}

class MyHomePage extends StatefulWidget {
  final String title;

  const MyHomePage({Key key, this.title}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          children: <Widget>[
            Settings.getValue<bool>('key_wifi', false)
                ? Text("Wifi is ON")
                : Text("Wifi is OFF"),
            RaisedButton(
              child: Text("Open Settings"),
              onPressed: () async {
                await Navigator.push(context,
                    MaterialPageRoute(builder: (context) => AppSettings()));
                setState(() {});
              },
            ),
          ],
        ),
      ),
    );
  }
}

class AppSettings extends StatefulWidget {
  @override
  _AppSettingsState createState() => _AppSettingsState();
}

String keywifi = 'key_wifi';

class _AppSettingsState extends State<AppSettings> {
  final bool isWifiEnabled = Settings.getValue<bool>(keywifi, false);
  @override
  Widget build(BuildContext context) {
    return Container(
      child: SettingsScreen(
        title: "Application Settings",
        children: [
          SettingsGroup(
            title: 'Single Choice Settings',
            children: <Widget>[
              SwitchSettingsTile(
                settingKey: 'key_wifi',
                title: 'Wi-Fi',
                enabledLabel: 'Enabled',
                disabledLabel: 'Disabled',
                leading: Icon(Icons.wifi),
                onChange: (value) {
                  debugPrint('keywifi: $value');
                },
              ),
            ],
          ),
        ],
      ),
    );
  }
}