gpt4 book ai didi

dart - Future 结合 Flutter 中的 FutureBuilder 返回 null

转载 作者:IT王子 更新时间:2023-10-29 07:10:11 24 4
gpt4 key购买 nike

我想使用 FutureBuilder 检查 url 是否为 png 图像,然后构建一个或两个图像(在列表中)。但是不知何故,当我打印它时,Future 总是返回 null ...

结果是应用程序始终使用两个 CachedNetworkImages 构建 ListView ,这不是我想要的。如果 URL 是图像,它应该只使用该 url 构建一个 CachedNetworkImage,如果不是,它应该更改 url 并构建一个包含 2 个图像的 ListView 。

child: new FutureBuilder(
future: _getImages(widget.imgUrl),
builder: (BuildContext context, AsyncSnapshot snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return new Text('Press button to start');
case ConnectionState.waiting:
return new Text('Awaiting result...');
default:
if (snapshot.hasError)
return new Text('Error: ${snapshot.error}');
else {
print(snapshot.data);
if (snapshot.data == "image/png") {
return new SingleChildScrollView(
child: new CachedNetworkImage(
imageUrl: widget.imgUrl,
placeholder: new Center(
child: new AdaptiveProgressIndicator()),
),
);
} else {
return new ListView(
children: <Widget>[
new CachedNetworkImage(
imageUrl:
widget.imgUrl.split('.png')[0] + '-0.png',
placeholder: new Center(
child: new AdaptiveProgressIndicator()),
),
new CachedNetworkImage(
imageUrl:
widget.imgUrl.split('.png')[0] + '-1.png',
)
],
);
}
}
}
}),
),
));
}

Future<String> _getImages(String url) async {
await http.get(url).then((result) {
return result.headers['content-type'];
});
}

最佳答案

这段代码有点奇怪。

Future<String> _getImages(String url) async {
await http.get(url).then((result) {
return result.headers['content-type'];
});
}

async 允许您避免 then(在大多数情况下)。

代码应该是:

Future<String> _getImages(String url) async {
var result = await http.get(url);
// for debugging only
print('statusCode: ${result.statusCode}');
var contentType = result.headers['content-type'];
print('content-type: $contentType');
return contentType;
}

通过这种方式,您还可以检查请求是否实际提供了结果。

关于dart - Future 结合 Flutter 中的 FutureBuilder 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802315/

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