flutter:Getx (十四)

简介: Getx 是一个轻量级的 Flutter 库,用于状态管理和路由导航。使用 Getx 需要包裹在 `GetMaterialApp` 中。首先添加依赖 `get: ^4.6.5`,然后引入 `import 'package:get/get.dart';`。Getx 提供了 `defaultDialog`、`snackbar`、`bottomSheet` 和导航功能,支持参数传递和响应式编程(如 `Obx`)。此外,还支持国际化配置,通过 `Messages` 类定义多语言文本,并通过 `MessagesController` 控制器切换语言。

前言

在现代应用程序开发中,状态管理和路由导航是两个至关重要的方面,尤其是在构建复杂的用户界面时。Getx 是一个轻量级且高效的 Flutter 库,为开发者提供了一套强大的工具,旨在简化这两个领域的操作。通过简单的语法和灵活的功能,Getx 让状态管理变得更加直观,同时提供了便捷的导航方法和国际化支持。无论您是刚入门的开发者还是经验丰富的专业人士,Getx 都能帮助您提升开发效率,快速构建高性能的 Flutter 应用。

Getx

需要用到 getx   都 包裹在  GetMaterialApp

get

先下载依赖

cupertino_icons: ^1.0.2
  get: ^4.6.5

再引入

import 'package:get/get.dart';

使用

defaultDialog

GetMaterialApp

ElevatedButton(
                onPressed: () {
                  Get.defaultDialog(
                      title: "tip",
                      middleText: "this is a content",
                      confirm: ElevatedButton(
                          onPressed: () {
                            Get.back();
                          },
                          child: Text("confirm")),
                      cancel: ElevatedButton(
                          onPressed: () {
                            Get.back();
                          },
                          child: Text("cancel")));
                },
                child: Text("click me")),
                  )


snackbar

ElevatedButton(
                onPressed: () {
                  Get.snackbar("title", "have  a good day",
                      snackPosition: SnackPosition.TOP);
                },
                child: Text("click me again")),

bottomSheet 加主题管理

ElevatedButton(
                onPressed: () {
                  Get.bottomSheet(Container(
                    // color: Colors.white,
                    color: Get.isDarkMode ? Colors.black87 : Colors.white,
                    height: 200,
                    child: Column(
                      children: [
                        ListTile(
                          leading: Icon(Icons.wb_sunny_outlined),
                          title: Text(
                            "day model",
                            // style: TextStyle(
                            //     color: Get.isDarkMode
                            //         ? Colors.white
                            //         : Colors.black87),
                          ),
                          onTap: () {
                            Get.changeTheme(ThemeData.light());
                            Get.back();
                          },
                        ),
                        ListTile(
                          leading: Icon(Icons.wb_sunny),
                          title: Text(
                            "evening model",
                          ),
                          onTap: () {
                            Get.changeTheme(ThemeData.dark());
                            Get.back();
                          },
                        )
                      ],
                    ),
                  ));
                },
                child: Text("click me again")),
isDismissible:true    //   可以 点 背景 关闭 
enableDrag: true  //   可 拖动
isControlled   : true   // 是否 全屏 
enterBottomSheetDuration:Duration(milliseconds:1000)
exit    //  出现时间和 退出时间


Navigation


使用

children: [
                     ElevatedButton(onPressed: (){
                       Get.to(()=>MyTest(),
                       // 传参
                       arguments: "hello,jack",
                       // 动画
                       fullscreenDialog: true,
                       transition: Transition.upToDown,
                       duration: Duration(milliseconds: 2000),
                       curve: Curves.bounceIn);
      }, child: Text("go to home")),
                   ],

接收 参数

children: [
       Text("this is home"),
            // 接收参数
            Text(Get?.arguments??""),
            ElevatedButton(onPressed: (){
              Get.back();
            }, child: Text("go back"))
        ],

子给父传参

ElevatedButton(onPressed:  () async{
                       var data = await Get.to(()=>MyTest(),arguments: "Hello,jack");
                       print("the data is $data");
                     }, child: Text("go to home")),

ElevatedButton(onPressed: (){
              // 可 带参
              Get.back(result: "the data is  you want get");
            }, child: Text("go back"))

Obx

RxInt count = RxInt(0);
  // var count = Rx<double>(0);
  // var count = 0.obs;
  void increment() {
    count++;
  }
Obx(() => Text(
      "count is: $count",
      style: TextStyle(color: Colors.blue, fontSize: 20),
    )),
SizedBox(
  height: 20,
),
ElevatedButton(
    onPressed: () {
      increment();
    },
    child: Icon(Icons.add)),


