عشان البلوك يبقى جلوبال بين الصفح:
الكلام اللي جي لازم يتحط جوا Builder
context.selector.state.الجزء اللي عايزه يتغير بس لما الجزء دا يتغير
وتقوم مديها للويجت اللي عايزها ت ريبلد على أساس الجزء دا بس
في السيليكت، انت بتحدد الجزء اللي جوا الستيت اللي عايز الويجدت تتغير على أساسه، إنما في الطبيعي الويجدت بتتغير مع تغير الستيت كلها، لكن هنا لأ انت بتغيرها على أساس فيرابل معين انت بتحدده جوا الستيت.
في المثال: على أساس الكاونتر فاليو لو اتغير، إبقى غير الويجدت
Builder(
builder: (context) {
final counterValue = context
.select((CounterCubit cubit) => cubit.state.counterValue);
return Text(
'Counter: $counterValue',
style: Theme.of(context).textTheme.titleLarge,
);
},
),
context.watch.state بلوك1
context.watch.state بلوك2
او عايز تسمّع ويجت واحدة اتنين بلوك
Builder(
builder: (context) {
final counterState = context.watch<CounterCubit>().state;
final internetState = context.watch<InternetCubit>().state;
if (internetState is InternetConnected &&
internetState.connectionType == ConnectionType.Mobile) {
return Text(
'Counter: ${counterState.counterValue} Internet: Mobile',
style: Theme.of(context).textTheme.titleLarge,
);
} else if (internetState is InternetConnected &&
internetState.connectionType == ConnectionType.Wifi) {
return Text(
'Counter: ${counterState.counterValue} Internet: Wifi',
style: Theme.of(context).textTheme.titleLarge,
);
} else {
return Text(
'Counter: ${counterState.counterValue} Internet: Disconnected',
style: Theme.of(context).textTheme.titleLarge,
);
}
},
),
لو فيه اتنين بلوك مرتبطين ببعض، يإما بتعرف البلوك التاني جوا الأولاني وبتستخدمه، ودا ميزته انه بتهندل اللوجيك جوا البلوك وعيبه انه بتبقى شايل هم الستريم
إما تستخدم ليسينر، وتستخدم الاتنين مع بعض، ميزته انك بتتجنب هم الستريم، وعيبه انك بتكتب لوجيك في الui
اهتم بإنك تسمي الكونتكست بإسم التريي اللي هو فيها عشان مافيش كونتكست تستخدمه في مكان مش مكانه