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();
  }
}

 

 

 

 

posted on 2024-01-14 01:52  鲤斌  阅读(831)  评论(0)    收藏  举报