[英]flutter get when to use GetX<Controller>, GetBuilder<Controller> or Obx()
[英]Flutter: use 2 classes when using StateMixin in getx controller
我在我的项目中使用 getx 作为状态管理。 我创建了一个 controller 并在我的 controller 上使用 StateMixin。
class HomeController extends GetxController
with StateMixin<MyModel, List<MyCompleteModel>> {
如您所见,我想使用StateMixin
的 2 个类。 但它的构造函数只接受一个 class。 除了创建一个包含这两个类的新 class 之外,有没有办法解决这个问题?
是的你可以! 正如你猜到的那样,通过继承。
首先创建一个包含所需类型的通用 State 类:
class MyState<T1, T2> { // you can use more like T3, T4...
T1? state1;
T2? state2;
MyState({this.state1, this.state2});
}
然后创建自己的基本控制器:
abstract class BaseController<T1, T2> extends GetxController with StateMixin<MyState<T1, T2>> {
}
然后扩展这个基本控制器:
class HomeController extends BaseController<int, String> {
@override
void onInit() {
super.onInit();
change(null, status: RxStatus.loading());
Future.delayed(Duration(seconds: 3), () {
change(MyState(state1:1,state2: "state2"), status:RxStatus.success());
});
}
}
然后在您的小部件上:
controller.obx(
(state) => Text("${state?.state1} - ${state?.state2}"),
)
是的,您可以使用tuple
package。 https://pub.dev/packages/tuple
class HomeController extends GetxController
with StateMixin<Tuple2<MyModel, List<MyCompleteModel>>> {
@override
Future<void> onInit() async {
change(Tuple2(MyModel(), [MyCompleteModel()]), status: RxStatus.success());
}
}
class HomeView extends StatelessWidget {
const HomeView({super.key});
@override
Widget build(BuildContext context) {
final controller = Get.put(HomeController());
return controller.obx((state) => Column(
children: [
Text(state?.item1.toString() ?? ''),
Text(state?.item2.first.toString() ?? ''),
],
));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.