likes
comments
collection
share

【Flutter App】GetX框架的实践

作者站长头像
站长
· 阅读数 44

正在做的这款App是一个打卡软件,旨在让用户能够更好地坚持自己所设置的目标,坚持自己的初心。

由于项目还只是在前期阶段,目前根据需要建立了以下结构: 【Flutter App】GetX框架的实践

参考了部分官方插件以及结合官方getX文档中建议的目录:

【Flutter App】GetX框架的实践

暂时没有对state分离出来一层的想法。 以下是各层详细内容:

【Flutter App】GetX框架的实践

【Flutter App】GetX框架的实践

在使用GetX的时候,往往每次都是用需要手动实例化一个控制器final controller = Get.put(CounterController());,如果每个界面都要实例化一次,有些许麻烦。使用Binding 能解决上述问题,可以在项目初始化时把所有需要进行状态管理的控制器进行统一初始化,直接使用Get.find()找到对应的GetxController使用。

  • 可以将路由、状态管理器和依赖管理器完全集成
  • 这里介绍2种使用方式,推荐第一种使用getx的命名路由的方式
  • 不使用binding,不会对功能有任何的影响。
  • 第一种:使用命名路由进行Binding绑定
/// 入口类
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    /// 这里使用 GetMaterialApp
    /// 初始化路由
    return GetMaterialApp(
      initialRoute: RouteConfig.onePage,
      getPages: RouteConfig.getPages,
    );
  }
}

/// 路由配置
class RouteConfig {
  static const String onePage = "/onePage";
  static const String twoPage = "/twoPage";

  static final List<GetPage> getPages = [
    GetPage(
      name: onePage,
      page: () => const OnePage(),
      binding: OnePageBinding(),
    ),
    // GetPage(
    //   name: twoPage,
    //   page: () => TwoPage(),
    //   binding: TwoPageBinding(),
    // ),
  ];
}

/// binding层
class OnePageBinding extends Bindings {
  @override
  void dependencies() {
    Get.lazyPut(() => CounterController());
  }
}

/// 逻辑层
class CounterController extends GetxController{
  var count = 0;
  /// 自增方法
  void increase(){
    count++;
    update();
  }
}

  • 第二种:使用initialBinding初始化所有的Binding
/// 入口类
class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      /// 初始化所有的Binding
      initialBinding: AllControllerBinding(),
      home: const OnePage(),
    );
  }
}

/// 所有的Binding层
class AllControllerBinding extends Bindings {
  @override
  void dependencies() {
    Get.lazyPut(() => CounterController());
    ///Get.lazyPut(() => OneController());
    ///Get.lazyPut(() => TwoController());
  }
}

转载自:https://juejin.cn/post/7042904386799927332
评论
请登录