getter在flutter中的null上调用会显示错误屏幕

时间:2020-02-10 10:13:22

标签: user-interface flutter dart error-handling null

我有一个登录名和登录后的更新配置文件屏幕。在这里,我使用genesis方法设置用户个人资料。我面临着奇怪的问题。大多数时候,我会看到以下屏幕,其中包含用户信息。特定的列是gender,在null上被调用是错误。

enter image description here


//store user data
      _user = new UserModel(
        id: data['collection']['userData']['id'].toString(),
        name: data['collection']['userData']['name'],
        email: data['collection']['userData']['email'],
        phone: data['collection']['userData']['phone_number'].toString(),
        avatar: data['collection']['userData']['avatar'],
        age: data['collection']['userData']['age'].toString(),
        gender: data['collection']['userData']['gender'].toUpperCase().toString() ?? 'MALE',
        totalscore: 100,
        // totalscore: data['collection']['userData']['total_sessions_count'],
        totaldays: data['collection']['userData']['total_session_by_days_count'],
      );

及以上是genesis方法中的代码,用于在本地存储数据。

用户profile update screen代码中的

如下:


Widget build(BuildContext context) {
     final userProvider =  Provider.of<Genesis>(context, listen: false);
     _user = userProvider.user;
     print('------------------------------------');
     print(_user);
     print('------------------------------------');
    if(_firsTime){
      setState(() {
        _gender = _user.gender.toUpperCase() ?? _gender;
        _nameController.text = _user.name;
        _emailController.text = _user.email;
        _ageController.text = _user.age;
        _phoneController.text = _user.phone;
        _avatar = _user.avatar ?? 'https://placehold.it/200x200';
        _firsTime = false;
      });
    }
}

what is the issue here ?


2 个答案:

答案 0 :(得分:0)

从错误消息中可以很明显地看出,您正在调用null上的“ gender”。

在访问_user的属性之前,先检查其是否为空。

答案 1 :(得分:0)

您可以尝试

_gender = _user?.gender?.toUpperCase() ?? _gender;