[英]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.