isolate_bloc 2.1.1 copy "isolate_bloc: ^2.1.1" to clipboard
isolate_bloc: ^2.1.1 copied to clipboard

A dart package that helps implement the BLoC pattern. BLoC works in Isolate and don't slow down UI.

example/lib/main.dart

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

Future<void> main(List<String> arguments) async {
  await initialize(isolatedFunc);
  runApp(
    MaterialApp(
      home: IsolateBlocProvider<CounterCubit, int>(
        child: CounterScreen(),
      ),
    ),
  );
}

class CounterScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Counter'),
      ),
      body: Center(
        child: IsolateBlocListener<CounterCubit, int>(
          listener: (context, state) => print('New bloc state: $state'),
          child: IsolateBlocBuilder<CounterCubit, int>(
            builder: (context, state) {
              return Text('You tapped $state times');
            },
          ),
        ),
      ),
      floatingActionButton: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          FloatingActionButton(
            heroTag: 'Increment',
            onPressed: () => context
                .isolateBloc<CounterCubit, int>()
                .add(CountEvent.increment),
            child: const Icon(Icons.add),
          ),
          const SizedBox(height: 10),
          FloatingActionButton(
            heroTag: 'Decrement',
            onPressed: () => context
                .isolateBloc<CounterCubit, int>()
                .add(CountEvent.decrement),
            child: const Icon(Icons.remove),
          ),
        ],
      ),
    );
  }
}

Future<void> isolatedFunc() async {
  IsolateBloc.observer = SimpleBlocObserver();
  register<CounterCubit, int>(create: () => CounterCubit());
}

class CounterCubit extends IsolateCubit<CountEvent, int> {
  CounterCubit() : super(0);

  @override
  void onEventReceived(CountEvent event) {
    emit(event == CountEvent.increment ? state + 1 : state - 1);
  }
}

enum CountEvent {
  increment,
  decrement,
}

class SimpleBlocObserver extends IsolateBlocObserver {
  @override
  void onClose(IsolateBlocBase bloc) {
    print('New instance of ${bloc.runtimeType}');
    super.onClose(bloc);
  }

  @override
  void onEvent(IsolateBlocBase bloc, Object? event) {
    print('New $event for $bloc');
    super.onEvent(bloc, event);
  }

  @override
  void onTransition(IsolateBloc bloc, Transition transition) {
    print('New ${transition.nextState} from $bloc');
    super.onTransition(bloc, transition);
  }

  @override
  void onError(IsolateBlocBase bloc, Object error, StackTrace stackTrace) {
    print('$error in $bloc');
    super.onError(bloc, error, stackTrace);
  }
}
44
likes
110
pub points
72%
popularity

Publisher

unverified uploader

A dart package that helps implement the BLoC pattern. BLoC works in Isolate and don't slow down UI.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

combine, equatable, flutter, provider, uuid

More

Packages that depend on isolate_bloc