GetView介绍 以及 GetxController生命周期

GetView 只是对已注册的Controller 有一个名为controllergetterconst StatelessWidget,如果我们只有单个控制器作为依赖项,那我们就可以使用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}");
      })),
    );
  }
}

results matching ""

    No results matching ""