
BLOC 도 add sub 를 만들어봅니다.
Cubit 과 함께 비교되게 한페이지에 같이 작성이 됩니다.
counter_bloc.dart
import 'package:bloc/bloc.dart';
import 'package:meta/meta.dart';
part 'counter_event.dart';
class CounterBloc extends Bloc<CounterEvent, int> {
CounterBloc() : super(0) {
on<CounterIncrement>((event, emit) {
emit(state + 1);
});
on<CounterDecrement>((event, emit) {
emit(state - 1);
});
}
}
BLOC는 cubit 과달리 event 처리를 해야한다.
counter_state.dart
part of 'counter_bloc.dart';
@immutable
abstract class CounterEvent {}
final class CounterIncrement extends CounterEvent {}
final class CounterDecrement extends CounterEvent {}
Home 화면으로 Cubit과 함께 BLOC를 같이 쓸 수 있습니다.
비교도 할겸 같이 만들어 보았습니다.
import 'package:flutter_bloc/flutter_bloc.dart';
import 'bloc/counter_bloc.dart';
class CountScreen extends StatelessWidget {
CountScreen({super.key});
@override
Widget build(BuildContext context) {
//큐빗
final counterCubit = BlocProvider.of<CounterCubit>(context);
//블락
final counterBloc = BlocProvider.of<CounterBloc>(context);
return Scaffold(
appBar: AppBar(title: Text('counter')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'You have pushed the button this many times:',
),
//큐빗
BlocBuilder<CounterCubit, int>(
bloc: counterCubit,
builder: (context, cubitstate) {
return Text('Cubit ${cubitstate}');
},
),
//블락
BlocBuilder<CounterBloc, int>(
builder: (context, blocstate) {
return Text('BLOC ${blocstate}');
},
),
// Text('${context.read<CounterCubit>().state}'),
// Text('Bloc ${state}'),
// Text('${counterCubit.count}'),
//coubit
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FloatingActionButton(
onPressed: () => counterCubit.increase(),
child: const Icon(Icons.add),
),
Text(' Cubit '),
FloatingActionButton(
onPressed: () => context.read<CounterCubit>().decrease(),
child: const Icon(Icons.minimize),
),
],
),
//Bloc
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FloatingActionButton(
onPressed: () => counterBloc.add(CounterIncrement()),
child: const Icon(Icons.add),
),
Text(' BLOC '),
FloatingActionButton(
onPressed: () => counterBloc.add(CounterDecrement()),
child: const Icon(Icons.minimize),
),
],
),
],
),
),
);
}
}
'Flutter' 카테고리의 다른 글
RiverPod when 과 Bloc 비교 . Cubit도 가능 Switch, 비슷합니다. (0) | 2024.02.03 |
---|---|
Cubit 과 RiverPod 는 비슷한 점이 있다? (0) | 2024.02.03 |
Cubit basic add sub 프로바이더인가 (0) | 2024.02.03 |
RiverPod basic 1 add & sub 더하기 빼기 (0) | 2024.02.01 |
flutter State Management 상태관리 어떤걸 쓰지? getx provoder bloc.... (0) | 2024.02.01 |