Flutter 我想从api获取用户数据,但它显示为空
我在每个索引中调用提供者,如果它为null,但仍然有null错误,我给它一个初始值 (所有数据显示在控制台中,但不在应用程序中) 错误消息Flutter 我想从api获取用户数据,但它显示为空,flutter,Flutter,我在每个索引中调用提供者,如果它为null,但仍然有null错误,我给它一个初始值 (所有数据显示在控制台中,但不在应用程序中) 错误消息 The getter 'name' was called on null. Receiver: null Tried calling: name 这是我在每个索引中存储用户数据的配置文件代码 Expanded( child: Text(
The getter 'name' was called on null.
Receiver: null
Tried calling: name
这是我在每个索引中存储用户数据的配置文件代码
Expanded(
child: Text(
userProvider.user.name==null?'':userProvider.user.name ,
),
),
),
index == 1
? Padding(
padding:
const EdgeInsets.all(16),
child: Container(
child: Text(
userProvider.user.email== null? '' :userProvider.user.email,
),
),
)
: index == 3
? Padding(
padding:
const EdgeInsets.all(
16),
child: Container(
child: Text(
userProvider.user.phone== null? '' :userProvider.user.phone,
),
),
)
这是用于登录的用户提供程序
Future<dynamic> login(String email, String password) async {
final Map<String, dynamic> body = {'email': email, 'password': password};
_isLoading = true;
notifyListeners();
print('Starting request');
http.Response response = await http.post(Environment.userLogin,
body: json.encode(body), headers: Environment.requestHeader);
print('Completed request');
print('user login response : ${response.body}');
Map<String, dynamic> res = json.decode(response.body);
var results;
if (res['code'] == 200) {
// login successful
_user = User.fromJson(res['message']);
results = true;
} else {
print(res['error']);
// login failed;
results =
FailedRequest(code: 400, message: res['error'], status: false);
}
_isLoading = false;
notifyListeners();
return results;
}
未来登录(字符串电子邮件、字符串密码)异步{
最终映射体={'email':email,'password':password};
_isLoading=true;
notifyListeners();
打印(“启动请求”);
http.Response-Response=wait http.post(Environment.userLogin,
body:json.encode(body),headers:Environment.requestHeader);
打印(“已完成的请求”);
打印('用户登录响应:${response.body}');
Map res=json.decode(response.body);
var结果;
如果(res['code']==200){
//登录成功
_user=user.fromJson(res['message']);
结果=真;
}否则{
打印(res['error']);
//登录失败;
结果=
FailedRequest(代码:400,消息:res['error'],状态:false);
}
_isLoading=false;
notifyListeners();
返回结果;
}
您的登录方法返回结果,而不是_user或res.这是我在登录屏幕中的功能,因此如果我将结果替换为res,问题将结束吗?signIn()异步{await userProvider.login(_userNameController.text,_passwordController.text);Navigator.pushReplacement(widget._上下文,MaterialPageRoute(builder:(context)=>BottomTabScreen());假设该值在response.body中,那么您需要做的是返回res,或者可以执行类似于\u userData=User.fromJson(res[您的\u NAMED\u KEY\u包含\u CORRECT\u属性])的操作。
然后返回\u userData