Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Flatter BLoC`buildWhen`属性_Flutter_Dart_Bloc - Fatal编程技术网

Flutter Flatter BLoC`buildWhen`属性

Flutter Flatter BLoC`buildWhen`属性,flutter,dart,bloc,Flutter,Dart,Bloc,我在这段代码的最后一行得到一个\u CastError错误 blocbuilderbuildusernamefield(){ 返回BlocBuilder( buildWhen:(上一个,当前)=>previous!=当前和当前是EditingUserInfo, 生成器:(上下文,状态)=>TextField( 键盘类型:TextInputType.name, 控制器:TextEditingController( text:(状态为EditingUserInfo.username.value),

我在这段代码的最后一行得到一个
\u CastError
错误

blocbuilderbuildusernamefield(){
返回BlocBuilder(
buildWhen:(上一个,当前)=>previous!=当前和当前是EditingUserInfo,
生成器:(上下文,状态)=>TextField(
键盘类型:TextInputType.name,
控制器:TextEditingController(
text:(状态为EditingUserInfo.username.value),

I/flutter (26787): The following _CastError was thrown building BlocBuilder<ProfileBloc, ProfileState>(dirty, state:
I/flutter (26787): _BlocBuilderBaseState<ProfileBloc, ProfileState>#25b87):
I/flutter (26787): type 'Success' is not a subtype of type 'EditingUserInfo' in type cast

您仍然需要检查状态变量是否为正确的状态。每次更改时都会检查状态,因此状态变量仍然可以是不同的状态,除非buildWhen条件为true,否则不会重新生成

BlocBuilder buildUsernameField() {
return BlocBuilder<ProfileBloc, ProfileState>(
buildWhen: (previous, current) => previous != current && current is EditingUserInfo,
builder: (context, state) {
 if(state is EditingUserInfo) {
  TextField(
  keyboardType: TextInputType.name,
  controller: TextEditingController(
      text: state.username.info)
}
}
blocbuilderbuildusernamefield(){
返回BlocBuilder(
buildWhen:(上一个,当前)=>previous!=当前和当前是EditingUserInfo,
生成器:(上下文、状态){
如果(状态为EditingUserInfo){
文本字段(
键盘类型:TextInputType.name,
控制器:TextEditingController(
文本:state.username.info)
}
}

显示您的状态文件
ProfileState
&扩展它的类。我用我的ProfileState类更新了帖子OK,si这意味着我不太理解
buildWhen
builder
字段。到目前为止,我认为
builder
中返回的小部件只在boole出现时才会自行构建
buildWhen
中指定的条件应该是真的。但是你现在向我展示的是我认为是错的。小部件应该返回给
builder
而不是
buildWhen
中,只有当条件为真时才会生成。对吗?不,我错了。你所拥有的大部分都是对的,但是在buil中对于方法,您仍然需要检查以确保它是正确的状态。BlocBuilder仍然检查每个状态更改,这意味着“state”变量仍然可以是不同的状态,除非它处于该状态,否则它不会重新生成。我已经编辑了我的答案。我明白了,但是
buildWhen
字段的用途是什么?因为建议此属性的全部要点是检查生成器函数何时应该运行:OIt is。这意味着生成器只会在您的条件为true时重建小部件,但它仍然“检查”所有状态更改。请确保在所有其他条件下返回false。