类型'List <dynamic>'不是类型'List <subcategorydata>'的子类型

时间:2019-02-25 12:27:36

标签: flutter

我正在尝试将列表分配给对象列表,但这显示了上述异常。

List<SubCategoryData>categoryNames = new List<SubCategoryData>();
  List<String>categorieslist = [];
  bool isFirst=true;

  Future<SubCategoryModel>fetchCategories(BuildContext context) async {

    String url = "http://106.51.64.251:380/onnet_api/subcatListByCategory.php";

    var body = new Map<String,String>();
    body['publisherid']= 102.toString();
    body['tag'] = "category";
    body['subtag']= "list";
    body['parentId'] = 10.toString();

    http.Response res = await http.post(url,body: body);
    final categoryjsondata = json.decode(res.body);
    var map = Map<String,dynamic>.from(categoryjsondata);
    var categoryResponse = SubCategoryModel.fromJson(map);

    if(res.statusCode == 200){
      print('category Response: $categoryResponse');
      if(categoryResponse.status == 1){
        //final categoryModel = json.decode(res.body);
        categoryNames = categoryjsondata['data']as List;
        print('category data: $categoryNames');

      /*  for(var model in categorieslist){
          categoryNames.add(new SubCategoryData.fromJson(model));
        }*/
    /*    SharedPreferences prefs = await SharedPreferences.getInstance();
        print("cat List Size: $categories");
        prefs.setStringList("categorylist", categories);*/
        Navigator.push(context, MaterialPageRoute(builder: (context)=> ChewieDemo(imageData: images[0],
            categoryData:categoryNames.toList())));
      }
    }
  }

看到类别代码的代码,我试图将数据分配给它,然后显示异常。请帮我解决这个错误。 预先感谢。

3 个答案:

答案 0 :(得分:0)

尝试将您的代码更改为:

List<SubCategoryData> categoryNames = new ArrayList<>();

希望这能解决您的问题。

答案 1 :(得分:0)

替换以下内容:

categoryNames = categoryjsondata['data']as List;

作者

 for(var model in categoryData){
        categoryNames.add(new SubCategoryData.fromJson(model));
      }

因为第一个返回一个列表,第二个返回一个列表

答案 2 :(得分:0)

您的问题位于这里:

categoryNames = categoryjsondata['data']as List;

categoryNames已经定义和初始化,其类型为List<SubCategoryData>。在上面的行中,您尝试为其分配一个List<dynamic>。那是另一种类型,这就是错误的原因。如果将其分配给其他变量,则可以自由使用它:

final categoryNamesList = categoryjsondata['data'] as List;

顺便说一句,那么您不必在接下来的行中调用.toList(),因为此变量已经是列表。