首页 > 解决方案 > _TypeError(类型“字符串”不是“类别列表”类型的子类型)

问题描述

我正在尝试将我的数据库(MYSQL DATABASE)中的数据添加为 Json,我得到了这个错误,任何人都可以帮助我,因为我正在寻找解决问题的方法,但我找不到

    import 'package:flutter/material.dart';
import 'package:youtubeclone/pages/class/categores.dart';
import 'package:youtubeclone/pages/componets/appbarallproject.dart';
import 'package:youtubeclone/pages/componets/mydrawer.dart';
import 'dart:io';
import 'package:image_picker/image_picker.dart';
import '../class/dropdownmenuclass.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

class Upload extends StatefulWidget {
  @override
  _UploadState createState() => _UploadState();
}

class _UploadState extends State<Upload> {
  GlobalKey<ScaffoldState> _drawerKey = GlobalKey();

  CategoresList _selectedCategory2;
  List<CategoresList> listcategory = <CategoresList>[];

  Future<List<CategoresList>> getCategories() async {
    var url = "http://10.0.2.2/videoTube/chosecategories.php";
    var response = await http.get(url);
    var responsebody = jsonDecode(response.body);
    for (int i = 0; i < responsebody.length; i++) {
      listcategory.add(responsebody[i]['name']);
    }
  }

  @override
  void initState() {
    getCategories();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: _drawerKey,
      drawer: MyDrawer(),
      appBar: AppBarAllProject(drawerKey: _drawerKey),
      body: Container(
        child: Center(
          child: AnimatedContainer(
            duration: Duration(milliseconds: 600),
            curve: Curves.easeOutBack,
            width: MediaQuery.of(context).size.width - 40,
            height: 1000,
            child: Card(
              elevation: 5.0,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  DropdownButton<CategoresList>(
                    hint: Text("Select Categore"),
                    value: _selectedCategory2,
                    onChanged: (CategoresList catey) {
                      setState(() {
                        _selectedCategory2 = catey;
                      });
                    },
                    items: listcategory?.map((CategoresList categoreslist) {
                          return DropdownMenuItem<CategoresList>(
                            value: categoreslist,
                            child: Row(
                              children: <Widget>[
                                Text(
                                  categoreslist.name,
                                ),
                              ],
                            ),
                          );
                        })?.toList() ??
                        [],
                  ),
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }
}

这是我得到错误的函数我得到了错误特别是在行 listcategory.add(responsebody[i]['name'])

    Future<List<CategoresList>> getCategories() async {
    var url = "http://10.0.2.2/videoTube/chosecategories.php";
    var response = await http.get(url);
    var responsebody = jsonDecode(response.body);
    for (int i = 0; i < responsebody.length; i++) {
      listcategory.add(responsebody[i]['name']);
    }
  }

这个类CategoresList

    import 'package:flutter/material.dart';

class CategoresList {
  final name;

  CategoresList({this.name});
}

标签: flutterdart

解决方案


错误消息是不言自明的。您正在尝试将字符串添加到包含 CategoresList 类型的列表中。

在将其添加到 listcategory.add() 之前,从 responsebody[i]['name'] 创建一个新的 CategoresList;

var name = responsebody[i]['name'];
var category = CategoresList(name: name);
listcategory.add(category);


推荐阅读