flutter - _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});
}
解决方案
错误消息是不言自明的。您正在尝试将字符串添加到包含 CategoresList 类型的列表中。
在将其添加到 listcategory.add() 之前,从 responsebody[i]['name'] 创建一个新的 CategoresList;
var name = responsebody[i]['name'];
var category = CategoresList(name: name);
listcategory.add(category);
推荐阅读
- selenium - 如何编写具有 ::before 和 ::after (selenium) 的 xpath
- python - 如何使用存储在列表中的列表名称来执行列表操作?
- powershell - powershell convert-tojson 没有给出最佳结果
- next.js - 如何在两个表之间建立关系并进行有效查询?
- c++ - 是否可以使用范围适配器将投影成员恢复为原始类对象?
- css - 是否可以将所有孩子及其后代与根网格对齐?
- javascript - onPageFisnished 中的 javascript 启动 Uncaught TypeError: Cannot set property 'value' of null in android webview
- http - 服务器修改请求内容时的 HTTP 响应
- python-3.x - 如何在 pytest 中断言两个具有模拟属性的 pydantic 模型相等?
- reactjs - 从 API 动态更改 SVG 内的图像