首页 > 解决方案 > 在 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']}'),
                ),
              ),
            ],
          )
      ),
    );
  }
}

这是控制台中显示的错误

这将显示 id 但错误仍在控制台中

标签: jsonflutter

解决方案


是的,发生这种情况是因为第一次渲染小部件时,userData由于没有初始化userData变量,因此显示为 null。所以你可以像这样从一开始就初始化它

var userData = { "id": 0 };

或者你可以设置一个条件 if userDatais null 像这样

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

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


推荐阅读