我想从JSON格式的SharedPreferences中获取用户数据。每当我想在屏幕上显示此数据时,它将在屏幕上显示,但在控制台中显示此错误“方法'[]'在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']}'),
),
),
],
)
),
);
}
}
答案 0 :(得分:0)
是的,发生这种情况是因为第一次渲染窗口小部件时,您显示userData
为空,因为您没有初始化userData
变量。
因此,您可以像这样从头开始对其进行初始化
var userData = { "id": 0 };
或者您可以设置条件userData
是否为空
Text(userData != null ? "${userData['id']}" : "0")
但是随后,您调用setState
,它将重建您的小部件,并且userData
不再是null
,因为您是从SharedPreferences获取用户数据的。