📜  Flutter – GetX 状态管理库

📅  最后修改于: 2021-09-02 05:30:46             🧑  作者: Mango

的getX是一个快速,稳定,和光状态管理flutter库。还有像MobX,集团,终极版,提供等flutter这么多国家管理库的getX也是一个强大的微架构,并使用此,我们可以管理的状态,使路由,并且可以进行依赖注入。

GetX的三个原则:

  1. 性能:与其他状态管理库相比,GetX 是最好的,因为它消耗最少的资源并提供更好的性能。
  2. 生产力:GetX 的语法很简单,因此生产力很高。它为开发人员节省了大量时间并提高了应用程序的速度,因为它不使用额外的资源。它只使用当前需要的资源,完成工作后,资源将自动释放。如果所有资源都加载到内存中,那么它就不会那么高效。因此最好为此使用 GetX。
  3. 组织:GetX 代码组织为视图、逻辑、导航和依赖注入。所以我们不需要更多的上下文来导航到其他屏幕。我们可以在不使用上下文的情况下导航到屏幕,因此我们不依赖于小部件树。

GetX 管理:

  • 状态管理:两种类型的状态管理:
    • 简单状态管理器:它使用GetBuilder
    • 反应状态管理器:它使用GetXObx
  • 路由管理:如果我们想制作像 Snackbar、Bottomsheets、对话框等小部件,那么我们可以使用 GetX,因为 GetX 可以在不使用上下文的情况下构建这些小部件。
  • 依赖管理:如果我们想从其他类中获取数据,那么在 GetX 的帮助下,我们只需一行代码即可完成。例如:Get.put()

安装:

  • pubspec.yaml文件中写入依赖
dependencies:
    get: ^4.1.4

  • 导入进入主。dart文件:
import 'package:get/get.dart';

为什么要使用 GetX?

  • 当有任何Flutter升级时,可能会出现很多问题,比如在构建我们的应用程序时出现错误。当我们搜索这些错误的解决方案时,有时我们得不到答案。因此,要获得问题的解决方案,请尝试在该存储库中打开一个问题。 flutter更新后我们唯一需要做的就是更新 Get 依赖项。
  • 我们都知道Flutter很快,但是有些事情需要避免,比如导航到另一个屏幕时,我们使用Navigator.of(context).push(context, builder(…..))并且这样做了很多次对于开发人员来说,这不是一个好方法。我们可以简单地编写Get.to(HomePage())来导航到 HomePage,而不是这样写。
  • 当我们想要更新任何 Widget 时,我们通常会使用 StatefulWidget。我们可以使用 Stateless Widget 和 GetX 来完成相同的任务,而不是创建 StatefulWidgets。将“.obs”添加到必须更新的变量中,并将 Widget 放置在 Obx 中,然后我们可以在变量更改值时更新屏幕,而无需刷新整个页面。
  • 当我们在屏幕之间导航时,创建小吃吧、底部表格等小部件时,我们就不再需要使用上下文了。因此,由于 GetX,性能得到提高。

让我们举个例子来导航到另一个屏幕:

  • 通常,我们使用Navigator.push(context, MaterialPageRoute(builder: (context) => Home()),);导航到另一个屏幕。这个任务也可以通过使用Get.to(Home());来完成
  • 主要的。dart文件:
Dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
  
void main() {
  runApp(MyApp());
}
  
class MyApp extends StatelessWidget {
   
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
          
        primarySwatch: Colors.blue,
      ),
      home: First(),
      debugShowCheckedModeBanner: false,
    );
  }
}
  
class First extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("GeekforGeeks"),
        centerTitle: true,
        backgroundColor: Colors.green,
      ),
     body: Center(
        child: Container(
          child: ElevatedButton(
            child: Text("Go to next screen"),
            onPressed: () { 
                
              //navigate to Second screen
              Get.to(Second()); 
            }
          ),
        ),
      ),
    );
  }
}
  
  
class Second extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("GeekforGeeks"),
        centerTitle: true,
        backgroundColor: Colors.green,
      ),
     body: Center(
       child: Container(
          child: ElevatedButton(
            child: Text("Go to first screen"),
            onPressed: null
          ),
        ),
      ),
    );
  }
}


输出: