flutter - FutureBuilder 快照数据没有返回任何东西,为什么?
问题描述
试图通过 SharedPreferences 获取存储的数据但不起作用..
我的 main.dart :
Widget build(BuildContext context) {
return StreamProvider<User>.value(
value: AuthService().user,
child: FutureBuilder<String>(
future: SaadConstants.setValueFromLocal('app_lang','ar'),
builder: (BuildContext context, AsyncSnapshot<String> snapshot){
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body:Wrapper(),
),
);
}
),
);
}
我的包装:
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
if (user==null) {
return FutureBuilder(
future: SaadConstants.getValueFromLocal('app_lang'),
builder: (BuildContext contect , AsyncSnapshot<String> snapshot){
if (snapshot.hasData) {
return Text('has data');
}
else return Text('None');
}
);
}
else{
return Text('connect');
}
它返回这个小部件: Text('None') ..
我的 setValue 函数:
static Future<String> setValueFromLocal(String key, String value) async { // Async func to handle Futures easier; or use Future.then
SharedPreferences perfs = await SharedPreferences.getInstance();
perfs.setString(key.toString(),value.toString());
}
我的 getValue 函数:
static Future<String> getValueFromLocal(String key) async { // Async func to handle Futures easier; or use Future.then
SharedPreferences perfs = await SharedPreferences.getInstance();
return perfs.getString(key);
}
解决方案
试试这个,
return FutureBuilder(
future: SaadConstants.getValueFromLocal('app_lang'),
builder: (BuildContext contect, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return Center(child: CircularProgressIndicator());
else if (snapshot.hasData)
return Text("DATA: ${snapshot.data}");
else if (snapshot.hasError)
return Text("ERROR: ${snapshot.error}");
else
return Text('None');
}
);
你的 main.dart 也应该实现这些条件。
Widget build(BuildContext context) {
return StreamProvider<User>.value(
value: AuthService().user,
child: MaterialApp(
debugShowCheckedModeBanner: false,
home: FutureBuilder<String>(
future: SaadConstants.setValueFromLocal('app_lang', 'ar'),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return Center(child: CircularProgressIndicator());
else if (snapshot.hasError)
return Text("ERROR: ${snapshot.error}");
else
return Scaffold(
body: Wrapper(),
);
}
),
),
);
}
推荐阅读
- c# - Gitlab CI 错误:作业失败
- c# - 在 C# 中更改数据表中列的数据类型
- ios - UIScrollView contentInset 自动布局问题
- mysql - 网站中的 Sql 错误
- jmockit - @EJB 上的 JMockit 测试失败,持续查找
- multiprocessing - 在python中使用多处理删除文件
- sql - 仅当具有最新值的列“日期”具有另一列不为 NULL 时才检索行
- javascript - 输入自动完成不适用于标签和值
- blueprism - 控制室中的 Blueprism 进程看不到网页上的元素
- python - 为什么我在 python 中看到时区异常