我正在尝试在FutureBuilder上使用Future.wait
,所以这是我的代码:
child: SafeArea(
child: FutureBuilder<List<ActiveTools.Data>>(
future: Future.wait([
MyToolsProvider()
.getChannelMe("df6b88b6-f47d-****"),
]),
builder: (ctx, AsyncSnapshot<List<ActiveTools.Data>> dataSnapshot) {
if (dataSnapshot.connectionState == ConnectionState.waiting) {
在MyToolsProvider().getChannelMe
方法中,我返回Future<List<ActiveTools.Data>>
:
import 'package:mobile_iotel/models/active_tools_model.dart'as ActiveTools;
Future<List<ActiveTools.Data>> getChannelMe(String auth) async {
Map<String, dynamic> header = {
'Content-Type': "application/json",...
};
try {
var result = await NetworkCLient()
.getRequest(url: '$URL/api/me', header: header);
debugPrint('result is $result');
if (result != null) {
var programsByActiveToolsModel =
ActiveTools.ProgramsByActiveToolsModel.fromJson(result);
if (programsByActiveToolsModel.responseCode == 200) {
return programsByActiveToolsModel.data;
} else
return null;
}
} catch (e) {
debugPrint('catch is $e');
}
}
但是在Future.wait
中,我遇到了这个错误:
元素类型future>不能分配给Future的列表类型
我的方法返回List<ActiveTools.Data>
,为什么会出现此错误?
答案 0 :(得分:0)
将ActiveTools.Data
更改为List<dynamic>
,并获得dataSnapshot.data
中的第一个元素,您应该找到期望的List<ActiveTools.Data>
。
child: SafeArea(
child: FutureBuilder<List<dynamic>>( // You might want to use List<List<ActiveTools.Data>>
future: Future.wait([
MyToolsProvider()
.getChannelMe("df6b88b6-f47d-****"),
]),
builder: (ctx, AsyncSnapshot<List<dynamic>> dataSnapshot) {
if (dataSnapshot.connectionState == ConnectionState.waiting) {
//...omit
List<ActiveTools.Data> datas = dataSnapshot.data[0];
似乎所提供的代码中没有两个未来,因此您不必像@Darish所说的那样使用Future.wait
。有关Future.wait的更多信息,请阅读文档。