Flutter provider和 getx 区别

news/2024/9/19 12:37:23/文章来源:https://www.cnblogs.com/yf-html/p/18405838

前沿

ProviderGetX 是 Flutter 社区中常用的两种状态管理解决方案。

它们各自有不同的特点和使用场景,下面是它们的区别和示例,以便更好地理解和选择适合的状态管理方法。

示例:ProviderGetX 的使用

1. 使用 Provider 的示例

假设我们有一个简单的计数器应用,点击按钮时计数器数字会增加。

步骤 1:添加 provider 依赖

pubspec.yaml 中添加:

 

dependencies:flutter:sdk: flutterprovider: ^6.0.5

 

步骤 2:创建一个 Counter

Counter 类使用 ChangeNotifier 来通知监听器。

import 'package:flutter/foundation.dart';class Counter with ChangeNotifier {int _count = 0;int get count => _count;void increment() {_count++;notifyListeners(); // 通知所有监听这个状态的组件进行更新
  }
}

 

 

步骤 3:在应用中使用 Provider

main.dart 中:

 

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'counter.dart'; // 引入刚刚创建的 Counter 类void main() {runApp(MultiProvider(providers: [ChangeNotifierProvider(create: (_) => Counter()), // 注入 Counter 实例
      ],child: MyApp(),),);
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return MaterialApp(home: CounterScreen(),);}
}class CounterScreen extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("Provider Example")),body: Center(child: Consumer<Counter>( // 使用 Consumer 监听 Counter 状态的变化builder: (context, counter, child) => Text('Count: ${counter.count}',style: TextStyle(fontSize: 30),),),),floatingActionButton: FloatingActionButton(onPressed: () => context.read<Counter>().increment(), // 调用 Counter 的 increment 方法
        child: Icon(Icons.add),),);}
}

2. 使用 GetX 的示例

GetX 中,我们使用了控制器来管理状态,这使得代码更简洁和易于维护。

步骤 1:添加 get 依赖

pubspec.yaml 中添加:

dependencies:flutter:sdk: flutterget: ^4.6.5

步骤 2:创建一个 CounterController

使用 GetX 控制器管理状态

import 'package:get/get.dart';class CounterController extends GetxController {var count = 0.obs; // 使用 .obs 声明为可观察状态void increment() {count++; // 自动通知 UI 更新
  }
}

步骤 3:在应用中使用 GetX

main.dart 中:

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'counter_controller.dart'; // 引入刚刚创建的 CounterController 类void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return GetMaterialApp(home: CounterScreen(),);}
}class CounterScreen extends StatelessWidget {// 初始化 GetX 控制器final CounterController counterController = Get.put(CounterController());@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("GetX Example")),body: Center(child: Obx(() => Text('Count: ${counterController.count}',style: TextStyle(fontSize: 30),)), // 使用 Obx 监听 count 的变化
      ),floatingActionButton: FloatingActionButton(onPressed: () => counterController.increment(), // 调用控制器的 increment 方法
        child: Icon(Icons.add),),);}
}

结合总结

  • Provider:适合中大型项目,需要更严格的架构和更清晰的状态管理。适合团队合作。
  • GetX:简洁、易用、高性能,适合个人项目、小型项目,或者不希望增加代码复杂度的中大型项目。

可以根据项目规模和团队需求选择最适合的状态管理方式。

方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794825.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NVIDIA驱动,CUDA,CONDA环境安装

NVIDIA驱动安装检查驱动信息last rebootuname -rcat /var/log/apt/history.lognvidia-smill /usr/src/lsmod |grep nvidialspci |grep -i nvidiadmesg -i |grep nvidiadmesg |grep -i nvidiadmesg |grep -i nvrm dpkg --get-selections | grep linux-image查看加载内核版本zg…

一觉醒来,Qt、C#界面开发的天塌了?

再算上VC、PyQt,之前说“人生苦短,快用python”,现在要说人生苦短,快跳出泥潭!上位机、客户端界面传统开发太重,也不够美。传统开发中,还算不错的 毕竟大部分场景,界面并不是核心。大量时间精力投入在交互、美观、还有各种界面类“面向对象的封装”上,实在不划算。有指…

