在 FutureBuilder 中使用 Uint8List 的颤振给出错误
Posted
技术标签:
【中文标题】在 FutureBuilder 中使用 Uint8List 的颤振给出错误【英文标题】:Flutter using Uint8List in FutureBuilder is giving error 【发布时间】:2021-06-04 19:27:49 【问题描述】:我正在根据这个参考 Flutter Image Gallery 构建一个颤振画廊应用程序
一切正常,但我在Future Builder
中遇到错误
这是我收到的错误警告
The name 'Uint8List' isn't a type so it can't be used as a type argument.
Try correcting the name to an existing type, or defining a type named 'Uint8List'.
这是我遇到的运行时错误
Error: 'Uint8List' isn't a type.
return FutureBuilder<Uint8List>(
^^^^^^^^^
这个Uint8List
对我来说是全新的概念,不知道该怎么办。
这是返回 Future Builder 的小部件
@override
Widget build(BuildContext context)
// We're using a FutureBuilder since thumbData is a future
return FutureBuilder<Uint8List>(
future: asset.thumbData,
builder: (_, snapshot)
final bytes = snapshot.data;
// If we have no data, display a spinner
if (bytes == null) return CircularProgressIndicator();
// If there's data, display it as an image
return InkWell(
onTap: ()
// TODO: navigate to Image/Video screen
,
child: Stack(
children: [
// Wrap the image in a Positioned.fill to fill the space
Positioned.fill(
child: Image.memory(bytes, fit: BoxFit.cover),
),
// Display a Play icon if the asset is a video
if (asset.type == AssetType.video)
Center(
child: Container(
color: Colors.blue,
child: Icon(
Icons.play_arrow,
color: Colors.white,
),
),
),
],
),
);
,
);
我在谷歌上搜索过,但没有得到任何满意的答案。提前致谢。
【问题讨论】:
你为什么要在那里使用类型? 我认为您的代码中缺少导入,请在 pubspec 中添加此(包)[pub.dev/packages/typed_data] 并通过导入(typed_data)[pub.dev/documentation/typed_data/latest] 重试。 @HarshvardhanJoshi 是的,这对我有用,非常感谢!!! @nvoigt 我只是参考一篇文章。It returns a Future<Uint8List> representing the actual bytes of the thumbnail
【参考方案1】:
试试这个解决方案:
FutureBuilder<Uint8List>
到
FutureBuilder<dynamic>
或
FutureBuilder<List<int>>
【讨论】:
你为什么认为需要明确地给出一个类型呢? 对我来说是动态工作,但我更喜欢 @HarshvardhanJoshi 通过导入 typed_data 的评论。感谢您的回答。【参考方案2】:只需省略类型,编译器就足够智能到 infer 来自您提供的 Future<>
类型:
FutureBuilder(
future: asset.thumbData,
【讨论】:
是的,感谢您的回答。你能简单解释一下为什么我们不需要<Uint8List>
我已经间接做到了。它被称为“类型推断”,大多数语言都可以做到这一点。例如,如果您有一个方法method<T>(T t)
,那么当您传入int
时,您可以只执行method(5)
而不是method<int>(5)
,因为编译器已经从您的用法推断出您的意思是int
。见dart.dev/guides/language/type-system#type-inference以上是关于在 FutureBuilder 中使用 Uint8List 的颤振给出错误的主要内容,如果未能解决你的问题,请参考以下文章
Flutter HiveDB 在 FutureBuilder 上使用框