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")),


相关文章
|
5月前
|
存储 设计模式 Dart
Flutter笔记:getX库中的GetView中间件
Flutter笔记:getX库中的GetView中间件
237 0
|
19小时前
|
开发者 UED
flutter:dialog (十一)
本文介绍了 Flutter 中常用的弹窗组件和方法,包括 `AlertDialog`、`SimpleDialog`、`showModalBottomSheet` 和 `toast`。每个组件的使用方法和示例代码都进行了详细说明,帮助开发者快速理解和应用这些弹窗功能。例如,`AlertDialog` 用于显示带有标题、内容和按钮的对话框;`SimpleDialog` 用于显示多个选项供用户选择;`showModalBottomSheet` 用于从屏幕底部弹出模态对话框;而 `toast` 则用于显示短暂的消息提示。文中还提供了如何处理点击事件、取消弹窗等常见操作的代码示例。
|
12月前
|
存储 设计模式 Dart
Flutter笔记:GetX模块中不使用 Get.put 怎么办
依赖注入(Dependency Injection,对于很多真的就是简单的局部共享状态的场景,自己实现单例我个人感觉反而更好。首先,你不需要集中于创建代码初期就从各个模块中导入你的各个控制器,也不需要预先在应用初始化时就创建它们的实例,从而将实例添加到GetX依赖中进行管理。这使得mian文件中的代码更加简洁。如果某个局部状态控制器被移除,你也不需要回到mian文件中来对代码进行改动,只需要删除不用的部分。其次,在Dart语言中,为面向对象的单例实现提供了很方便的支持,仅仅三个小步骤就可以实现严格管理单例。
128 1
|
5月前
|
编解码 调度 UED
Flutter笔记:Flutter的WidgetsBinding.instance的window属性
Flutter笔记:Flutter的WidgetsBinding.instance的window属性
178 0
|
Dart API 容器
Flutter GetX使用详细解读
FlutterGetX 是一个基于 Flutter 框架的状态管理和依赖注入库。它与其他状态管理库相比,具有以下优势。
Flutter GetX使用详细解读
|
Java 程序员 Android开发
Flutter(十六)——Hero动画
Flutter(十六)——Hero动画
364 0
Flutter(十六)——Hero动画
flutter系列之:flutter中listview的高级用法
一般情况下,我们使用Listview的方式是构建要展示的item,然后将这些item传入ListView的构造函数即可,通常情况下这样做是够用了,但是不排除我们会有一些其他的特殊需求。 今天我们会来讲解一下ListView的一些高级用法。
Flutter Widget源码解析及实战(二)
Flutter Widget源码解析及实战(二)
189 0
Flutter Widget源码解析及实战(二)
|
缓存 Android开发
Flutter Widget源码解析及实战(一)
Flutter Widget源码解析及实战(一)
339 0
Flutter Widget源码解析及实战(一)