【发布时间】:2022-08-21 14:49:24
【问题描述】:
当您更新 BLoC 中的状态时,您如何处理“接受的空值”? 我使用 flutter_bloc 包。
我有一个表格,其中数字变量可以为空,以便我可以在提交表格之前检查它们的有效性。 但是当我发出一个新状态时,我使用 state.copyWith(var1?, var2?)... 所以当使用空值更新参数时,该值不会更新。
面对这一点,我为每个字段使用自定义 FieldStatus 枚举。在我的表单提交中,我可以检查每个字段的状态。但这有点冗长......并且它需要为每个字段使用 2 个值而不是 1,这不是很令人满意。
我也可以根据它的FieldStatus的新值强制该值为null,但是有点棘手,不是很满意。
您将如何处理这种情况?
这是我所做的:
状态 :
part of \'phhfgroup_bloc.dart\';
class PhhfGroupState extends Equatable
{
final double? height;
final FieldStatus heightStatus;
const PhhfGroupState({this.height, this.heightStatus = FieldStatus.initial});
@override
List<Object?> get props => [height, heightStatus];
PhhfGroupState copyWith({double? height, FieldStatus? heightStatus})
{
return PhhfGroupState(
height: height ?? this.height,
heightStatus: heightStatus ?? this.heightStatus
);
}
}
活动:
part of \'phhfgroup_bloc.dart\';
abstract class PhhfGroupEvent extends Equatable
{
const PhhfGroupEvent();
@override
List<Object> get props => [];
}
class HeightChanged extends PhhfGroupEvent
{
const HeightChanged({required this.height});
final String height;
@override
List<Object> get props => [height];
}
处理程序:
import \'package:equatable/equatable.dart\';
import \'package:flutter_bloc/flutter_bloc.dart\';
import \'package:myapp/models/statuses.dart\';
part \'phhfgroup_event.dart\';
part \'phhfgroup_state.dart\';
class PhhfGroupBloc extends Bloc<PhhfGroupEvent, PhhfGroupState>
{
PhhfGroupBloc() : super()
{
on<HeightChanged>(_mapHeightEventToState);
}
void _mapHeightEventToState(HeightChanged event, Emitter<PhhfGroupState> emit)
{
if(event.height.isEmpty)
{
emit(this.state.copyWith(
height: null,
heightStatus: FieldStatus.empty
));
}
else
{
double? height = double.tryParse(event.height);
if(height == null)
emit(this.state.copyWith(
height: null,
heightStatus: FieldStatus.nonnumeric
));
else emit(this.state.copyWith(
height: height,
heightStatus: FieldStatus.numeric
));
}
}
}
谢谢 !
标签: flutter dart null bloc flutter-bloc