我正在嘗試分離一個包含 GetBuilder 的小部件。我想將型別作為引數發送到小部件,但遺憾的是直到現在都無法實作。
我想做什么:
class Widget extends StatelessWidget {
final type; // A class type that extends GetxController
const Widget({required this.type});
@override
Widget build(BuildContext context) {
return GetBuilder<type>(
builder: (controller) {
return const SizedBox();
},
);
}
}
我想讓它在我的專案的多個地方都可以重復使用,但是不同的用途需要不同的控制器,所以每次使用時 GetBuilder 的型別都是不同的。不幸的是,我以前從未實作過這樣的東西,所以我很困惑,因為它與普通引數不同。
錯誤:
名稱“type”不是型別,因此不能用作型別引數。嘗試將名稱更正為現有型別,或定義名為“型別”的型別。飛鏢(non_type_as_type_argument)
“動態”不符合型別引數“T”的系結“GetxController”。嘗試使用屬于或屬于“GetxController”的子類的型別。飛鏢(type_argument_not_matching_bounds)
uj5u.com熱心網友回復:
嘗試這個:
class CustomWidget<T extends GetxController> extends StatelessWidget {
const CustomWidget();
@override
Widget build(BuildContext context) {
return GetBuilder<T>(
builder: (controller) {
return const SizedBox();
},
);
}
}
并像這樣使用它:
CustomWidget<YourCustomType>();
uj5u.com熱心網友回復:
不要Widget用作自定義類,它已經由 flutter 框架提供。
至于你的答案,你可以做
class MyWidget extends StatelessWidget {
final Type type;
const MyWidget({required this.type});
@override
Widget build(BuildContext context) {
if(type is XWidget){
}
}
}
uj5u.com熱心網友回復:
您需要在作為泛型傳遞的型別中擴展 GetxController,如下所示:
class Widget<T extends GetxController> extends StatelessWidget {
const Widget({
super.key,
});
@override
build(BuildContext context) {
return GetBuilder<T>(
builder: (T controller) {
return const SizedBox();
},
);
}
}
注意:使用這種方式,您實際上無法從引數中的該型別創建一個全新的實體,init例如:
return GetBuilder<T>(
init: T(), // you can't
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/537197.html
標籤:扑镖颤动getx
