Flutter - 未处理的异常:类型“(dynamic)=> Null”不是“f”类型“(String,dynamic)=> void”的子类型

2024-03-04

不确定为什么我收到错误“未处理的异常:类型 '(dynamic) => Null' 不是类型 '(String,dynamic) => void' of 'f' 的子类型”。一切似乎都正确完成,但仍然出现错误

Json link: https://androidapp.factory2homes.com/api/get-shipping-address-by-user-id/3
class ShippingAddressPage extends StatefulWidget {
  @override
  _ShippingAddressPageState createState() => _ShippingAddressPageState();
}

class _ShippingAddressPageState extends State<ShippingAddressPage> {

  List<Shipping> _shippingAddressList = List<Shipping>();

 @override
 void initState() {
   super.initState();
   _getShippingAddressByUserId();
 }


 _getShippingAddressByUserId() async {
   SharedPreferences _prefs = await SharedPreferences.getInstance();
   int _userId = _prefs.getInt('userId');
   ShippingAddressService _shippingAddressService = ShippingAddressService();
   var result = await _shippingAddressService.getShippingAddressByUserId(_userId);
   var shipping = json.decode(result.body);
   shipping.forEach((shipping){
     var model = Shipping();
     model.id = shipping['id'];
     model.name = shipping['name'];
     model.address = shipping['address'];
     setState(() {
       _shippingAddressList.add(model);
     });
   });
 }
E/flutter (26002): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type '(dynamic) => Null' is not a subtype of type '(String, dynamic) => void' of 'f'
E/flutter (26002): #0      _ShippingAddressPageState._getShippingAddressByUserId (package:factory2homes/screens/shipping_address_page.dart:32:13)
E/flutter (26002): <asynchronous suspension>
E/flutter (26002): #1      _ShippingAddressPageState.initState (package:factory2homes/screens/shipping_address_page.dart:22:4)
class ShippingAddressService{
  Repository _repository;

  ShippingAddressService(){
    _repository = Repository();
  }

  getShippingAddressByUserId(int userId) async {
    return await _repository.httpGetById('get-shipping-address-by-user-id', userId);
  }

}

当我遇到这个问题时,问题是我从 API 收到的响应没有我的 Dart 模型所期望的形状。 让我给你举个例子,让你用你的Shipping class.

假设您的查询返回一个 JsonShipping像这样:

{0:{
  'id':'1',
  'name':'name',
  'address':'address'
  },
 1:{...},
}

现在这是not当您在此处定义模型时,您所期望的是什么:

var shipping = json.decode(result.body);
   shipping.forEach((shipping){
     var model = Shipping();
     model.id = shipping['id'];
     model.name = shipping['name'];
     model.address = shipping['address'];
     setState(() {
       _shippingAddressList.add(model);
     });

您期待的是这样的响应:

[{
  'id':'1',
  'name':'name',
  'address':'address'
  },
 {...},
]

因此,按照这个示例,如果我要循环遍历 API 响应正文,Dart 会抱怨,因为我正在访问“键”而不是“地图”;我认为这就是您面临的问题。我尝试检查您的 API,但链接已损坏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter - 未处理的异常:类型“(dynamic)=> Null”不是“f”类型“(String,dynamic)=> void”的子类型 的相关文章

随机推荐