未处理的异常:'String' 类型不是'index' 的'int' 类型的子类型问题 Dart 和颤振

Posted

技术标签:

【中文标题】未处理的异常:\'String\' 类型不是\'index\' 的\'int\' 类型的子类型问题 Dart 和颤振【英文标题】:Unhandled Exception: type 'String' is not a subtype of type 'int' of 'index' Problem Dart & flutter未处理的异常:'String' 类型不是'index' 的'int' 类型的子类型问题 Dart 和颤振 【发布时间】:2020-03-07 23:23:32 【问题描述】:

我有这个变量问题 这是我的getdata 函数

Future <List <Deal>> getData() async


String myUrl = "http://10.25.20.27:5000/api/all";
var response = await http.get(myUrl,
    headers: 
      'Accept':'application/json',

    );

var jsonData = json.decode(response.body);

List<Deal> deals =[];

var u;

for( u in jsonData)

  Deal deal = Deal(u["id"],u["name"],u["adress"],u["photo"],u["Description"],u["discount"]);




return deals;

我得到了这个错误

正在执行热重载... 在 902 毫秒内重新加载了 594 个库中的 14 个。 E/flutter(4211):[错误:flutter/lib/ui/ui_dart_state.cc(148)]未处理的异常:类型'String'不是'index'类型'int'的子类型 E/flutter (4211): #0 DatabaseHelper.getData (package:flutter_app/databasehelper.dart:116:25) E/颤振(4211): E/颤振(4211):#1 _HomeePageState.build。 (包:flutter_app/homee_page.dart:100:80) E/flutter (4211): #2 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:654:14) E/颤振(4211):#3 _InkResponseState.build。 (包:flutter/src/material/ink_well.dart:729:32) E/flutter(4211):#4 GestureRecognizer.invokeCallback(包:flutter/src/gestures/recognizer.dart:182:24) E/flutter (4211): #5 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:365:11) E/flutter (4211): #6 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:275:7) E/flutter (4211): #7 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:455:9)

【问题讨论】:

尝试打印 u 变量以查看里面的内容:print(u); 您能否分享响应 JSON 和 Deal 类以便更好地理解问题? 当我打印 ui 时得到 null 和 thisi response.body [[id: 1, name: adresse Marrakech, adress: guéliz, photo: , Description: C'est un endroit zwiiin, 折扣: 30 , id: 2, name: Bogato, adress: guéliz, photo: , Description: bniiinnn, discount: Offres ]] 所以你的意思是ufor( u in jsonData) 循环中为空? 这是整个循环:for(u in jsonData) Deal deal = Deal(u["id"],u["name"],u["adress"],u["照片"],u["描述"],u["折扣"]);交易。添加(交易); 【参考方案1】:

我认为你可以像下面这样创建“交易”类:-

class Deal 
  String id;
  String name;
  String adress;
  String photo;
  String Description;
  String discount;

  Deal(
    this.id,
    this.name,
    this.adress,
    this.photo,
    this.Description,
    this.discount,
  );

然后你可以使用如下循环:-

var u;
for (u in jsonData) 
      Deal deal = Deal(
          u["id"].toString(),
          u["name"].toString(),
          u["adress"].toString(),
          u["photo"].toString(),
          u["Description"].toString(),
          u["discount"].toString());

【讨论】:

以上是关于未处理的异常:'String' 类型不是'index' 的'int' 类型的子类型问题 Dart 和颤振的主要内容,如果未能解决你的问题,请参考以下文章

未处理的异常:'String' 类型不是'index' 的'int' 类型的子类型问题 Dart 和颤振

未处理的异常:类型 'List<dynamic>' 不是类型 'Map<String, dynamic

未处理的异常:类型“bool”不是类型转换中“String”类型的子类型

未处理的异常:类型'List<dynamic>'不是'String'类型的子类型无法获取json数据[重复]

未处理的异常:类型 'List<dynamic>' 不是类型 'Map<String, dynamic>' 的子类型

未处理的异常:类型“int”不是 Flutter 应用程序中“String”类型的子类型