블록 공식 사이트 참고
return BlocProvider(
create: (context) => SampleBloc(),
lazy: false,
child: SamplePage(),
);
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_bloc_widget_sample/src/bloc/sample_bloc.dart';
// ProviderPage
class BlocProviderPage extends StatelessWidget {
const BlocProviderPage({super.key});
Widget build(BuildContext context) {
// 프로바이더 선언
return BlocProvider(
create: (context) => SampleBloc(),
lazy: false,
child: SamplePage(),
);
}
}
// SamplePage
// 나타낼 view
class SamplePage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
body: const Center(
child: Text('Bloc Provider Sample'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
context.read<SampleBloc>().add(SampleEvent());
},
),
);
}
}
---
// SampleBloc
import 'package:bloc/bloc.dart';
// Bloc 선언
class SampleBloc extends Bloc<SampleEvent, int> {
SampleBloc() : super(0) {
print('init Samplebloc');
on<SampleEvent>((event, emit) {
print('Sample Event Called');
});
on<AddSampleEvent>((event, emit) {
emit(state + 1);
});
}
}
// bloc event
class SampleEvent {}
class AddSampleEvent extends SampleEvent {}
return BlocProvider<BlocA>(
create: (BuildContext context) => BlocA(),
child: BlocProvider<BlocB>(
create: (BuildContext context) => BlocB(),
child: BlocProvider<BlocC>(
create: (BuildContext context) => BlocC(),
child: const ChildA(),
),
),
);
return MultiProvider(
providers: [
BlocProvider(create: (context) => BlocA()),
BlocProvider(create: (context) => BlocB()),
BlocProvider(create: (context) => BlocC()),
],
child: const ChildA(),
);
샘플 블럭은 상태관리를 int 타입으로만 하고 있다…
child: BlocBuilder<SampleBloc, int>(
builder: (context, state) {
return Text{
state.toString(),
style: const TextStyle(fontSize: 70),
}
}
);
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_bloc_widget_sample/src/bloc/sample_bloc.dart';
class BlocBuilderPage extends StatefulWidget {
const BlocBuilderPage({super.key});
State<BlocBuilderPage> createState() => _BlocBuilderPageState();
}
class _BlocBuilderPageState extends State<BlocBuilderPage> {
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => SampleBloc(),
lazy: false,
child: SamplePage(),
);
}
}
class SamplePage extends StatelessWidget {
//bloc을 등록해야 사용이 가능한 케이스
late SampleBloc sampleBloc;
void _showMessage(BuildContext context) {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext _) {
return AlertDialog(
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
title: const Text('Title'),
content: BlocBuilder<SampleBloc, int>(
bloc: sampleBloc,
builder: (context, state) {
return Text(state.toString());
},
),
actions: [
ElevatedButton(
child: const Text("확인"),
onPressed: () {
Navigator.pop(context);
},
),
],
);
},
);
}
Widget build(BuildContext context) {
sampleBloc = context.read<SampleBloc>();
return Scaffold(
body: Center(
child: BlocBuilder<SampleBloc, int>(
buildWhen: (previous, current) {
return current > 10;
},
builder: (context, state) {
return Text(
'index : $state',
style: const TextStyle(fontSize: 70),
);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// context.read<SampleBloc>().add(AddSampleEvent());
_showMessage(context);
},
),
);
}
}