Flutter事件发射插件emit的使用

Flutter事件发射插件emit的使用

jc_event 是一个类似于 NodeJS 的 EventEmitter 的事件工具。本文将详细介绍如何在 Flutter 中使用 jc_event 插件来处理事件的监听和触发。

作者

JunCai Lee

联系方式

邮箱: 291148484@163.com

许可证

许可证: MIT

示例代码

// 引入 EventEmmitter 类
import 'package:jc_event/jc_event.dart';

void main() {
  // 创建一个 EventEmitter 实例
  EventEmitter emitter = EventEmitter();

  // 定义两个监听器函数
  void listener_1() => print("执行 listener_1");
  void listener_2() => print("执行 listener_2");

  // 添加监听器到 "event_1" 事件
  emitter.on("event_1", listener_1); // 添加 listener_1
  emitter.on("event_1", listener_2); // 添加 listener_2

  // 打印当前的事件列表
  print(emitter.events);
  
  // 触发 "event_1" 事件
  emitter.emit("event_1");

  // 移除 "event_1" 事件的 listener_1 监听器
  emitter.off("event_1", listener_1);

  // 再次打印当前的事件列表
  print(emitter.events);
  
  // 再次触发 "event_1" 事件
  emitter.emit("event_1");
}

输出结果

// 输出当前的事件列表
{event_1: [Closure: () => void, Closure: () => void]}

// 执行 listener_1
执行 listener_1

// 执行 listener_2
执行 listener_2

// 再次输出当前的事件列表
{event_1: [Closure: () => void]}

// 执行 listener_2
执行 listener_2

详细说明

  1. 创建 EventEmitter 实例:

    EventEmitter emitter = EventEmitter();
    
  2. 定义监听器函数:

    void listener_1() => print("执行 listener_1");
    void listener_2() => print("执行 listener_2");
    
  3. 添加监听器到事件:

    emitter.on("event_1", listener_1); // 添加 listener_1
    emitter.on("event_1", listener_2); // 添加 listener_2
    
  4. 打印当前的事件列表:

    print(emitter.events);
    
  5. 触发事件:

    emitter.emit("event_1");
    
  6. 移除监听器:

    emitter.off("event_1", listener_1);
    
  7. 再次打印当前的事件列表:

    print(emitter.events);
    
  8. 再次触发事件:

    emitter.emit("event_1");
    

更多关于Flutter事件发射插件emit的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter事件发射插件emit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,emit通常与状态管理库(如BlocCubit)一起使用,用于发出状态变化的事件。emitCubitBloc类中的一个方法,用于触发状态更新。

1. 使用Cubitemit

CubitBloc库中的一个轻量级状态管理工具。你可以使用emit方法来更新状态。

示例代码:

import 'package:flutter_bloc/flutter_bloc.dart';

// 定义状态类
class CounterState {
  final int count;

  CounterState(this.count);
}

// 定义Cubit类
class CounterCubit extends Cubit<CounterState> {
  CounterCubit() : super(CounterState(0));

  // 增加计数器的方法
  void increment() {
    emit(CounterState(state.count + 1));
  }

  // 减少计数器的方法
  void decrement() {
    emit(CounterState(state.count - 1));
  }
}

使用Cubit

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BlocProvider(
        create: (context) => CounterCubit(),
        child: CounterPage(),
      ),
    );
  }
}

class CounterPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final counterCubit = context.read<CounterCubit>();

    return Scaffold(
      appBar: AppBar(title: Text('Counter App')),
      body: Center(
        child: BlocBuilder<CounterCubit, CounterState>(
          builder: (context, state) {
            return Text('Count: ${state.count}');
          },
        ),
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(
            onPressed: () => counterCubit.increment(),
            child: Icon(Icons.add),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: () => counterCubit.decrement(),
            child: Icon(Icons.remove),
          ),
        ],
      ),
    );
  }
}

2. 使用Blocemit

BlocCubit的一个更复杂的版本,它使用事件来触发状态变化。emit方法在Bloc中用于在事件处理过程中发出新的状态。

示例代码:

import 'package:flutter_bloc/flutter_bloc.dart';

// 定义事件类
abstract class CounterEvent {}

class IncrementEvent extends CounterEvent {}

class DecrementEvent extends CounterEvent {}

// 定义状态类
class CounterState {
  final int count;

  CounterState(this.count);
}

// 定义Bloc类
class CounterBloc extends Bloc<CounterEvent, CounterState> {
  CounterBloc() : super(CounterState(0)) {
    on<IncrementEvent>(_onIncrement);
    on<DecrementEvent>(_onDecrement);
  }

  void _onIncrement(IncrementEvent event, Emitter<CounterState> emit) {
    emit(CounterState(state.count + 1));
  }

  void _onDecrement(DecrementEvent event, Emitter<CounterState> emit) {
    emit(CounterState(state.count - 1));
  }
}

使用Bloc

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BlocProvider(
        create: (context) => CounterBloc(),
        child: CounterPage(),
      ),
    );
  }
}

class CounterPage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final counterBloc = context.read<CounterBloc>();

    return Scaffold(
      appBar: AppBar(title: Text('Counter App')),
      body: Center(
        child: BlocBuilder<CounterBloc, CounterState>(
          builder: (context, state) {
            return Text('Count: ${state.count}');
          },
        ),
      ),
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          FloatingActionButton(
            onPressed: () => counterBloc.add(IncrementEvent()),
            child: Icon(Icons.add),
          ),
          SizedBox(height: 10),
          FloatingActionButton(
            onPressed: () => counterBloc.add(DecrementEvent()),
            child: Icon(Icons.remove),
          ),
        ],
      ),
    );
  }
}
回到顶部