android - 如何修复共享首选项在 Flutter 中返回空字符串?
问题描述
我正在使用共享首选项在 Flutter中存储和加载 Map 的值,但出现错误
The following assertion was thrown building UserPro(dirty):
A non-null String must be provided to a Text widget.
'package:flutter/src/widgets/text.dart':
Failed assertion: line 360 pos 10: 'data != null'
我当然知道Shared Preferences 返回一个 null String value,但我不明白为什么,因为我正在等待该值。以及如何解决它。我附上我的代码和这个问题供您参考
----存储 ------
void setUserValues() async{
SharedPreferences sharedPrefs = await SharedPreferences.getInstance();
currentUser.forEach((k,v)=>sharedPrefs.setString(k, v));
}
此处currentUser包含包含“姓名”、“电子邮件”等用户数据的地图。
----加载中 ------
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
SharedPreferences localStorage;
class UserPro extends StatelessWidget{
final currentUser;
String name;
UserPro({this.currentUser}){
name=localStorage.getString("Name");;
}
static Future init() async{
localStorage = await SharedPreferences.getInstance();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
body: Center(
child: Text(
name,
style: TextStyle(
fontSize: 15,
fontFamily: 'Berlin Sans FB',
fontWeight: FontWeight.bold,
),
),
),
);
}
}
解决方案
使用 FutureBuilder
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
//SharedPreferences localStorage;
class UserPro extends StatelessWidget{
final currentUser;
//String name;
UserPro({this.currentUser});
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
body: Center(
child: FutureBuilder<SharedPreferences>(
future: SharedPreferences.getInstance(),
builder: (context,snapshot){
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
return Text(
snapshot.data.getString("name"),
style: TextStyle(
fontSize: 15,
fontFamily: 'Berlin Sans FB',
fontWeight: FontWeight.bold,
),
),
},
),
),
);
}
}
推荐阅读
- python - 尝试追加时Python不断返回空白列表?
- python - 如何根据给定的用户输入让程序再次运行?
- spring-boot - Spring Async 获取当前 Executor
- unity3d - CS-Script 没有出现在添加组件搜索中?
- c++ - 如何以编程方式获取 Windows 命令行或 Windows 资源管理器的当前目录?
- javascript - 如何在调用 Apollo Graph QL Query 之前等待服务器响应?
- c++ - 如何反转邻接列表?
- css - 用于画廊的 CSS 网格 - 重复 15 个项目的选择器 - 并且 - 网格堆叠而不是在下方流动
- dax - 使用 PERCENTILEX.INC 进行异常值检测的 DAX 公式
- pyspark - 如何编写子字符串以获取从起始位置到结束的字符串