Окончательный убийца Flutter, он имеет четыре библиотеки на одну!

Flutter
Окончательный убийца Flutter, он имеет четыре библиотеки на одну!

Каждый раз, когда я создаю новый проект Flutter, это самое мучительное время для меня Каждый раз, когда я иду на склад паба, чтобы найти библиотеку, скопировать и вставить ее вpubspec.yaml, а затем выполнитьflutter pub get. Эту операцию часто приходится повторять десятки раз. В конце концов, Flutter такой же большой, как маршрутизация, управление состоянием, такой же маленький, как инструменты, а интернационализация нуждается в библиотеках для его поддержки.Когда эти вещи найдены и наконец готовы к разработке, прошло полдня.

К счастью, я нашел его в репозитории паба,GetX, эта штука настоящая воловья кожа.Поиспользовав ее для разработки четырех-пяти проектов,определив стабильность и производительность,решил поделиться волной.

Эта статья является простым обменом информацией, у GetX нет официальной документации, есть только README на github, поэтому я собрал копию, основываясь на собственном опыте.

github

gitee

Что такое GetX?

  • GetX — это легкое и мощное решение на Flutter: высокопроизводительное управление состоянием, интеллектуальное внедрение зависимостей и удобное управление маршрутизацией.

  • GetX имеет 3 основных принципа:

    • Производительность: GetX фокусируется на производительности и минимальном потреблении ресурсов. Размер упакованного apk и использование памяти во время выполнения GetX сопоставимы с другими плагинами управления состоянием. Если интересно, вот одинТестирование производительности.
    • Эффективность: синтаксис GetX очень прост и поддерживает чрезвычайно высокую производительность, что может значительно сократить время разработки.
    • Структура: GetX может полностью отделить интерфейс, логику, зависимости и маршрутизацию, упрощая использование, делая логику более понятной и простой в обслуживании.
  • GetX не раздутый, но легкий. Если вы используете только управление состоянием, будет скомпилирован только модуль управления состоянием, больше ничего не будет скомпилировано в ваш код. Он имеет множество функций, но все эти функции находятся в отдельных контейнерах, которые запускаются только после использования.

Что может GetX?

Функции, которые содержит GetX:

  • государственное управление
  • маршрутизация
  • глобализация
  • Инструменты
  • расширение IDE
  • Инженерный кли
  • ......

Преимущества GetX?

Для новичка его самым большим преимуществом является, конечно,简单易上手

Приведу несколько примеров:

государственное управление

СоздаватьControllerУправляйте переменными состояния

class Controller extends GetxController{
  var count = 0.obs;
  increment() => count++;
}

затем используйте напрямую

class Home extends StatelessWidget {

  @override
  Widget build(context) {

    // 使用Get.put()实例化你的类,使其对当下的所有子路由可用。
    final Controller c = Get.put(Controller());

    return Scaffold(
      // 使用Obx(()=>每当改变计数时,就更新Text()。
      appBar: AppBar(title: Obx(() => Text("Clicks: ${c.count}"))),

      // 用一个简单的Get.to()即可代替Navigator.push那8行,无需上下文!
      body: Center(child: ElevatedButton(
              child: Text("Go to Other"), onPressed: () => Get.to(Other()))),
      floatingActionButton:
          FloatingActionButton(child: Icon(Icons.add), onPressed: c.increment));
  }
}

class Other extends StatelessWidget {
  // 你可以让Get找到一个正在被其他页面使用的Controller,并将它返回给你。
  final Controller c = Get.find();

  @override
  Widget build(context){
     // 访问更新后的计数变量
     return Scaffold(body: Center(child: Text("${c.count}")));
  }
}

тебе просто нужноputОдинControllerпосле этого, тоwidgetзавернут вObx, таким образомcountсвязаны с вашимwidgetв, покаcountпроизошли изменения,widgetПросто следите за обновлениями.

Обратите внимание, что контроллер не связан с виджетом и будет связан только при выполнении размещения, поэтому вам решать, является ли это локальным состоянием или глобальным состоянием.

маршрутизация

Самая большая особенность маршрутизации GetX заключается в том, что она не требуетcontext, вы можете использовать его напрямую

Перейти на новую страницу

Get.to(NextScreen());

Перейдите на новую страницу с псевдонимом.

Get.toNamed('/details');

Чтобы закрыть закусочные, диалоговые окна, нижние листы или что-либо, что вы обычно удаляете с помощью Navigator.pop(context).

Get.back();

Переходит на следующую страницу, но не имеет возможности вернуться на предыдущую страницу (для страниц-заставок, страниц входа и т. д.).

Get.off(NextScreen());

Перейдите на следующую страницу и отмените все предыдущие маршруты (полезно в корзинах, опросах и тестах).

Get.offAll(NextScreen());

глобализация

Интернационализация GetX особенно проста, нам нужно только создать новыйTranslationsДобрый

import 'package:get/get.dart';

class Messages extends Translations {
  @override
  Map<String, Map<String, String>> get keys => {
        'zh_CN': {
          'hello': '你好 世界',
        },
        'de_DE': {
          'hello': 'Hallo Welt',
        }
      };
}

и поставь свойMaterialAppизменить наGetMaterialApp, и привяжите только что созданныйTranslationsДобрый.

Не беспокойтесь, GetMaterialApp поддерживает все интерфейсы MaterialApp, они совместимы.

return GetMaterialApp(
    translations: Messages(), // 你的翻译
    locale: Locale('zh', 'CN'), // 将会按照此处指定的语言翻译
    fallbackLocale: Locale('en', 'US'), // 添加一个回调语言选项,以备上面指定的语言翻译不存在
);

затем используйте напрямую

Text('title'.tr);

да, вам просто нужно добавить строку с.trготов к использованию интернационализации

Что такое GetXCli?

GetX Cli — это скрипт командной строки, похожий на vue cli, но более мощный, он может:

  • Создать проект
  • проектирование
  • Создать модель
  • создать страницу
  • генерировать представление
  • сгенерировать контроллер
  • Пользовательский шаблон контроллера
  • Создание файлов перевода
  • ......

Чтобы использовать GetX Cli, вам необходимо установить среду dart или среду Flutter.

Затем установите его напрямую

pub global activate get_cli 
# or
flutter pub global activate get_cli

Создать проект

get create project:my_project

Эта команда вызоветflutter create, а затем выполнитьget init

проектирование

get init

создать страницу

get create page:home

сгенерировать контроллер

get create controller:dialogcontroller on home

генерировать представление

get create view:dialogview on home

сгенерировать модель

get generate model on home with assets/models/user.json

Более подробные команды см.ДокументацияБар

расширение IDE

Эпилог

Желаю вам всего наилучшего на пути программирования и идти все дальше и дальше.