[英]Flutter web resizing triggering bloc event?
每當我調整我的 chrome 瀏覽器大小時,它都會發出一個事件來向我的專欄添加一個新的“變體”,我不知道它可能會觸發它。 我知道它會觸發 on add variant 事件,但我不知道為什么它會在調整大小時或放大或縮小時觸發。
建設者
BlocBuilder<VariantBloc, VariantState>(
builder: (context, state) {
if(state is AddedVariantState){
variants++;
}else if (state is DeletedVariantState){
variants--;
usecase.multipleUsecase.removeAt(state.index);
}
return Align(
alignment: Alignment.centerLeft,
child: ListView.builder(
shrinkWrap: true,
itemCount: variants,
itemBuilder: (context, index) {
usecase.multipleUsecase.add(MultipleAddServiceUsecase(index: index));
return VariantTextfield(
usecase: usecase.multipleUsecase[index],
index: index,
);
},
),
);
},
),
觸發事件的按鈕
class MarketplaceAddProductVariantButton extends StatelessWidget {
const MarketplaceAddProductVariantButton({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Align(
alignment: Alignment.centerLeft,
child: NeumorphicButton(
onPressed: () {
context
.read<VariantBloc>()
.add(OnAddVariantEvent());
},
margin:
EdgeInsets.only(left: ScreenUtils.percentWidth(context, .5)),
style: marketplaceButtonsNeuStyle.copyWith(
boxShape:
NeumorphicBoxShape.roundRect(BorderRadius.circular(17))),
child: Container(
alignment: Alignment.center,
height: ScreenUtils.percentHeight(context, 4.5),
width: ScreenUtils.percentWidth(context, 12),
child: AutoSizeText(
'Agregar otro',
textAlign: TextAlign.center,
style: _textStyle(),
)),
),
);
}
剛剛發出事件的集團。
VariantBloc() : super(VariantInitial()) {
on<OnAddVariantEvent>((event, emit) {
emit(AddedVariantState(());
});
實際上,它並沒有觸發新事件。 當您調整 window 的大小時, build
function 將被調用,因此BlocBuilder
將被重建,如果最后發出的 state 是AddedVariantState
則此條件if(state is AddedVariantState)
將為真並且variants
變量將增加。 如果最后發出的 state 是DeletedVariantState
,則會發生相反的行為。 這就是為什么您應該將variants
變量放在VariantState
class 中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.