23 lines
908 B
Dart
23 lines
908 B
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
|
|
|
class BlocModule<TBloc extends StateStreamableSource<TState>, TState> extends StatelessWidget {
|
|
final TBloc Function(BuildContext context) create;
|
|
final Widget Function(BuildContext context, TBloc bloc, TState state) child;
|
|
final bool autoRebuild;
|
|
const BlocModule({required this.create, required this.child, this.autoRebuild = false, super.key});
|
|
|
|
Widget rebuildChild(BuildContext context) => child(context, context.watch<TBloc>(), context.watch<TBloc>().state);
|
|
Widget staticChild(BuildContext context) => child(context, context.read<TBloc>(), context.read<TBloc>().state);
|
|
|
|
@override
|
|
Widget build(BuildContext context) => BlocProvider<TBloc>(
|
|
create: create,
|
|
child: Builder(
|
|
builder: (context) => autoRebuild
|
|
? rebuildChild(context)
|
|
: staticChild(context)
|
|
)
|
|
);
|
|
}
|