我正在嘗試為所有小部件創建一個自定義的未來構建器,但是當我嘗試將Type作為引數傳遞時,它不起作用,任何人都知道實作這個的任何方式
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”的型別
任何人都知道這樣做的正確方法
uj5u.com熱心網友回復:
如果要傳入特定型別的資料,可以通過以下方式進行:
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在你想使用該型別的任何地方使用該型別。
uj5u.com熱心網友回復:
您應該使您的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://www.uj5u.com/caozuo/495052.html
