首页 > 解决方案 > 有没有办法将 shared_preferences 与 country_list_pick (颤振)一起使用?

问题描述

我想在用户关闭应用程序后保存选项(所选国家/地区)。

这是国家/地区选择器代码

 Center(
  child: CountryListPick(
    appBar: AppBar(
      backgroundColor: Colors.blue,
      title: Text('Pick your country'),
    ),
    theme: CountryTheme(
      isShowFlag: true,
      isShowTitle: true,
      isShowCode: false,
      isDownIcon: true,
      showEnglishName: true,
    ),
    initialSelection: null,
    onChanged:(CountryCode code) {
      print(code.name);
      print(code.code);
      print(code.dialCode);
      print(code.flagUri);
    }
  )
)

标签: flutterdart

解决方案


您可以shared_preferences在选择国家/地区时保存国家/地区代码(如上面的@dumazy 评论 - 您不知道应用程序何时关闭,因此选择时保存国家/地区代码是明智的)。

Future<void> _saveCountry(String code) async {
  var prefs = await SharedPreferences.getInstance();
  prefs.setString('country', code);
}

Future<String> _getSavedCountry() async {
  var prefs = await SharedPreferences.getInstance();
  return prefs.getString('country');
}

然后,您可以在onChanged事件中保存国家代码...

                onChanged: (CountryCode code) async {
                  ...
                  await _saveCountry(code.code);
                }

请记住,shared_preferences读取和写入是异步的,因此您需要将小部件包装在 aFutureBuilder中以等待读取完成。

return Center(
    child: FutureBuilder<String>(
        future: _getSavedCountry(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return CountryListPick(...
               initialSelection: snapshot.data,);
          } else {
            return CircularProgressIndicator();
          }
        }));

推荐阅读