getxController

国际化配置

translations  国际化 配置文件

locale  设置默认 语言,   不设置 则为当前 系统语言

fallbackLocale     配置错误下 使用的语言

messages

import 'package:get/get.dart';
class Messages extends Translations{
  @override
  Map<String,Map<String,String>> get keys =>{
    'zh_CN':{
      'hello':"你好,世界"
    },
    'en_US':{
      'hello':"hello,world"
    }
  };
}

messageController

控制器改变语言

import 'dart:ui';
import 'package:get/get.dart';
class MessagesController extends GetxController{
  void changeLanguage(String languageCode,String countryCode){
    var locale=Locale(languageCode,countryCode);
    Get.updateLocale(locale);
  }
}

使用

MessagesController messagesController = Get.put(MessagesController());
Text(
              //  这个  很重要
              'hello'.tr,
              style: TextStyle(color: Colors.blue, fontSize: 20),
            ),
            SizedBox(height: 20,),
            ElevatedButton(
                onPressed: () {
                  messagesController.changeLanguage('zh', 'CN');
                },
                child: Text("chinese")),
            SizedBox(
              height: 20,
            ),
            ElevatedButton(
                onPressed: () {
                  messagesController.changeLanguage('en', 'US');
                },
                child: Text("english")),


相关文章
|
7月前
|
存储 设计模式 Dart
Flutter笔记:getX库中的GetView中间件
Flutter笔记:getX库中的GetView中间件
291 0
|
7月前
|
存储 Dart 数据库
Flutter笔记:状态提升、控制器模式、GetX控制器和服务
Flutter笔记:状态提升、控制器模式、GetX控制器和服务
360 0
Flutter Getx 路由 until 方法帮助你跳转指定路由
不少同学都会问我,这样一个场景,当我点击商品列表,进入商品页,点击购买,支付成功后,想返回商品页,或者我的中心的订单列表。怎么做,这中间跨度了 n 个路由。 我不只一次的推荐 GetX 的 until 方法,和 offNamedUntil 方法。 我写了个 demo 今天我们就一起来看下这两个方法如何使用。
1590 0
Flutter Getx 路由 until 方法帮助你跳转指定路由
|
存储 数据库 索引
Flutter笔记:滚动之-无限滚动与动态加载的实现(GetX简单状态管理版)
本文介绍Flutter中如何实无线滚动(基于GetX简单状态管理而非有状态组件)
139 0
|
6月前
|
缓存 视频直播
flutter3-dylive 基于flutter3.19+getx短视频/直播应用
基于跨端技术flutter3.19+dart3+getx实战短视频/直播应用项目。
104 4
|
6月前
|
存储 Windows
基于flutter3.22+getx手机端os系统管理FlutterOSX
flutter3-osx原创研发手机桌面式OA管理系统新解决方案模式。
91 5
|
存储 设计模式 Dart
Flutter笔记:GetX模块中不使用 Get.put 怎么办
依赖注入(Dependency Injection,对于很多真的就是简单的局部共享状态的场景,自己实现单例我个人感觉反而更好。首先,你不需要集中于创建代码初期就从各个模块中导入你的各个控制器,也不需要预先在应用初始化时就创建它们的实例,从而将实例添加到GetX依赖中进行管理。这使得mian文件中的代码更加简洁。如果某个局部状态控制器被移除,你也不需要回到mian文件中来对代码进行改动,只需要删除不用的部分。其次,在Dart语言中,为面向对象的单例实现提供了很方便的支持,仅仅三个小步骤就可以实现严格管理单例。
143 1
|
7月前
|
API
Flutter状态管理终极方案GetX第一篇——路由
Flutter状态管理终极方案GetX第一篇——路由 GetX是Flutter中一个非常流行的状态管理库,它不仅提供了简单易用的状态管理功能,还可以帮助我们方便地管理路由。在这篇文章中,我们将介绍如何使用GetX来实现路由管理。
357 0
|
7月前
|
开发者
Flutter状态管理终极方案GetX第二篇——状态管理
Flutter状态管理终极方案GetX第二篇——状态管理 在Flutter应用程序中,状态管理是必不可少的。GetX提供了简单易用的状态管理方案,使得开发者可以更加轻松地管理应用程序状态。下面介绍GetX中的状态管理方案。
276 0
|
Dart API 容器
Flutter GetX使用详细解读
FlutterGetX 是一个基于 Flutter 框架的状态管理和依赖注入库。它与其他状态管理库相比,具有以下优势。
Flutter GetX使用详细解读