Каждый раз, когда я создаю новый проект Flutter, это самое мучительное время для меня Каждый раз, когда я иду на склад паба, чтобы найти библиотеку, скопировать и вставить ее вpubspec.yaml, а затем выполнитьflutter pub get. Эту операцию часто приходится повторять десятки раз. В конце концов, Flutter такой же большой, как маршрутизация, управление состоянием, такой же маленький, как инструменты, а интернационализация нуждается в библиотеках для его поддержки.Когда эти вещи найдены и наконец готовы к разработке, прошло полдня.
К счастью, я нашел его в репозитории паба,GetX, эта штука настоящая воловья кожа.Поиспользовав ее для разработки четырех-пяти проектов,определив стабильность и производительность,решил поделиться волной.
Эта статья является простым обменом информацией, у GetX нет официальной документации, есть только README на github, поэтому я собрал копию, основываясь на собственном опыте.
Что такое 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
- getx_template: генерация в один клик необходимых папок, файлов, кода шаблона и т. д. для каждой страницы
- GetX Snippets: введите небольшое количество букв и автоматически предложите выбор для создания часто используемых кодов шаблонов.
Эпилог
Желаю вам всего наилучшего на пути программирования и идти все дальше и дальше.