Flutter 如何在颤振中忽略肘的状态?
我使用cubit来管理小部件的状态,并且我只想在发出特定类型的状态时更新小部件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
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
。是的,我想要这样的东西。非常感谢,我会接受你的回答