我试图为所有小部件创建一个定制的未来构建器,但是当我试图将类型作为参数传递时,没有人知道如何实现它
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”的类型
任何人都知道正确的方法。
发布于 2022-06-23 09:23:41
如果要传递特定类型的数据,可以通过以下方式进行:
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。
发布于 2022-06-23 09:29:04
您应该使您的buildFutureBuilder成为通用的,并在其中传递类型:
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;
}
},
);
}https://stackoverflow.com/questions/72726978
复制相似问题