getx
你完全不需要 Stateful Widget
视图的class
继承自 GetxView<T>
(T 为Controller),例如:
class HomePage extends GetView<HomeController> { HomePage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: Container(), ); } }
GetxView<HomeController>
会自动帮你把 Controller
注入到 view
中,你可以简单理解为它自动帮你执行了以下步骤
final controller = Get.find<HomeController>();
不必担心 GetxView<T>
的性能,因为它仅仅是继承自 Stateless Widget
,记住,有了 getx
你完全不需要 Stateful Widget
当我们想要绑定controller
的变量时,我们约定了两种方法:
Obx(()=>)
如果你的变量是.obs
的,那么我们就使用Obx(()=>)
,它会在变量变更时自动刷新view
,例如:
// home_contrller class HomeController extends GetxController { final count = 0.obs; @override void onInit() { super.onInit(); } @override void onReady() {} @override void onClose() {} void increment() => count.value++; }
在view
里面使用 Obx(()=>)
绑定count
:
// home_view class HomePage extends GetView<HomeController> { HomePage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: Container( child: Obx(() => Center(child: Text(controller.count.toString()))), ), ); } }
GetBuilder<T>
如果你的变量不是.obs
的,那么我们就使用GetBuilder<T>
,例如:
class HomeController extends GetxController { int count = 0; @override void onInit() { super.onInit(); } @override void onReady() {} @override void onClose() {} void increment() { count++; update(); } }
在 view
里面使用 GetBuilder<T>
绑定count
:
class HomePage extends GetView<HomeController> { HomePage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return BaseScaffold( appBar: MyAppBar( centerTitle: true, title: MyTitle('首页'), leadingType: AppBarBackType.None, ), body: Container( child: GetBuilder<HomeController>(builder: (_) { return Center(child: Text(controller.count.toString())); }), ), ); } }