json - 在 null 上调用了方法“[]”。接收方:null 尝试调用:[]("id")
问题描述
我想从 SharedPreferences 以 json 格式获取用户数据。每当我想在屏幕上显示此数据时,它都会显示在屏幕上,但在控制台中会显示此错误“方法'[]'在 null 上调用。接收方:null 尝试调用:”。此代码抛出错误 ${userData['id']}
class _ProfileState extends State<Profile> {
var userData;
void initState(){
getUserData();
super.initState();
}
void getUserData() async{
SharedPreferences localStorage = await SharedPreferences.getInstance();
var userJson = localStorage.getString('user');
var user = json.decode(userJson);
setState(() {
userData = user;
});
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Center(
child: Text("Profile"),
),
actions: <Widget>[LoginPopup()],
),
drawer: AppDrawer(),
body:Padding(
padding: EdgeInsets.all(10),
child: ListView(
children: [
Container(
child: Center(
child: Text('${userData['id']}'),
),
),
],
)
),
);
}
}
解决方案
是的,发生这种情况是因为第一次渲染小部件时,userData
由于没有初始化userData
变量,因此显示为 null。所以你可以像这样从一开始就初始化它
var userData = { "id": 0 };
或者你可以设置一个条件 if userData
is null 像这样
Text(userData != null ? "${userData['id']}" : "0")
但是随后,您调用setState
它,它将重建您的小部件,并且userData
不再null
是因为您从 SharedPreferences 获取用户数据。
推荐阅读
- python - _tkinter.TclError:图像“.64485752”不存在
- python - 如何使用多处理并行处理 OpenCV 的图像?
- c# - 如何在 C# 中获取 Active Directory 的类列表
- angular - Angular:如何使用模板引用变量来调用子方法?
- c++ - fprintf 不打印到文件,当文件指针在别处声明时
- android - 无法在设备上执行 shell 命令“getprop,dev.bootcomplete”:Android 错误
- javascript - 创建一个链接以跳转到页面的特定部分不起作用
- postgresql - 如何使用 pg_dump/pg_restore 更新数据库?
- python - 了解 torch.nn.Parameter
- mysql - MySQL 等价于 MATCH 上的 MERGE