flutter使用状态管理—flutter_bloc

1.flutter_bloc

flutter_bloc 是一个状态管理的工具,是由 状态数据触发更新 来实现的,如果需要一个组件数据改变了,另一个组件要发生改变,使用常规的方式就是组件一层层传递,结构会很复杂,维护也会比较困难,这时候可以使用 flutter_bloc ,很简洁的帮我们实现这个功能

2.首先下载 flutter_bloc插件

如果是用vscode开发的话,在根目录下的 pubspec.yaml 文件里的 dependencies 下写入下面的内容,注意 缩进 要统一

flutter_bloc: ^8.1.1

在按下 ctrl + s 会自动执行 pub get,也可以在 终端 输入 flutter pub get

3.使用

1.首先,定义一个维护数据的文件,里面放入需要的数据,例如:完成一个全局颜色配置的功能,这里 只有一个成员 themeColor 主题色

import 'package:flutter/material.dart';

class AppConfig {
  final Color themeColor;
  AppConfig({required this.themeColor, required this.locale});

  // 命名构造函数+初始化列表
  AppConfig.defaultColor()
      : themeColor = const Color(0xff3BBD5B),
	
  AppConfig copyWith(Color? color) {
    return AppConfig(themeColor: color ?? themeColor);
  }
}

2.定义一个执行更新的文件,switchThemeColor 是用来触发更新的事件,state 则是当前 Cubit 的状态,emit 是发送更改好的新状态,emit 只能在 Cubit 中使用

import 'package:flutter_bloc/flutter_bloc.dart';
import 'app_config.dart';
import 'package:flutter/material.dart';

class AppConfigBloc extends Cubit<AppConfig> {
  AppConfigBloc({required AppConfig appConfig}) : super(appConfig);

  void switchThemeColor(Color color) {
    if (color != state.themeColor) {
      emit(state.copyWith(color: color));
    }
  }
}

3.在项目入口中,使用 BlocProvider 进行包裹,将数据存储在最上层的节点,子节点可以通过 上下文 进行访问,AppConfig.defaultColor 是设置默认 颜色状态

void main() {
  runApp(
    BlocProvider<AppConfigBloc>(
      create: (context) => AppConfigBloc(
        appConfig: AppConfig.defaultColor(),
      ),
      child: const Home(),
    ),
  );
}

4.在 Home 中,build 返回的内容要使用 BlocBuilder 进行包裹,接收两个泛型,一个是 触发更新 的文件,一个是 状态数据 的文件,在 BlocBuilder 中有个 builder 函数,状态更新 后就会对应的更新

class Home extends StatelessWidget {
  const Home({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return BlocBuilder<AppConfigBloc, AppConfig>(
      builder: (_, state) => MaterialApp(
        debugShowCheckedModeBanner: false,
        home: const HomePage(),
        theme: ThemeData(
          // 使用当前状态的颜色作为主题色
          primaryColor: state.themeColor, 
        ),
      ),
    );
  }
}

5.在需要修改 主题色 的组件中,执行 BlocProvider.of<AppConfigBloc>(context) 来进行更新状态。

BlocProvider.of<AppConfigBloc>(context).switchThemeColor(newColor);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flutter状态管理是一个非常重要的主题,因为在移动应用程序中,管理状态是必不可少的。Flutter提供了多种状态管理库和方案,这里我们介绍三种常见的状态管理方案。 1. StatefulWidget StatefulWidget是Flutter最基本的状态管理方式之一,它通常用于管理小型或少量的状态。我们可以在StatefulWidget中定义自己的状态,然后在需要时使用setState()方法来更新状态。setState()方法会通知Flutter框架重新绘制UI,以反映新的状态。 优点:实现简单,适用于小型或少量的状态管理。 缺点:当状态较多时,代码复杂度会增加。 2. BLoC(Business Logic Component) BLoC是一种更高级的状态管理方式,它将UI组件、业务逻辑和状态分离开来。BLoC通过Stream和Sink来管理状态,通过StreamBuilder来监听状态变化并更新UI。BLoC的核心思想是单向数据流,即数据只能从Sink流入,通过Stream流出。 优点:代码结构清晰,易于维护和扩展。通过单向数据流,可以避免状态混乱和不一致性。 缺点:实现较为复杂,需要掌握Stream和Sink的使用。 3. Provider Provider是Flutter官方推荐的状态管理库,它是基于InheritedWidget和ChangeNotifier实现的。Provider提供了一种简单且灵活的方法来管理应用程序状态。它通过Provider.of()来访问状态,并通过ChangeNotifierProvider来监听状态变化并更新UI。 优点:实现简单,易于维护和扩展。通过Provider.of()可以轻松访问状态,而不必显式传递状态。 缺点:Provider在处理较复杂的状态管理时可能会出现性能问题。 总结: 以上是Flutter中三种常见的状态管理方式,每种方式都有其优缺点,根据实际情况选择合适的方式来管理状态。对于小型或少量的状态管理,可以使用StatefulWidget;对于复杂的状态管理,可以使用BLoC或Provider。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值