http - 在 null 上调用了 getter 'codeUnits'
问题描述
这真的很简单,但我找不到问题的原因。我有 2 个有状态的小部件 A 和 B,在小部件 A 的 init 函数中,我正在调用网络调用并获取 api 响应并呈现最新数据。在 B 中,我填写表格并推送到服务器,在成功将数据发布到服务器后,我调用了小部件 A 来呈现最新数据。
Navigator.pushNamed(context, 'A');
现在问题是一切正常,但是当我移动widetA时数据更新到服务器后,我的网络调用返回 null 。
它适用的情况。1)如果我不调用小部件 B 中的 sentPetPost 函数,并从 B 移动到 A,那么它工作正常。
2)来自 Postman api 工作正常,多次调用没有问题,我每次都得到响应。
3)http调用的空实例没有错误,问题只是响应是空的init函数的代码A
if(await utiles.isNetworkAvailbale())
{
model.getPostList(10, 1, 1, "", "token");
model.getNewsList(10, 1, 1, "", "token");
model.getEventsList(10, 1, 1, "", "token");
model.getPetsList(35, 0, Provider.of<User>(context).id.toInt(), "token");
print("====================================================");
}else{
isNetworkAvailable=false;
}
更新数据后从小部件 B 移动到 A。
sendingPetPost(
endPOINT,
widget.petDataImg,
widget.isImgAdded)
.whenComplete(() {
Navigator.pushNamed(context, 'homeview');
});
API 调用
Future<List<Post>> getPostList(
int pageSize, int pageNo, int cateId, String search, token) async {
var posts = List<Post>();
var response;
print('$ENDPOINT/List?Type=blogs&PageNo=$pageNo&PageSize=$pageSize&Search');
try {
response = await client.get(
//'$ENDPOINT/Data?PageSize=$pageSize&PageNo=$pageNo&nCategorieID=$cateId&Search=$search',
'$ENDPOINT/List?Type=Blogs&PageNo=$pageNo&PageSize=$pageSize&Search',
headers: headers);
} catch (e) {
print("error" + e.toString());
}
if (response.statusCode == 200) {
// parse into List
print("post =>> data received");
var parsed = json.decode(response.body) as List<dynamic>;
// loop and convert each item to Post
for (var post in parsed) {
posts.add(Post.fromJson(post));
}
return posts;
}
return null;
}
错误
errorNoSuchMethodError: The getter 'codeUnits' was called on null.
I/flutter ( 7630): Receiver: null
I/flutter ( 7630): Tried calling: codeUnits
E/flutter ( 7630): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The getter 'statusCode' was called on null.
E/flutter ( 7630): Receiver: null
E/flutter ( 7630): Tried calling: statusCode
更新
太奇怪了,我将标题放在函数中,现在它可以工作了,
Future<String> sendingPetPost(
String _endpoint, Map<String, dynamic> map, bool isIm) async {
/// if we make _headers gloable it create exception (same exception which is described above), but if we put _headers inside the fucntion like this, then it works.
Map<String, String> _headers = {
'content-type': 'application/json',
'accept': 'application/json',
'authorization':
'Basic ' + base64Encode(utf8.encode('Sau***:Sa*****'))
};
Dio dio = Dio();
try {
FormData formData = FormData.fromMap({
"pet_image": await MultipartFile.fromFile(
map['path'],
filename: map['name'],
)
});
Response response = await dio.post("$ENDPOINT/AddPet?$_endpoint",
data: formData, options: Options(headers: _headers));
return json.decode(response.data)['message'];
} on SocketException {
throw Failure(UIHelper.NO_INTERNET_EXCEP);
}
}
解决方案
推荐阅读
- python - 无法在 Pycharm 中显示 DataFrame?
- swift - 如何在 Cloudkit 中创建新的共享记录而不是父级的所有者?
- apache-spark - 获取广播值失败
- react-native-snap-carousel - 与 react-native-snap-carousel 中的水平滚动相关的问题
- jboss - Jboss Vault 有 java API 吗?
- c# - 如何有效地读取我的 C# 服务的 Visual Studio 2019 内存快照?
- python - 使用 Python 同时为列表中的每个项目运行一个函数
- c - 如何读取多个 ADC 输入并在 C 中为 STM32F4 打印
- delphi - 未找到 FireDacFBDriver
- node.js - express-rate-limit - 捕获消息