Flutter Dropdown:“字符串”类型不是“索引”的“ int”类型的子类型

时间:2020-06-13 05:47:32

标签: flutter dart

我试图在flutter中使用下拉列表,并且应该通过HTTP请求添加下拉值。

这是HTTP的代码。

Future<String> getData() async {
    try{ 
    var deviceid = '123';
      var dtgUid = '123';

      var body = { "uid" : dtgUid, "deviceid": deviceid};

       var response = await http.post(url, body: json.encode(body)).timeout(Duration(seconds: 15),
            onTimeout: (){
                    //  throw Exception();
              _showSnackBar(context,'Some issue with connectivity. Can not connect to server.',Colors.redAccent);
                      //or you can also
              return null;
            });

     if(response. statusCode == 200){
        final datafromdb = getNewsTypeFromJson(response.body);
        setState(() {
          _inProcess = false;
                        if(datafromdb.content.length == null){
                          count = 0;
                        }else{
                          count = datafromdb.content.length;
                        }

                         if(datafromdb.content.length > 0 && datafromdb.content[0].tagname != 'Empty'){
                        for (var i in datafromdb.content) {
                          print(i.tagname);
                          data.add(i.tagname);
                        }  
                      }else{
                        nodata = 'No Record Found';
                        _showSnackBar(context,nodata,Colors.redAccent);
                      }

        });
     }
       }catch(e){
       print("Exception Caught: $e");
    }


    }

这是JSONParse。

import 'dart:convert';

GetNewsType getNewsTypeFromJson(String str) => GetNewsType.fromJson(json.decode(str));

class GetNewsType {
    GetNewsType({
        this.content,
        this.success,
    });

    List<Content> content;
    bool success;

    factory GetNewsType.fromJson(Map<String, dynamic> json) => GetNewsType(
        content: List<Content>.from(json["content"].map((x) => Content.fromJson(x))),
        success: json["success"],
    );

}

class Content {
    Content({
        this.tagname,
    });

    String tagname;

    factory Content.fromJson(Map<String, dynamic> json) => Content(
       // tagname: json["tagname"],
        tagname: json == null ? 'Empty' : json["tagname"]
    );
}

这是下拉代码。

DropdownButton(
                        items: data.map((item) {
                          return DropdownMenuItem(
                            child: Text(item['tagname']),
                            value: item['tagname'].toString(),
                          );
                        }).toList(),
                        onChanged: (newVal) {
                          setState(() {
                            _mySelection = newVal;
                          });
                        },
                        value: _mySelection,
                      ),

当我运行该应用程序时,出现以下错误。我不明白。

type 'String' is not a subtype of type 'int' of 'index'

1 个答案:

答案 0 :(得分:1)

我还没有执行代码,但是错误消息和代码item['tagname']中的这一行看起来像List<String>一样被key之类的map访问。 由于在.map()中您拥有单个Content对象,因此像.一样使用item.tagname