etView 只是对已注册的 Controller 有一个名为 controller 的getter的 const Stateless 的
Widget,如果我们只有单个控制器作为依赖项,那我们就可以使用 GetView ,而不是使用
StatelessWidget ,并且避免了写 Get.Find() 。
GetView如何使用
GetView的使用方法非常简单,只是要将你的视图层继承自 GetView 并传入需要注册的控制器并
Get.put() 即可;
GetView结合GetxController使用
第一步 、定义一个CountController
import 'package:get/get.dart'; class CountController extends GetxController { var count = 0.obs; @override void onInit() { super.onInit(); print("onInit"); } @override void onReady() { super.onReady(); print("onReady"); } @override void onClose() { print("onClose"); } void inc() { count++; update(['first_count']); } void dec() { count--; update(); } }
第二步 、继承GetView并使用状态管理
import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../controller/count.dart'; class ShopPage extends GetView<CountController> { const ShopPage({super.key}); @override Widget build(BuildContext context) { //如果第一次使用还需要put Get.put(CountController()); //必须 return Scaffold( appBar: AppBar( title: const Text("shop"), ), body: Center( child: Column( children: [ Obx(() => Text("${controller.count}")), //controller都一样 ElevatedButton( onPressed: () { controller.inc(); }, child: const Text("加1")) ], ), ), ); } }
GetView Binding结合GetxController使用
第一步 、定义一个shopController
import 'package:get/get.dart'; class shopController extends GetxController { var count = 0.obs; @override void onInit() { super.onInit(); print("onInit"); } @override void onReady() { super.onReady(); print("onReady"); } @override void onClose() { print("onClose"); } void inc() { count++; update(['first_count']); } }
第二步 、定义一个shop Binding
import 'package:get/get.dart'; import '../controllers/shop.dart'; class ShopBinding implements Bindings{ @override void dependencies() { // TODO: implement dependencies Get.lazyPut<ShopController>(() => ShopController()); } }
第三步 、路由中绑定Binding
import 'package:get/get.dart'; import '../pages/tabs.dart'; import '../pages/shop.dart'; import '../middlewares/shopMiddleware.dart'; import "../binding/shop.dart"; class AppPage { static final routes = [ GetPage(name: "/", page: () => const Tabs()), GetPage( name: "/shop", page: () => const ShopPage(), binding: ShopBinding(), //必须 middlewares: [ShopMiddleWare()]), ]; }
第四步 、继承GetView并使用状态管理
import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../controllers/shop.dart'; //直接使用 class ShopPage extends GetView<ShopController> { const ShopPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Title'), ), body: Center(child: Obx(() { return Text("${controller.counter}"); })), ); } }
生命周期
import 'package:get/get.dart'; class CountController extends GetxController { var count = 0.obs; @override void onInit() { super.onInit(); // 初始化操作... print("onInit"); } @override void onReady() { super.onReady(); //页面加载完成后的操作... print("onReady"); } @override void onClose() { print("onClose"); super.onClose(); //资源释放、取消订阅等操作... } void inc() { count++; update(['first_count']); } void dec() { count--; update(); } }
浙公网安备 33010602011771号