Flutter 试图从小部件访问状态,可能使用了错误的设计
我正在学习Flitter并尝试制作一种可变图像小部件。我们的想法是制作一个可变映像StatefulWidget,在提供新映像时重建它。我尽量避免在每次更改图像时重建整个窗口小部件树,因为这似乎有些过分,我计划每秒更新几次图像。所以我只想重建那个可变图像小部件 下面是我的代码,其中有一些注释来解释我的困境:Flutter 试图从小部件访问状态,可能使用了错误的设计,flutter,widget,state,Flutter,Widget,State,我正在学习Flitter并尝试制作一种可变图像小部件。我们的想法是制作一个可变映像StatefulWidget,在提供新映像时重建它。我尽量避免在每次更改图像时重建整个窗口小部件树,因为这似乎有些过分,我计划每秒更新几次图像。所以我只想重建那个可变图像小部件 下面是我的代码,其中有一些注释来解释我的困境: class MutableImage extends StatefulWidget { @override State<StatefulWidget> createStat
class MutableImage extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return MutableImageState();
}
void updateImage(List<int> bytes) {
// !!!!!! Would like to call this method here, but state is not available from Widget, which means I want to do something wrong, but not sure exactly how I should do it...
// this.state.updateImage(bytes);
}
}
class MutableImageState extends State<MutableImage> {
List<int> _bytes;
void updateImage(List<int> bytes) {
setState(() {
_bytes=bytes;
});
}
@override
Widget build(BuildContext context) {
if ((_bytes==null)||(_bytes.length==0)) {
return Center(child: CircularProgressIndicator());
}
return Image.memory(_bytes);
}
}
类MutableImage扩展StatefulWidget{
@凌驾
状态createState(){
返回MutableImageState();
}
void updateImage(列表字节){
//!!!!!!!!!想在这里调用此方法,但小部件中的状态不可用,这意味着我想做错事,但不确定该如何做。。。
//this.state.updateImage(字节);
}
}
类MutableImageState扩展了状态{
列表_字节;
void updateImage(列表字节){
设置状态(){
_字节=字节;
});
}
@凌驾
小部件构建(构建上下文){
如果(_字节==null)| |(_字节.长度==0)){
返回中心(子项:CircularProgressIndicator());
}
返回Image.memory(_字节);
}
}
然后,我们的想法是在另一个有状态的小部件中使用这个小部件
MutableImage _mutableImage;
@override
Widget build(BuildContext context) {
if (_mutableImage == null) _mutableImage=MutableImage();
return : Row( //using Row as an example, the idea is that the mutable Image is deep into a tree of widgets, and I want to rebuild only _mutableImage when image changes, not all widgets.
children : <Widget>[
child0, child1, _mutableImage, child3, child4
]
);
}
void updateImage(List<int> bytes) {
_mutableImage?.updateImage(bytes);
}
MutableImage\u MutableImage;
@凌驾
小部件构建(构建上下文){
如果(_mutableImage==null)_mutableImage=mutableImage();
return:Row(//以Row为例,其思想是可变图像深入到小部件树中,我只想在图像更改时重建_mutableImage,而不是所有小部件。
儿童:[
child0,child1,_可变图像,child3,child4
]
);
}
void updateImage(列表字节){
_可变图像?.updateImage(字节);
}
那么,有没有一个好方法可以做到这一点?我很困惑,谢谢你的帮助/提示。这是一个应用
GlobalKey
的地方。在MutableImage
的父窗口小部件中,生成一个全局键并将其传递给MutableImage
。使用该键,您可以使用键上的.currentState
并调用updateImage
来访问MutableImage
状态
您必须添加key作为MutableImage
构造函数的参数,并调用super(key:key)
<代码>更新图像也应移动到可变图像
的状态
关键:
访问国家:
_imageKey.currentState.updateImage();
哦,好的,thx,这看起来确实是一个很好的解决方案。让我测试一下,我会接受答案的。GlobalKey变量似乎应该使用MutableImageState,而不是MutableImage(编辑了您的答案)。@jptsetung很抱歉,它应该是状态。
MutableImage(key: _imageKey);
_imageKey.currentState.updateImage();