gpt4 book ai didi

flutter - 类型 'String' 不是类型“Widget”的子类型?在 Dart 中

转载 作者:行者123 更新时间:2023-12-02 01:24:56 24 4
gpt4 key购买 nike

我是 Flutter 的新手。我做了一个 flutter 项目,它从 API 获取数据并将它们显示在 ListView 中。如果 snapShot 中没有数据,则会显示加载屏幕。

我在修复了一些小错误后运行程序时出现错误。

错误:类型“String”不是类型“Widget”的子类型?

enter image description here

我的代码:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class DataFromAPI extends StatefulWidget {
const DataFromAPI({Key? key}) : super(key: key);

@override
State<DataFromAPI> createState() => _DataFromAPIState();
}

class _DataFromAPIState extends State<DataFromAPI> {

getUserData() async{
var response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/users'));
var jsonData = jsonDecode(response.body);
print(response.body);
List<User> users = [];

for(var u in jsonData){
User user = User(u['name'],u['email'],u['username']);
users.add(user);
}
//print(users.length);
return users;
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Get Data From API'),
),
body: Container(
child: Card(
child: FutureBuilder(
future: getUserData(),
builder: (context, AsyncSnapshot snapShot){
if(snapShot.data == null){
return Container(child: Center(child: Text('Loading'),),);
}else{
return ListView.builder(
itemCount: snapShot.data.length,
itemBuilder: (context, i){
return ListTile(title: snapShot.data[i].name);
});
}
},
),
))
);
}
}

class User{
final String name, email, userName;
User(this.name, this.email, this.userName);
}

控制台输出:

Syncing files to device sdk gphone64 x86 64...
Reloaded 0 libraries in 506ms (compile: 12 ms, reload: 0 ms, reassemble: 433 ms).
D/EGL_emulation( 6751): app_time_stats: avg=8895.54ms min=975.35ms max=16815.74ms count=2

======== Exception caught by widgets library =======================================================
The following _TypeError was thrown building:
type 'String' is not a subtype of type 'Widget?'

最佳答案

您的错误来自于您正在尝试创建一个 ListTile 小部件,并且作为标题您正在传递一个 String

但是如果你看一下 documentation对于 ListTile,您可以看到它期望标题是一个文本小部件:

Container(
color: Colors.green,
child: const Material(
child: ListTile(
title: Text('ListTile with red background'),
tileColor: Colors.red,
),
),
)

因此您需要将代码更改为:

 @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Get Data From API'),
),
body: Container(
child: Card(
child: FutureBuilder(
future: getUserData(),
builder: (context, AsyncSnapshot snapShot){
if(snapShot.data == null){
return Container(child: Center(child: Text('Loading'),),);
}else{
return ListView.builder(
itemCount: snapShot.data.length,
itemBuilder: (context, i){
return ListTile(title: const Text(snapShot.data[i].name)); //// <---------------------
});
}
},
),
))
);
}

关于flutter - 类型 'String' 不是类型“Widget”的子类型?在 Dart 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74948446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com