Flutter初学者在这里;我收到此错误:type 'Future<dynamic>' is not a subtype of type 'String'
从 Firebase 存储中获取下载 url 的函数
_getImageUrl(var fileName) async {
print(fileName);
final StorageReference ref = FirebaseStorage.instance.ref().child('categories/' + fileName);
Uri downloadUrl = await ref.getDownloadURL();
var url = downloadUrl.toString();
return url;
}
Run Code Online (Sandbox Code Playgroud)
我调用函数的地方
child: Image(
image: AdvancedNetworkImage(
_getImageUrl(menuItem['image'].toString()),
timeoutDuration: Duration(minutes: 1),
useDiskCache: true,
cacheRule: CacheRule(maxAge: const Duration(days: 7)),
),
height: mediaQuery.size.width * 0.22,
width: mediaQuery.size.width * 0.22,
),
Run Code Online (Sandbox Code Playgroud)
async/await从build方法(或builder闭包)返回时不能使用。任何时候在构建小部件树时有异步,最好使用FutureBuilder:
child: FutureBuilder<String>(
future: _getImageUrl(menuItem['image'].toString()),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Image(
image: AdvancedNetworkImage(
snapshot.data,
timeoutDuration: Duration(minutes: 1),
useDiskCache: true,
cacheRule: CacheRule(maxAge: const Duration(days: 7)),
),
height: mediaQuery.size.width * 0.22,
width: mediaQuery.size.width * 0.22,
);
}
return CircularProgressIndicator();
}
),
Run Code Online (Sandbox Code Playgroud)
或者,您可以StatefulWidget为此使用 a ,但它更像样板。如果您有兴趣,可以访问https://flutterigniter.com/build-widget-with-async-method-call/了解更多详细信息和实时示例。
| 归档时间: |
|
| 查看次数: |
28607 次 |
| 最近记录: |