Linguistics-English-时态16种:4种时间4种状态 + 16种时态详解 + 8种时态的被动语态

时态16种: 4种时间 4种状态时态标志词 + 时态详解 + 8种语态的被动语态:

雨量监测系统需要哪些设备,带你360度无死角了解雨量监测系统

作为星创易联技术支持林工,我很高兴为大家介绍我们公司的雨量监测系统。在过去的几年里,我亲自参与了多个雨量监测项目的设计、部署和维护工作,积累了丰富的实践经验。今天,我将详细介绍我们的雨量监测系统,包括其组成部分、工作原理、应用场景以及部署注意事项。有兴趣的…

基础漏洞

目录 目录目录一、暴力破解漏洞描述无防护措施锁定机制验证码绕过二、xss漏洞(跨站脚本攻击)分类反射型(非持续型)攻击步骤存储型(持续型)攻击步骤DOM型危害三、CSRF漏洞(跨站请求伪造)四、SQL注入漏洞描述注入分类SQL注入分类及判断判断是否存在 Sql 注入漏洞判断 Sql…

LLog:Spring轻量级请求日志监控组件,集成管理面板,支持多条件查询检索

开源地址 https://gitee.com/lboot/LLog 简介 LLog是基于AOP构建的请求日志记录和查询工具库,通过引入该工具库,完成配置,实现对接口请求日志的记录、查询检索等功能。请求状态、时间、来源、耗时,请求参数,响应结果,作用接口记录支持与鉴权服务结合,记录请求来源为用户…

如何实现深拷贝?structuredClone

经典的面试题:如何实现深拷贝。 常规的回答主要是通过JSON或者遍历对象递归。主要是考核对对象操作方经典的面试题:如何实现深拷贝。 常规的回答主要是通过JSON或者遍历对象递归。主要是考核对对象操作方法的熟悉程度。今天来介绍另一个方案structuredClone()。什么是 struct…

信奥一本通题陈老师解题:1209:分数求和

​ 【题目描述】【输入】第一行是一个整数nn,表示分数个数,1≤n≤101≤n≤10; 接下来nn行,每行一个分数,用"p/qp/q"的形式表示,不含空格,p,qp,q均不超过1010。【输出】输出只有一行,即最终结果的最简形式。若为分数,用"p/qp/q"的形式表示。【输…

【OpenFeign 】OpenFeign 下的重试器的执行过程分析

1 前言 上节我们看了下 OpenFeign 里的重试,在从源码的角度看它的执行原理的时候,又意外的遇到了一个【OpenFeign 】OpenFeign 下未开启重试,服务却被调用了两次 的问题的分析,那本节我们就来看看重试器的一个入场以及执行的过程。 2 源码分析 首先我们要知道在默认的情况…

WiFi基础(三):802.11ac/ax/be 与 WiFi4、WiFi5、WiFi6、WiFi7

前面我们介绍了 802.11 b/g/n 的一些核心技术和基础概念,本章将介绍目前比较新的 WiFi5 和 WiFi6,以及在今年会发布的 WiFi7。liwen01 2024.09.08 前言 经过二十多年的发展,WiFi 在硬件能力、软件和算法、频谱资源、市场需求、电源与能效方面都有了很大的提升。所以我们能看…

一个类才几百行/搞定各种自定义委托/涵盖各种场景需求/所有委托一网打尽/用法极其简单

一、应用场景某个字段需要提供下拉框进行选择,下拉框可选是否允许编辑。 某个字段需要提供密码框进行输入,密文显示字段值。 某个字段需要提供日期框下拉选择日期时间。 某个字段需要提供微调框设定值。 某个字段需要提供进度条显示字段值。 某个字段列需要禁用。 各种委托控…

军工厂电气工程师到知名互联网公司程序员,我吃饭的家伙有哪些

大家好,我是欧阳。今年刚好是欧阳三十而立之年,虽然没有立起来。这篇文章来聊聊我从一名军工厂电气工程师到某知名互联网公司程序员,这期间我吃饭的家伙都有哪些。 军工厂期间 欧阳大学读的是“电气工程及其自动化专业”,毕业后进入了老家的一个军工厂,成为了一名电气工程…