multi_bloc_builder 1.0.1 copy "multi_bloc_builder: ^1.0.1" to clipboard
multi_bloc_builder: ^1.0.1 copied to clipboard

A Flutter package that provides a widget to listen to multiple blocs and rebuilds the widget when any of the blocs emit a new state.

example/lib/main.dart

import 'dart:developer';

import 'package:example/state/one/data_one_cubit.dart';
import 'package:example/state/two/data_two_cubit.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:multi_bloc_builder/multi_bloc_builder.dart';

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

const t = [DataOneCubit, DataTwoCubit];

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MultiBlocProvider(
        providers: [
          BlocProvider(create: (context) => DataOneCubit()),
          BlocProvider(create: (context) => DataTwoCubit()),
        ],
        child: const MaterialApp(
          title: 'MultiBlocBuilder Demo',
          home: MyHomePage(),
        ));
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  _fetch() {
    context.read<DataOneCubit>().fetch();
    context.read<DataTwoCubit>().fetch();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body: Column(
          children: [
            MultiBlocConsumer(
              blocs: [
                context.watch<DataOneCubit>(),
                context.watch<DataTwoCubit>(),
              ],
              buildWhen: (next, prev) {
                log('BUILD WHEN: $next, $prev');
                return true;
              },
              listener: (context, states) {
                log('LISTENER: $states');
              },
              listenWhen: (next, prev) {
                log('LISTEN WHEN: $next, $prev');
                return true;
              },
              builder: (context, states) {
                final one = states.get<DataOneState>();
                final two = states.get<DataTwoState>();

                return Column(
                  children: [
                    Text(one.toString()),
                    Text(two.toString()),
                  ],
                );
              },
            ),
            ElevatedButton(onPressed: _fetch, child: const Text('Fetch'))
          ],
        ));
  }
}
8
likes
160
pub points
70%
popularity

Publisher

verified publishercontributors.info

A Flutter package that provides a widget to listen to multiple blocs and rebuilds the widget when any of the blocs emit a new state.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

bloc, flutter

More

Packages that depend on multi_bloc_builder