Flutter自动关闭逻辑管理插件autoclose_bloc的使用

AutoClose-Bloc #

这是 AutoClose 包 的一部分:你应该首先访问这个链接来熟悉这个库的关键概念。

此库为 Bloc 类提供了自动关闭功能。

开始使用 #

# 必需的
flutter pub add autoclose 
# 可以不使用 Flutter。无法想象为什么
flutter pub add autoclose_flutter
# 可选,但建议尝试
flutter pub add autoclose_lint
# 此库
flutter pub add autoclose_bloc

使用方法 #

class ProfileEditingFormBloc extends Bloc<ProfileEditingFormEvent, ProfileEditingFormState> 
  // 手动添加 AutoCloseBloc 混入类
  // 或者通过 closer bloc assist 添加(在 VS Code 中按 `⌘.` 或在 IntelliJ Idea 中按 `Alt+Enter`)
  with AutoCloseBloc {

final UserRepository userRepository;

ProfileEditingFormBloc({ required this.userRepository, }) { on<ProfileFetchRenewedUserData>(_onProfileFetchRenewedUserData); // … 其他事件

userRepository.userAuthTokenStream.listen((token) {
  add(ProfileFetchRenewedUserData(token: token));
})
// AutoCloseBloc 混入类为你的 Bloc 类提供了 `closeWith` 功能
.closeWith(this);

} }

```

完整示例 Demo

example/example.dart

import 'package:autoclose_bloc/closer/closer_bloc.dart';
import 'package:bloc/bloc.dart';

// 定义一个 Bloc 类 class ProfileEditingFormBloc extends Bloc<ProfileEditingFormEvent, ProfileEditingFormState> with CloserBloc { // 使用 CloserBloc 混入类 final UserRepository userRepository;

ProfileEditingFormBloc({ required this.userRepository, }) { on<ProfileFetchRenewedUserData>(_onProfileFetchRenewedUserData); // 注册事件处理器 // … 其他事件

userRepository.userAuthTokenStream.listen((token) {
  add(ProfileFetchRenewedUserData(token: token));  // 监听用户认证令牌流并触发事件
}).closeWith(this);  // 使用 closeWith 关闭流

}

void _onProfileFetchRenewedUserData( ProfileFetchRenewedUserData event, Emitter<ProfileEditingFormState> emit) { // 处理事件的具体逻辑 } }

// 定义事件类 class ProfileFetchRenewedUserData extends ProfileEditingFormEvent { final String token;

ProfileFetchRenewedUserData({required this.token}); }

// 定义状态类 class ProfileEditingFormState {}

// 定义抽象事件类 abstract class ProfileEditingFormEvent {}


更多关于Flutter自动关闭逻辑管理插件autoclose_bloc的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自动关闭逻辑管理插件autoclose_bloc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


autoclose_bloc 是一个用于 Flutter 的插件,旨在简化 BLoC(Business Logic Component)模式中的自动关闭逻辑管理。它可以帮助开发者自动管理 BLoC 的生命周期,避免资源泄漏和意外的内存问题。

主要功能

  1. 自动关闭 BLoC:在页面或 widget 被销毁时,自动关闭与之关联的 BLoC。
  2. 简化生命周期管理:无需手动管理 BLoC 的生命周期,减少代码复杂性。
  3. 与 Flutter Widget 无缝集成:通过 AutocloseProviderAutocloseConsumer 等组件,轻松将 BLoC 注入到 widget 树中。

安装

首先,在 pubspec.yaml 文件中添加 autoclose_bloc 依赖:

dependencies:
  flutter:
    sdk: flutter
  autoclose_bloc: ^1.0.0  # 请检查最新版本

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

使用示例

1. 创建一个 BLoC

import 'package:autoclose_bloc/autoclose_bloc.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class CounterBloc extends Cubit<int> with AutocloseCubitMixin {
  CounterBloc() : super(0);

  void increment() => emit(state + 1);
}

2. 在页面中使用 AutocloseProvider

import 'package:flutter/material.dart';
import 'package:autoclose_bloc/autoclose_bloc.dart';
import 'counter_bloc.dart';

class CounterPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return AutocloseProvider(
      create: (_) => CounterBloc(),
      child: CounterView(),
    );
  }
}

3. 使用 AutocloseConsumer 监听 BLoC 的状态

import 'package:flutter/material.dart';
import 'package:autoclose_bloc/autoclose_bloc.dart';
import 'counter_bloc.dart';

class CounterView extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Counter'),
      ),
      body: Center(
        child: AutocloseConsumer<CounterBloc, int>(
          builder: (context, state) {
            return Text(
              'Count: $state',
              style: Theme.of(context).textTheme.headline4,
            );
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          context.read<CounterBloc>().increment();
        },
        child: Icon(Icons.add),
      ),
    );
  }
}
回到顶部