Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/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 如何在颤振中忽略肘的状态?_Flutter_Dart_Bloc_Cubit - Fatal编程技术网

Flutter 如何在颤振中忽略肘的状态?

Flutter 如何在颤振中忽略肘的状态?,flutter,dart,bloc,cubit,Flutter,Dart,Bloc,Cubit,我使用cubit来管理小部件的状态,并且我只想在发出特定类型的状态时更新小部件 TestData.dart'的一部分; @不变的 抽象类TestState{} 类TestInitial扩展TestState{} 类TestValueUpdated扩展了TestState{ TestValueUpdated(此.message); 最终字符串消息; @凌驾 布尔运算符==(对象其他){ return other is TestValueUpdated&&other.message==message

我使用cubit来管理小部件的状态,并且我只想在发出特定类型的状态时更新小部件

TestData.dart'的一部分;
@不变的
抽象类TestState{}
类TestInitial扩展TestState{}
类TestValueUpdated扩展了TestState{
TestValueUpdated(此.message);
最终字符串消息;
@凌驾
布尔运算符==(对象其他){
return other is TestValueUpdated&&other.message==message;
}
@凌驾
int get hashCode=>message.hashCode;
}
类TestScaleUpdated扩展了TestState{
TestScaleUpdated(this.message);
最终字符串消息;
@凌驾
布尔运算符==(对象其他){
return other是TestScaleUpdated&&other.message==message;
}
@凌驾
int get hashCode=>message.hashCode;
}
我创建了一个名为
TestState
的状态类,该类目前有3种状态:初始状态、值更新状态和比例更新状态

class TestData扩展了Cubit{
//这里的代码
Future keepPlayStatus()异步{
emit(TestValueUpdated(getTimeStamp()+“/”+getMaxTime()+“|”+getPosition());
}
未来更新CaleValueMessage()异步{
emit(TestScaleUpdated((大小*100).round().toInt().toString()+“%”);
}
}
这个名为
TestData
的类使用
TestState
并扩展
Cubit

基本上,当用户通过挤压屏幕来更新缩放值时,该类将发出
TestScaleUpdated
状态,当用户播放某些内容时,它将发出
TestValueUpdated
状态

在UI中

//代码的某个地方,称为小部件A
孩子:BlocBuilder(
生成器:(上下文、状态){
如果(状态为TestValueUpdated){
返回文本(
state.message,
textAlign:textAlign.end,
样式:TextStyle(颜色:TheeManager.getRGBfromHex(0x514745)),
);
}否则{
返回文本(
"00:00.000 / 00:04.800 | 1.1.1",
textAlign:textAlign.end,
样式:TextStyle(颜色:TheeManager.getRGBfromHex(0x514745)),
);
}
},
)
//代码的另一部分称为小部件B
孩子:BlocBuilder(
生成器:(上下文、状态){
如果(状态为TestScaleUpdated){
返回文本(
state.message,
textAlign:textAlign.center,
样式:TextStyle(颜色:TheeManager.getRGBfromHex(0x514745)),
);
}否则{
返回文本(
"100 %",
textAlign:textAlign.center,
样式:TextStyle(颜色:TheeManager.getRGBfromHex(0x514745)),
);
}
},
)
我试过这个密码。当
TestData
发出一些状态时,这两个小部件更新它们的状态。这个代码的问题是,如果用户播放某个东西,由于不会发出
TestScaleUpdated
状态,小部件B的状态会返回到初始状态,始终显示“100%”

如果用户更新比例,则不会发出
TestValueUpdated
,因此小部件A将始终具有初始状态,显示“00:00.000/00:04.800 | 1.1.1”

所以我现在要做的是,我想让widget忽略状态更新。例如,在
BlocBuilder的生成器中

(上下文、状态){
如果(状态为TestScaleUpdated){
返回文本(“缩放!”);
else if(状态为TestInitial){
返回文本(“首字母!”);
}否则{
//忽略或保留小部件的状态
}
}
如果我详细解释一下,这里的问题是: 让我们假设用户播放了一些东西,因此小部件A的文本更改为
00:10.000/00:40.000 | 2.0.0

然后,当用户尝试更改缩放值时,不仅小部件B受到影响,小部件A也受到影响。但是由于
TestData
仅发出
TestScaleUpdated
状态,小部件A的文本返回到
00:00.000 | 00:04.800 | 1.1.1
,而它应该保留其文本和状态

我想在发出
TestScaleUpdated
时只更新小部件B,在发出
TestValueUpdated
时只更新小部件A。简单地说,用一个cubit类以不同的方式管理两个或多个小部件

我是否必须将这两个状态:
TestScaleUpdated
TestValueUpdated
合并为一个状态,每个小部件包含2条
消息


或者,如果发出的状态不满足特定条件,我可以保留小部件的状态吗?

我会创建一个包含所有必需信息的状态。但是,如果您只想在某些情况下重建小部件,那么您可以对小部件A执行以下操作:

BlocBuilder<TestData, TestState>(
  buildWhen: (oldState, newState) => newState is TestValueUpdated;
  builder: (context, state) {
      return Text(
        state is TestValueUpdated ? state.message : "00:00.000 / 00:04.800 | 1.1.1",
        textAlign: TextAlign.end,
        style: TextStyle(color: ThemeManager.getRGBfromHex(0x514745)),
      );
  },
)
BlocBuilder(
buildWhen:(oldState,newState)=>newState是TestValueUpdated;
生成器:(上下文、状态){
返回文本(
状态为TestValueUpdated?state.message:“00:00.000/00:04.800 | 1.1.1”,
textAlign:textAlign.end,
样式:TextStyle(颜色:TheeManager.getRGBfromHex(0x514745)),
);
},
)

嗯,我应该更详细地解释情况。让我们假设小部件A的文本是
00:10:000/00:40.000 | 2.0.0
。但是,当用户更改比例时,小部件A的文本返回到
00:00.000/00:04.800 | 1.1.1
,而它应该保持时间和数字。我只想在
TestScaleUpdate时更新小部件Bed
状态被发出。我可以将2个状态合并为1个状态,包含小部件A和B所需的所有数据,但我不想创建不必要的数据。合并状态,使包含所有数据的状态成为唯一的方法吗?合并状态是有用的,但可能足以实现我的上述解决方案,因为小部件A随后会重建,以供检查ple,只有当状态发生相应变化时。但我会同时做这两件事:实现BlocBuilder的buildWhen功能和拥有一个保存所有必需数据的状态。哦,对不起,我现在看到了
buildWhen
。是的,我想要这样的东西。非常感谢,我会接受你的回答