получить сохраненное значение общего предпочтения с другой страницы с помощью flutter_settings_screen - PullRequest
0 голосов
/ 10 апреля 2020

я использую этот плагин flutter_settings_screen но не могу понять, как получить сохраненное значение с другой страницы. я должен использовать Settings.getValue<bool>('key_wifi', false) для получения key_wifi со страницы "AppSettings"

это полный простой код, над которым я работаю:

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 Ответ

1 голос
/ 10 апреля 2020

Вы можете скопировать и вставить полный код ниже
Шаг 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 diretcly

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

Шаг 4: await Navigator.push и setState

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

Шаг 5: опечатка String keywifi = 'keywifi'; измените «keywifi» на 'key_wifi'

рабочая демоверсия

enter image description here

полный код

//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');
                },
              ),
            ],
          ),
        ],
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...