Flutter中使用get

news/2024/7/20 20:56:07 标签: flutter, android, ios

get的优势:
路由管理、状态管理

项目中引入
将Get添加到您的pubspec.yaml文件:

dependencies:
  get: ^4.6.5

导入要使用的文件:

import 'package:get/get.dart';

GetX地址

  • Github:https://github.com/jonataslaw/getx
  • Pub:https://pub.dev/packages/get

主入口配置
只需要将MaterialApp改成GetMaterialApp即可

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      home: CounterGetPage(),
    );
  }
}

页面跳转

Get.to(NextScreen());

通过命名跳转

Get.toNamed('/details');

返回上一个页面

Get.back();

跳转下一个页面,并关闭当前页面,用于闪屏、登录页:

Get.off(NextScreen());

跳转下一个页面,并关闭其他所有页面:

Get.offAll(NextScreen());

简单状态管理 计数器示例:
logic层:处理页面逻辑的

class CounterEasyLogic extends GetxController {
  var count = 0;

  void increase() {
    ++count;
    update();
  }
}

view层:

class CounterEasyPage extends StatelessWidget {
  final logic = Get.put(CounterEasyLogic());

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('计数器-简单式')),
      body: Center(
        child: GetBuilder<CounterEasyLogic>(builder: (logic) {
          return Text(
            '点击了 ${logic.count} 次',
            style: TextStyle(fontSize: 30.0),
          );
        }),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => logic.increase(),
        child: Icon(Icons.add),
      ),
    );
  }
}

响应式状态管理
logic层:

  • 这里变量数值后写.obs操作,是说明定义了该变量为响应式变量,当该变量数值变化时,页面的刷新方法将自动刷新
  • 基础类型,List,类都可以加.obs,使其变成响应式变量
class CounterRxLogic extends GetxController {
  var count = 0.obs;

  ///自增
  void increase() => ++count;
}

View层:

class CounterRxPage extends StatelessWidget {
  final logic = Get.put(CounterRxLogic());

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('计数器-响应式')),
      body: Center(
        child: Obx(() {
          return Text(
            '点击了 ${logic.count.value} 次',
            style: TextStyle(fontSize: 30.0),
          );
        }),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => logic.increase(),
        child: Icon(Icons.add),
      ),
    );
  }
}

整个类对象设置为响应类型:
当你改变了类其中一个变量,然后执行更新操作,只要包裹了该响应类变量的Obx(),都会实行刷新操作,将整个类设置响应类型,需要结合实际场景使用

// model
// 我们将使整个类成为可观察的,而不是每个属性。
class User{
    User({this.name = '', this.age = 0});
    String name;
    int age;
}

// controller
final user = User().obs;
//当你需要更新user变量时。
user.update( (user) { // 这个参数是你要更新的类本身。
    user.name = 'Jonny';
    user.age = 18;
});
// 更新user变量的另一种方式。
user(User(name: 'João', age: 35));

// view
Obx(()=> Text("Name ${user.value.name}: Age: ${user.value.age}"));
// 你也可以不使用.value来访问模型值。
user().name; // 注意是user变量,而不是类变量(首字母是小写的)。


http://www.niftyadmin.cn/n/254932.html

相关文章

5年测试总结,自动化测试DevOps-CICD持续集成流程设计...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试进阶&#xf…

27《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

​《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限&#xff0c;如果错误欢迎批评指正。 第六章&#xff1a;The principles of protein folding kinetics &#xff08;蛋白质折叠动力学的原理&#xff09; 整个二级结构通常作为一个单…

Kubernetes 核心对象

Kubernetes 中的所有内容都被抽象为“资源”&#xff0c;如 Pod、Service、Node 等都是资源。“对象”就是“资源”的实例&#xff0c;是持久化的实体。Kubernetes 使用这些实体去表示整个集群的状态。它们主要描述了如下信息&#xff1a; 哪些容器化应用正在运行&#xff08;…

MySQL(复合查询)

文章目录 0 前言1 基本查询2 多表查询3 自连接4 子查询4.1 单行子查询4.2 多行子查询4.3 多列子查询4.4 在from子句中使用子查询4.5 合并查询4.5.1 union4.5.3 union all 0 前言 相关内容已经准备好了 链接&#xff1a;https://gitee.com/ding-xushengyun/linux__cpp/blob/ma…

Cleer ARC II 音弧

戴上Cleer ARC II 音弧解放双耳&#xff0c;享受更自由的音符 用惯了各种入耳式耳机&#xff0c;换上开放式耳机&#xff0c;戴着确实更加舒服&#xff0c;特别是我现在用的这款Cleer ARC II 音弧&#xff0c;戴上还不容易掉&#xff0c;很适合运动使用。这款耳机采用一种耳挂佩…

常见的《锁策略》

文章目录 乐观锁和悲观锁读写锁vs互斥锁轻量级锁 vs 重量级锁自旋锁 vs 挂起等待锁可重入锁vs不可重入锁公平锁vs非公平锁偏向锁针对上述三种策略synchronized是属于哪一种呢&#xff1f; 乐观锁和悲观锁 锁的实现者&#xff0c;预测接下来的锁的冲突&#xff08;锁竞争&#…

数据科学与机器学习在软件开发中的应用

数据科学和机器学习是现代软件开发的重要组成部分&#xff0c;可以帮助开发人员更好地理解和分析数据&#xff0c;从而提高软件的质量和性能。在本篇博客中&#xff0c;我将深入探讨数据科学和机器学习在软件开发中的应用&#xff0c;并讨论它们如何帮助我们创建更好的软件。 …

移动端横屏/强制横屏

整体演示&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content"wid…