[Приложение Flutter] Практика GetX Framework

Flutter

Создаваемое приложение представляет собой встроенное программное обеспечение, которое призвано помочь пользователям лучше придерживаться поставленных целей и придерживаться своих первоначальных устремлений.

Поскольку проект все еще находится на ранних стадиях, в настоящее время по мере необходимости создаются следующие структуры:image.png

Обратитесь к некоторым официальным плагинам и объедините рекомендуемые каталоги в официальной документации getX:

image.png

На данный момент нет идеи выделения слоя состояния. Вот подробности каждого слоя:

image.png

image.png

При использовании GetX часто необходимо каждый раз вручную создавать экземпляр контроллера.final controller = Get.put(CounterController());, если каждый интерфейс должен быть создан один раз, это немного хлопотно. Использование Binding может решить вышеуказанные проблемы, вы можете единообразно инициализировать все контроллеры, которым требуется управление состоянием при инициализации проекта, и использовать его напрямую.Get.find()найти соответствующийGetxControllerиспользовать.

  • Маршрутизация, менеджер состояний и менеджер зависимостей могут быть полностью интегрированы
  • Вот два способа его использования, и рекомендуется первый способ использования именованной маршрутизации getx.
  • Без привязки это никак не повлияет на функциональность.
  • Первый: использовать именованную маршрутизацию для привязки 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 для инициализации всех привязок
/// 入口类
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());
  }
}