首页 > 解决方案 > 使用 Flutter 使用 rest API 列出信息时出错

问题描述

我正在尝试列出屏幕上剩余的 API 中的信息。我有这个方法:

late List<MyModel> _listAll; // original list fetched from API
late List<MyModel> _displayList; 
.
.

void _ListTransaction() async {
    
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String token = prefs.getString("userToken") ?? "";

    dynamic data = await http.get(Uri.parse('....'), headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      'Authorization': '$token',
    });
    
    List<MyModel> listAll= [];

    for (var u in data) {
      MyModel myModel = MyModel.fromJson(u);
      print(myModel);
      listAll.add(myModel);
    }

    setState(() {
      _listAll = listAll;
      _displayList = _listAll ;
    });
  }

在这里我得到错误:

_TypeError(类型“_InternalLinkedHashMap<String, dynamic>”不是“Iterable”类型的子类型)

我也尝试过这种方法:

void _ListTransaction() async {

    SharedPreferences prefs = await SharedPreferences.getInstance();
    String token = prefs.getString("userToken") ?? "";

    dynamic data = await http.get(Uri.parse('....'), headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      'Authorization': '$token',
    });

   var list = json.decode(data.body);
    print(list);

    setState(() {
      _listAll = list;
      _displayedList = _petrolList;
    });
    
  }

但在这里我得到了错误:

_TypeError(类型 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'List' 的子类型)

你们可以帮我解决这个错误。我很感激任何评论!

更新 我也使用了这种方法,但无济于事!

这是我的 json.decode(data.body); 的结构 在此处输入图像描述

我的模型:

class TransactionModel {
  int? month;
  int? year;
  double? balanceFull;
  double? balanceMonth;
  ExpenseModel? expenseModel;
  RevenueModel? revenueModel; 

  TransactionModel();

  Transactions() {
    month = 00;
    year = 0000;
    balanceFull = 0;
    balanceMonth = 0;
  }

  TransactionModel.fromJson(Map<String, dynamic> json) {
    month = json['month'];
    year = json['year'];
    balanceFull = json['balanceFull'];
    balanceMonth = json['balanceMonth'];
    expenseModel = json['expenseModel'];
    revenueModel = json['revenueModel'];
  }

标签: flutterdart

解决方案


我认为错误在于_listAll是MyModel的类型列表,但是“setState”方法中的列表是Map<String, dynamic>

我希望能帮助你。


推荐阅读