在 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&lt;Uint8List&gt; representing the actual bytes of the thumbnail 【参考方案1】:

试试这个解决方案:

FutureBuilder<Uint8List>

FutureBuilder<dynamic>

FutureBuilder<List<int>>

【讨论】:

你为什么认为需要明确地给出一个类型呢? 对我来说是动态工作,但我更喜欢 @HarshvardhanJoshi 通过导入 typed_data 的评论。感谢您的回答。【参考方案2】:

只需省略类型,编译器就足够智能到 infer 来自您提供的 Future&lt;&gt; 类型:

FutureBuilder(
    future: asset.thumbData,

【讨论】:

是的,感谢您的回答。你能简单解释一下为什么我们不需要&lt;Uint8List&gt; 我已经间接做到了。它被称为“类型推断”,大多数语言都可以做到这一点。例如,如果您有一个方法method&lt;T&gt;(T t),那么当您传入int 时,您可以只执行method(5) 而不是method&lt;int&gt;(5),因为编译器已经从您的用法推断出您的意思是int。见dart.dev/guides/language/type-system#type-inference

以上是关于在 FutureBuilder 中使用 Uint8List 的颤振给出错误的主要内容,如果未能解决你的问题,请参考以下文章

Flutter HiveDB 在 FutureBuilder 上使用框

颤动的重型平台代码导致UI滞后

使用 FutureBuilder 检索元素的问题

使用 FutureBuilder 和 Provider 在 Flutter 中出现错误状态没有元素

我啥时候应该使用 FutureBuilder?

FutureBuilder 与 Streambuilder