首页 > 其他分享 >Flutter provider和 getx 区别

Flutter provider和 getx 区别

时间:2024-09-10 09:46:36浏览次数:1  
标签:count GetX get Counter dart getx provider import Flutter

前沿

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

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

示例:ProviderGetX 的使用

1. 使用 Provider 的示例

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

步骤 1:添加 provider 依赖

pubspec.yaml 中添加:

 

dependencies:
  flutter:
    sdk: flutter
  provider: ^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 {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CounterScreen(),
    );
  }
}

class CounterScreen extends StatelessWidget {
  @override
  Widget 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: flutter
  get: ^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 {
  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      home: CounterScreen(),
    );
  }
}

class CounterScreen extends StatelessWidget {
  // 初始化 GetX 控制器
  final CounterController counterController = Get.put(CounterController());

  @override
  Widget 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:简洁、易用、高性能,适合个人项目、小型项目,或者不希望增加代码复杂度的中大型项目。

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

方法

标签:count,GetX,get,Counter,dart,getx,provider,import,Flutter
From: https://www.cnblogs.com/yf-html/p/18405838

相关文章

  • cross-plateform 跨平台应用程序-05-Flutter 介绍
    跨平台系列cross-plateform跨平台应用程序-01-概览cross-plateform跨平台应用程序-02-有哪些主流技术栈?cross-plateform跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?cross-plateform跨平台应用程序-04-ReactNative介绍cross-plateform跨平台应用程序-05-Flut......
  • mybaties-plus使用@SelectProvider实现动态SQL
    mybaties-plus使用@SelectProvider实现动态SQL新建DynamicSqlProvider.java类packagecom.muphy.mapper;importorg.apache.ibatis.jdbc.SQL;importjava.util.*;publicclassDynamicSqlProvider{publicStringbuildSelectSql(Map<String,Object>params){......
  • flutter开发Invalid argument(s): Illegal argument in isolate message: object is u
    Invalidargument(s):Illegalargumentinisolatemessage:objectisunsendable-Library:'dart:async'Class1.问题原因:使用flutterisolate的时候新开的isolate访问了其他isolate的变量导致的比如下面例子是错误的写法:finalzhangsan="张三";//这里变量是主隔......
  • Flutter 3.24 构建 release 抛出部分依赖 AAPT: error: resource android:attr/lStar
    问题截图:一些讨论:https://github.com/transistorsoft/flutter_background_fetch/issues/369问题原因及解决方案:@Aziz-T该问题与插件的compileSdkVersion和targetSdkVersion有关。出现该问题的原因是部分插件的compileSdkVersion和targetSdkVersion版本过旧。请前往......
  • flutter 的一些概念三
    本文同步发布于公众号:stringwu的互联网杂谈:flutter的一些概念三1Stream与Future的关系Stream和Future都是Flutter中常用的异步编程模型,Future适用于一次性异步操作,Stream适用于连续的异步操作1.1FutureFuture一次性的操作,只会返回一个结果;可以使用await和asy......
  • SQLSERVER建立Oracle Provider for OLE DB操作文档
    1、 下载ODAC-21.7-Xcopy-64-bit,并解压到目录ODAC21.72、 D盘创建目录:Oracle21C3、 CMD转向到目录ODAC21.7,输入【install.batoledbc:\oracleodac】,安装服务4、 系统环境变量中,为Path添加“D:\ Oracle21C;D:\ Oracle21C \bin;”5、 重启计算机,一定要重启6、 SQLS......
  • 快速写一个自己的flutter应用(新手入门)
    1、搭建开发环境详细文档可以参考如下链接:跟着官方文档走就可以了。1.3搭建Flutter开发环境|《Flutter实战·第二版》(flutterchina.club)开发Android应用|Flutter中文文档-Flutter中文开发者网站-Flutter我的安装过程:首先,在VScode里面,安装Dart插件然后按......
  • Flutter仿京东商城项目:‌支持最新的Flutter 3.x及鸿蒙OS
    Flutter仿京东商城项目:‌支持最新的Flutter3.x及鸿蒙OS引言Flutter,‌作为谷歌公司推出的一款基于Dart语言的开源移动UI框架,‌因其跨平台、‌高性能的特点,‌迅速在移动开发领域获得广泛关注。‌随着Flutter3.x的发布,‌带来了诸多新特性和改进,‌进一步提升了开发效率和用户体验......
  • 彻底解决Flutter项目底部导航栏穿透问题
    项目背景:在学习比站猫哥的“2022Flutter3GetxWoocommerceApp从零开始实战课程|01课程”时,按照课程指导逐步进行项目代码编写。视频地址:https://www.bilibili.com/video/BV1xY411F7es/?spm_id_from=333.999.0.0&vd_source=7c7ae5cc1dbb2453e1eb43950a4264a3。(1)问题表现:底......
  • Flutter的一些概念(二)
    注:本文同步发布于微信公众号:stringwu的互联网杂谈Flutter的一些概念(二)1flutter的核心渲染模块当应用启动时flutter会遍历所有的Widget形成Widget树,并通过createElement方法创建每个element对象,最后通过createRenderObject方法创建renderobject对象1.1WidgetWidge......