GetView介绍 以及 GetxController生命周期
GetView 只是对已注册的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}")),
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}");
})),
);
}
}