【问题标题】:type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'RxList<dynamic>'类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'RxList<dynamic>' 的子类型
【发布时间】:2021-06-17 10:53:02
【问题描述】:

我遇到了类型问题,我没有做错什么,我正在尝试将数据存储在 GetX 控制器类中并使其可观察。

我的代码:-

import 'package:get/get.dart';
import '../Services/HttpService.dart';
import 'dart:convert';

class SelectedCardController extends GetxController{

var selectedProductList = List().obs;

@override
void onInit() async{
super.onInit();
getProductDetail();
}


selectedProduct() async {
try {
  HttpService httpService = HttpService();
  var response = await httpService.get('business', 'product', 'get', '6035de62bf7db17c5dfd9977');
  Map<dynamic, dynamic> decodedResponse = json.decode(response);
  print('res -----------------  $decodedResponse');
  print(selectedProductList.runtimeType);
if (decodedResponse['code'] == 200) selectedProductList = decodedResponse['content'];
  print("result ------ $selectedProductList");
} 
catch (e) {print(e);} 
}

感谢您提前提供的帮助

【问题讨论】:

  • 我认为这是因为您试图将_InternalLinkedHashMap&lt;String, dynamic&gt; 分配给RxList&lt;dynamic&gt;。试试if (decodedResponse['code'] == 200) selectedProductList = RxList.from(decodedResponse['content']);
  • 兄弟在尝试我得到这个之后:type '_InternalLinkedHashMap' is not a subtype of type 'Iterable'

标签: flutter dart flutter-getx


【解决方案1】:

首先,您尝试使用列表来转换原始 JSON 数据,但您应该使用地图。我的建议是您应该首先创建一个模型,以便将 JSON 数据转换为该模型的实例。查看 Flutter 文档以供参考:https://flutter.dev/docs/cookbook/networking/background-parsing#create-a-photo-class

有一个非常好的工具可以帮助您自动创建模型,只需粘贴 JSON 数据,它就会为您生成正确的模型:https://javiercbk.github.io/json_to_dart/

但是,如果你还在学习,我建议你现在尝试手动创建模型,这对练习很有好处。

完成此操作后,您只需将 var selectedProductList = decodedResponse['content']; 替换为 Content selectedProductList = Content.fromJson(decodedResponse['content']);

如果还是遇到类似的错误信息,也可以试试Content selectedProductList = Content.fromJson(Map.from(decodedResponse['content']));

【讨论】:

  • 感谢兄弟的帮助,但有人告诉我不要使用任何模型,这就是我选择这种方法的原因
【解决方案2】:

更改以下行:

 Map<dynamic, dynamic> decodedResponse = json.decode(response);

到这里:

 Map<String, dynamic> decodedResponse = json.decode(response);

【讨论】:

    【解决方案3】:

    终于成功了——感谢所有花时间在这个问题上的人

    import 'package:get/get.dart';
    import '../Services/HttpService.dart';
    import 'dart:convert';
    
    class SelectedCardController extends GetxController{
    
    var selectedProductList = Map().obs;
    
    @override
    void onInit() async{
    super.onInit();
    getProductDetail();
    }
    
    
      getProductDetail() async {
     try {
      HttpService httpService = HttpService();
      var response = await httpService.get('business', 'product','get',
      '6035de62bf7db17c5dfd9977');
      Map<String, dynamic> decodedResponse = json.decode(response);
      if (decodedResponse['code'] == 200) selectedProductList.value = 
     decodedResponse['content'] ;
      print("sdbcdbck--------------$selectedProductList");
     } 
     catch (e) {print(e);} 
     }
    

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 2021-01-30
      • 2020-07-03
      • 2019-04-03
      • 2021-01-13
      • 2020-11-30
      • 2022-11-11
      • 2022-07-21
      • 1970-01-01
      相关资源
      最近更新 更多