方法'[]'在null上被调用。接收方:null尝试调用:[](“ id”)

时间:2020-09-02 09:44:24

标签: json flutter

我想从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']}'),
                ),
              ),
            ],
          )
      ),
    );
  }
}

this is the error show in console

this will display the id but error is still in console

1 个答案:

答案 0 :(得分:0)

是的,发生这种情况是因为第一次渲染窗口小部件时,您显示userData为空,因为您没有初始化userData变量。 因此,您可以像这样从头开始对其进行初始化

var userData = { "id": 0 };

或者您可以设置条件userData是否为空

Text(userData != null ? "${userData['id']}" : "0")

但是随后,您调用setState,它将重建您的小部件,并且userData不再是null,因为您是从SharedPreferences获取用户数据的。