首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在颤振中为FutureBuilder设置类型参数?

是否可以在颤振中为FutureBuilder设置类型参数?
EN

Stack Overflow用户
提问于 2022-06-23 08:29:21
回答 2查看 34关注 0票数 0

我试图为所有小部件创建一个定制的未来构建器,但是当我试图将类型作为参数传递时,没有人知道如何实现它

代码语言:javascript
复制
buildFutureBuilder({
  required Widget loadingWidget,
  required Widget errorWidget,
  required Widget child,
  required Future<dynamic> future,
  required Type dynamicType,
}) async {
  return FutureBuilder<dynamicType>(
    future: future,
    builder: (BuildContext context, AsyncSnapshot<dynamicType> snapshot) {
      if (snapshot.connectionState == ConnectionState.waiting) {
        return loadingWidget;
      } else if (snapshot.error == null) {
        return errorWidget;
      } else {
        return child;
      }
    },
  );
}

错误是

名称'dynamicType‘不是一个类型,所以它不能用作类型参数。尝试将名称更正为现有类型,或定义名为“dynamicType”的类型

任何人都知道正确的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-23 09:23:41

如果要传递特定类型的数据,可以通过以下方式进行:

代码语言:javascript
复制
buildFutureBuilder<T>({
    required Widget loadingWidget,
    required Widget errorWidget,
    required Widget child,
    required Future<T> future,
  }) async {
    return FutureBuilder<T>(
      future: future,
      builder: (BuildContext context, AsyncSnapshot<T> snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return loadingWidget;
        } else if (snapshot.error == null) {
          return errorWidget;
        } else {
          return child;
        }
      },
    );
  }

不需要声明Type类型的变量就可以接受对象的动态类型。您可以如上所示,即给该方法一个动态类型T,并在任何您想使用该类型的地方使用该类型T

票数 1
EN

Stack Overflow用户

发布于 2022-06-23 09:29:04

您应该使您的buildFutureBuilder成为通用的,并在其中传递类型:

代码语言:javascript
复制
buildFutureBuilder<Type>({
   required Widget loadingWidget,
   required Widget errorWidget,
   required Widget child,
   required Future<Type> future,
 }) async {
   return FutureBuilder<Type>(
     future: future,
     builder: (BuildContext context, AsyncSnapshot<Type> snapshot) {
     if (snapshot.connectionState == ConnectionState.waiting) {
       return loadingWidget;
     } else if (snapshot.error == null) {
       return errorWidget;
     } else {
       return child;
     }
    },
   );
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72726978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档