flutter - 有没有办法将 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);
}
)
)
解决方案
您可以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();
}
}));
推荐阅读
- python - 是否有命令行工具可以自动设置我的 python 包并将其上传到 PyPi?
- docker - 为什么在 docker build 命令中使用 -f
- javascript - 将数据传递给与任何组件无关的纯 HTML 模板文件
- ansible - 无法使用 ansible-playbook 更新 xml 元素值
- javascript - 当传递返回 es6 字符串的函数时,Angular - ngStyle 返回 [object Object]
- ios - NSUserDefault Value 发现 nil 并杀死应用程序
- r - 通过相当讨厌的大型空间多边形数据框裁剪表面多边形
- java - 使用 Google SafetyNet 检查设备根状态
- c++ - bash:./main:无法执行二进制文件:执行格式错误
- java - Blackboard 服务器 - 重启问题