我正在尝试从我的服务器获取用户的货币。到目前为止,我能够做到这一点,但问题是每次重建应用程序时,数据都会自行重建。我试图通过这种方式解决这个问题:
Future<dynamic> userDataFuture;
ApiService apiService;
@override
void initState() {
userDataFuture = apiService.getUserData();
super.initState();
}
但是失败了,因为它给了我一个错误提示:
<块引用>'getUserData' 方法在 null 上被调用。接收者:null 尝试调用:getUserData()
这是我的ApiService类
Future getUserData() async {
String token = await AuthProvider().getToken();
String userID = await AuthProvider().getUserId();
final response = await Dio().get(
'$apiUrl/$userID',
options: Options(headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $token',
}),
);
if (response.statusCode == 200) {
return response.data;
} else {
throw Exception('Failed to load data');
}
}
<块引用>
这是我的用户界面,我想在其中显示用户的货币:
child: Center(
child: FutureBuilder(
future: userDataFuture,
builder:
(BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError) {
return Center(
child: Text(
"Something wrong with message: ${snapshot.error.toString()}"),
);
} else if (snapshot.connectionState ==
ConnectionState.done) {
return Text(
snapshot.data[
'currency'], // This Should Change Depending in Settings of the User
style: TextStyle(
fontSize:
(device.localWidth * .1) * .43,
fontWeight: FontWeight.w500,
color: kLightTextColor));
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
// ),
),
),
答案 0 :(得分:1)
您在未初始化的 getUserData()
对象上调用 ApiService
- 即。空。
代替这个
ApiService apiService;
其实就是这样初始化
final apiService = ApiService();
这将消除您的空错误。您也可以将 apiService.getUserData()
传递到您的 FutureBuilder
中,然后完全摆脱 userDataFuture
对象。
答案 1 :(得分:0)
首先你必须使用await,这里像这样
userDataFuture = await apiService.getUserData();
第二,你必须像这样初始化你的 apiService 变量:
ApiService apiService = new ApiService();
第三,改变你的 getUserData 返回一些数据,它是 void 函数。
第四个你必须使用这样的想法:
setState(() {
userDateFuture = await apiService.getUserData();
});
希望能帮上忙。