Flutter状态管理插件getx_baik的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter状态管理插件getx_baik的使用

Getx Baik

[灵感来源于Getx] 本项目仅用于教育和研究目的。 对于生产环境,我不能保证其稳定性。 但是,基础的状态管理只是使用了Flutter自带的setState。

对于导航也没有额外的库, 使用的导航已经是无上下文的。

Getx目前相当流行, 但由于提供了太多功能, 有些开发者可能会选择使用更简单的状态管理工具。 另外,还有一些事情在论坛上引起了一些混乱, 但在我看来这并不是问题,因为这种情况在开源项目中很常见。 无论谁对谁错,我都承认Getx的目标已经实现, 即为了方便开发人员XD。

特别是对于像我这样比较懒的程序员XD XD, 因此就有了Getx Baik,这是一个受Getx启发的项目。 无上下文且易于使用!

Key

  • Get.width
  • Get.height
  • GetWidget
  • GetxController
  • Get.to
  • Get.offAll
  • Get.back

Catatan

  • 使用GetBuilder包装意味着在背后使用了StatefulWidget

尚未提供

  • .obs

示例项目

Getting Started

main.dart

import 'package:getx_baik/shared/get/get.dart';
import 'package:getx_baik/shared/get/get_builder.dart';
import 'package:getx_baik/shared/get/get_material_app.dart';
import 'package:getx_baik/shared/get/getx_controller.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(GetMaterialApp(
    title: 'Flutter Demo',
    navigatorKey: Get.navigatorKey,
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    home: HomeView(),
  ));
}

class HomeController extends GetxController {
  bool loading = false;
}

class HomeView extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return GetBuilder<HomeController>(
      init: HomeController(),
      builder: (controller) {
        return Scaffold(
          appBar: AppBar(
            title: Text("Home View"),
          ),
          body: Container(
            width: Get.width,
            padding: EdgeInsets.all(20.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                // 如果loading为true,则显示加载指示器
                if (controller.loading == true)
                  Center(
                    child: CircularProgressIndicator(),
                  ),
                // 如果loading为false,则显示点击按钮
                if (controller.loading == false)
                  InkWell(
                    onTap: () async {
                      // 设置loading为true
                      controller.loading = true;
                      // 更新界面
                      controller.update();

                      // 模拟异步操作
                      await Future.delayed(Duration(seconds: 1));

                      // 设置loading为false
                      controller.loading = false;
                      // 更新界面
                      controller.update();
                    },
                    child: Card(
                      color: Colors.orange[400],
                      child: Container(
                        padding: EdgeInsets.all(20.0),
                        child: Text("Test Loading"),
                      ),
                    ),
                  ),
              ],
            ),
          ),
        );
      },
    );
  }
}

示例代码

import 'package:getx_baik/shared/get/get.dart';
import 'package:getx_baik/shared/get/get_builder.dart';
import 'package:getx_baik/shared/get/get_material_app.dart';
import 'package:getx_baik/shared/get/getx_controller.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(GetMaterialApp(
    title: 'Flutter Demo',
    navigatorKey: Get.navigatorKey,
    theme: ThemeData(
      primarySwatch: Colors.blue,
    ),
    home: HomeView(),
  ));
}

class HomeController extends GetxController {
  bool loading = false;
}

class HomeView extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return GetBuilder<HomeController>(
      init: HomeController(),
      builder: (controller) {
        return Scaffold(
          appBar: AppBar(
            title: Text("Home View"),
          ),
          body: Container(
            width: Get.width,
            padding: EdgeInsets.all(20.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                if (controller.loading == true)
                  Center(
                    child: CircularProgressIndicator(),
                  ),
                if (controller.loading == false)
                  InkWell(
                    onTap: () async {
                      controller.loading = true;
                      controller.update();

                      await Future.delayed(Duration(seconds: 1));

                      controller.loading = false;
                      controller.update();
                    },
                    child: Card(
                      color: Colors.orange[400],
                      child: Container(
                        padding: EdgeInsets.all(20.0),
                        child: Text("Test Loading"),
                      ),
                    ),
                  ),
              ],
            ),
          ),
        );
      },
    );
  }
}

更多关于Flutter状态管理插件getx_baik的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter状态管理插件getx_baik的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,getx 是一个非常流行的状态管理库,它提供了简单而强大的方式来管理应用状态。尽管你提到的 getx_baik 并不是一个官方或广泛认知的库,我假设你可能是想询问如何使用 getx 进行状态管理。以下是一个关于如何使用 getx 的示例,展示如何在Flutter应用中进行状态管理。

安装 GetX

首先,确保你已经在 pubspec.yaml 文件中添加了 get 依赖:

dependencies:
  flutter:
    sdk: flutter
  get: ^4.0.0  # 请检查最新版本号

然后运行 flutter pub get 来安装依赖。

创建一个简单的计数器应用

以下是一个使用 GetX 的简单计数器应用的完整示例:

  1. 创建控制器类

首先,我们需要创建一个控制器类来管理状态。这个类将继承自 GetxController

import 'package:get/get.dart';

class CounterController extends GetxController {
  var count = 0.obs; // 使用 .obs 创建可观察对象

  void increment() {
    count++;
  }
}
  1. 在主应用中初始化 GetX

在你的 main.dart 文件中,确保你使用了 GetMaterialApp 而不是 MaterialApp

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'counter_controller.dart'; // 导入你的控制器

void main() {
  runApp(GetMaterialApp(
    home: CounterPage(),
  ));
}
  1. 创建 UI 页面

接下来,创建一个页面来使用这个控制器。

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'counter_controller.dart'; // 导入你的控制器

class CounterPage extends StatelessWidget {
  final CounterController controller = Get.put(CounterController()); // 获取控制器实例

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GetX Counter'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Obx(() => Text(
              '${controller.count}',
              style: Theme.of(context).textTheme.headline4,
            )),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: controller.increment, // 调用控制器中的方法
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

在这个示例中,我们使用了 Obx 小部件来监听 count 变量的变化。当 count 变量改变时(通过调用 increment 方法),Obx 小部件会重建 UI 以反映最新的值。

总结

以上代码展示了如何使用 GetX 库进行状态管理。通过创建一个继承自 GetxController 的控制器类,并在你的页面中使用 Get.put 获取控制器实例,你可以轻松地管理应用的状态。使用 ObxGetX 小部件来监听状态变化,并在状态改变时自动更新 UI。

希望这个示例能帮助你理解如何使用 GetX 进行状态管理!如果你有其他关于 GetX 或 Flutter 的问题,欢迎继续提问。

回到顶部