java - 如何修复以下_CastError被抛出构建:类型'Future' 不是类型 'List 的子类型' 在类型转换中
问题描述
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'UI_Tool/size_fit.dart';
class Gallery extends StatefulWidget {
@override
_GalleryState createState() => _GalleryState();
}
class _GalleryState extends State<Gallery> {
pic() async {
var url = "http://120.76.247.131:8081/findAllImages";
var response = await http.get(Uri.parse(url));
return json.decode(response.body);
}
@override
void initState() {
super.initState();
pic();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Gallery'),
),
body: FutureBuilder(
future : pic(),
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? ListView.builder(
itemCount:2,
itemBuilder: (context, index) {
List list = pic() as List;
return Card(
child: ListTile(
title: Container(
width: 100,
height: 100,
child: Image.network(
"http://120.76.247.131:8081/findAllImages/%7Blist[index][%22image%22]%7D%22)"
),
),
));
})
: Center(
child: CircularProgressIndicator(),
);
},
),
);
}
}
我曾试图在未来添加,但它并没有解决问题。此外,itemcount 有问题,所以我留下了一个数字而不是添加 snapshot.data!.length(),因为我不确定为什么 itemcount 的 snapshot.data!.length() 有错误。
解决方案
这是完整的工作代码。
起初因为 pic() 返回 Future,你需要使用 'await' 或 'then' 来获得响应。
https://dart.dev/codelabs/async-await
因此,以下句子会导致您提供的错误。
但是因为在这种情况下没有必要,所以我摆脱了这个。
List list = pic() as List;
如果你想使用 pic() 方法,只需像下面这样调用。
(但在这种情况下,你不能这样打电话。)
List list = await pic()
您已经使用过“FutureBuilder”,无需再次调用 pic()。
如果 snapdata 有数据,您只需使用 snapdata 的数据。
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() {
print('onStart');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Gallery(),
);
}
}
class Gallery extends StatefulWidget {
@override
_GalleryState createState() => _GalleryState();
}
class _GalleryState extends State<Gallery> {
pic() async {
var url = "http://120.76.247.131:8081/findAllImages";
var response = await http.get(Uri.parse(url));
return json.decode(response.body);
}
@override
void initState() {
super.initState();
pic();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Gallery'),
),
body: FutureBuilder(
future: pic(),
builder: (context, snapshot) {
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? ListView.builder(
itemCount: (snapshot.data! as Map)['data'].length,
itemBuilder: (context, index) {
// List list = pic() as List;
print((snapshot.data! as Map)['data'][index]);
return Card(
child: ListTile(
title: Container(
width: 100,
height: 100,
child: Image.network(
(snapshot.data! as Map)['data'][index]['image']),
),
));
})
: Center(
child: CircularProgressIndicator(),
);
},
),
);
}
}
推荐阅读
- sql - 如何在sql查询中将时区更改为MST?
- java - 随着时间的推移,休眠速度变慢
- caching - 我们可以将来自航班优惠搜索 API 的数据存储在本地数据库中以实现快速性能吗?
- kubernetes-helm - 如何使用 helm 和路径“/loki”而不是路径“/”安装 loki?
- php - 从PHP中的两个stings之间获取数据
- xamarin - 选择选择器项目时显示表格信息
- r - 在为 R 中的向量的每个值应用函数之后,创建一个返回因子列表的函数
- html - 将 css 样式表应用于特定的 div
- tensorflow - Tensorflow - 分配器(GPU_0_bfc)试图分配内存不足
- scala - 如何在 scala sbt 中使用来自 azure devops 的 maven 工件