首页 > 其他分享 >Flutter之GetX之GetBuilder

Flutter之GetX之GetBuilder

时间:2023-04-05 14:15:39浏览次数:47  
标签:状态 counter CounterController GetX GetBuilder Flutter

Flutter之GetX之GetBuilder

GetX是Flutter的一个非常强力的三方库,包含了非常多的功能,比如状态管理、路由管理、国际化、路由中间件、主题、数据库等等

今天简单介绍一下状态管理中的GetBuilder实现

有关状态管理

当你的 Flutter 应用的状态发生改变时(例如,用户在设置界面中点击了一个开关选项)你改变了状态,这将会触发用户界面的重绘。去改变用户界面本身是没有必要的(例如 widget.setText )—你改变了状态,那么用户界面将重新构建。Flutter 应用是 声明式 的,这也就意味着 Flutter 构建的用户界面就是应用的当前状态。

状态类

GetX 中称之为 Controller,需要继承GetxController,当状态发生改变的时候,调用 update 方法即可通知依赖状态的组件进行刷新。

实现最简单的计数器demo

class CounterController extends GetxController {
  int _counter = 0;
  
  get counter => _counter;

  void increment() {
    _counter++;
    update();
  }
}

视图界面

界面层在需要使用状态的地方使用 GetBuilder 包裹,然后就可以使用 Controller 访问状态对象和操作状态方法了。其中GetBuilder只需要两个参数:

init:初始状态对象,在这里可以完成状态对象的初始化。

builder 方法:这个方法用于构建依赖状态的组件树,方法携带状态对象参数,因此下面的组件可以访问到状态对象。而且一旦状态对象通过 update 方法通知有更新时,依赖状态对象的组件就会被刷新。

Widget build(BuildContext context) {
  return GetBuilder<CounterController>(
    init: CounterController(),
    builder: (controller) => Scaffold(
      appBar: AppBar(
        title: Text('GetX计数器'),
      ),
      body: Center(
        child: Text(
          '${controller.counter}',
          style: TextStyle(
            color: Colors.blue,
            fontSize: 24.0,
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          controller.increment();
        },
      ),
    ),
  );
}

以上代码有点问题,GetBuilder包住了整个Scaffold,我们没必要把不需要刷新的组件包住

可以改成

Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    title: Text('GetX计数器'),
  ),
  body: Center(
    child: GetBuilder<CounterController>(
      init: CounterController(),
      builder: (_) => Text(
        '${CounterController.to.counter}',
        style: TextStyle(
          color: Colors.blue,
          fontSize: 24.0,
        ),
      ),
    ),
  ),
  floatingActionButton: FloatingActionButton(
    child: Icon(Icons.add),
    onPressed: () {
      CounterController.to.increment();
    },
  ),
);

当只包住需要刷新的Text组件时,按钮的点击方法和GetBuilder在同一个层级,没办法访问到buidler中的controller,这时候可以在controller中定义一个静态的别名方法

static CounterController get to => Get.find();

直接通过CounterController.to就可以访问到,但是要用Get.find()的话必须要先用Get.put()或者Get.LazyPut()注册依赖,然后就可以通过CounterController.to全局访问了

标签:状态,counter,CounterController,GetX,GetBuilder,Flutter
From: https://www.cnblogs.com/r1cardo/p/17289339.html

相关文章

  • Flutter之GetX之Obs
    Flutter之GetX之Obs除了之前说过的GetBuilder,GetX还有其他的状态管理方式一个后缀就可以把一个变量变得可观察,变量每次改变的时候,使用它的小部件就会被更新varname='周杰伦'.obs;然后通过Obx或者GetX包裹并使用响应式变量的控件,在变量改变的时候就会被更新Obx(()=>......
  • flutter系列之:在flutter中使用相机拍摄照片
    简介在app中使用相机肯定是再平常不过的一项事情了,相机肯定涉及到了底层原生代码的调用,那么在flutter中如何快速简单的使用上相机的功能呢?一起来看看吧。使用相机前的准备工作flutter中为使用camera提供了一个叫做camera的插件,我们首先需要安装这个插件。安装插件的步骤很简单......
  • flutter系列之:在flutter中使用相机拍摄照片
    目录简介使用相机前的准备工作在flutter中使用camera总结简介在app中使用相机肯定是再平常不过的一项事情了,相机肯定涉及到了底层原生代码的调用,那么在flutter中如何快速简单的使用上相机的功能呢?一起来看看吧。使用相机前的准备工作flutter中为使用camera提供了一个叫做came......
  • flutter系列之:创建一个内嵌的navigation
    目录简介搭建主Navigator构建子路由总结简介我们在flutter中可以使用Navigator.push或者Navigator.pushNamed方法来向Navigator中添加不同的页面,从而达到页面调整的目的。一般情况下这样已经足够了,但是有时候我们有多个Navigator的情况下,上面的使用方式就不够用了。比如我们有一个......
  • Flutter 异步编程指南
    作者:京东物流 王志明1Dart中的事件循环模型在App开发中,经常会遇到处理异步任务的场景,如网络请求、读写文件等。Android、iOS使用的是多线程,而在Flutter中为单线程事件循环,如下图所示Dart中有两个任务队列,分别为microtask队列和event队列,队列中的任务按照先进先出......
  • Flutter和小程序容器技术的应用前景与发展潜力
    随着移动互联网的快速发展,应用程序已经成为人们生活中必不可少的一部分,而小程序和Flutter技术则是当前应用开发中备受瞩目的两大趋势。 小程序是一种轻量化的应用程序,其不需要用户下载安装即可使用,同时也具备了高效便捷的使用体验。而Flutter技术则是一种跨平台的应用开发技术......
  • Flutter中如何取消任务
    前言在开发过程中,取消需求是很常见的,但很容易被忽略。然而,取消需求的好处也很大。例如,在页面中会发送很多请求。如果页面被切走并处于不可见状态,就需要取消未完成的请求任务。如果未及时取消,则可能会导致以下负面影响:消耗用户额外数据流量。任务回调持有全局上下文变量,未及时......
  • flutter基础2
    1.有状态组件StatefulWidgetimport'package:flutter/material.dart';voidmain(){runApp(constMyApp());}classMyAppextendsStatelessWidget{constMyApp({super.key});@overrideWidgetbuild(BuildContextcontext){returnMaterialAp......
  • flutter系列之:在flutter中使用媒体播放器
    目录简介使用前的准备工作在flutter中使用video_player总结简介现在的app功能越来越强大,除了基本的图文之外,还需要各种各样的其他的功能,比如视频,和直播。直播可能会比......
  • 一统天下 flutter - widget 容器类(只能有一个子): LimitedBox - 限制最大尺寸
    一统天下flutterhttps://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget容器类(只能有一个子):LimitedBox-限制最大尺寸示例如下:lib\w......