gpt4 book ai didi

android - Flutter重新运行内部StatefulWidget的initState函数

转载 作者:行者123 更新时间:2023-12-03 04:35:51 25 4
gpt4 key购买 nike

我有一个外部StatefulWidget和一个内部StatefulWidget。当我在外部Widget上使用setState()时,内部Widget的build函数将重新运行。有没有办法也可以触发initState方法?
这是内部小部件:

class _Image extends StatefulWidget {

final String _imageId;

_Image(this._imageId);

@override
State createState() => new _ImageState();

}
class _ImageState extends State<_Image> {

ImageResponse image;

@override
void initState() {
super.initState();

// fetch image using the provided imageId
fetchImage(widget._imageId).then((ImageResponse imageResponse) {
setState(() {
image = imageResponse;
});
});
}


@override
Widget build(BuildContext context) {
return new Container(
width: 350.0,
height: 350.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8)),
color: Color(0xffFFFFFF),
image: image != null ? DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(image.downloadURL)
) : null,
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.25),
spreadRadius: 0,
blurRadius: 4,
offset: Offset(0, 4)
)
]
),
);
}

}
如您所见,这是一个非常简单的小部件。您可以提供一个imageId,小部件将获取该图像的数据并将其显示。
现在,我希望在更新外部Widget get时,不仅重新运行build函数,而且还要重新运行initState函数,以便可以获取该imageId的新图像数据。

最佳答案

您可以使用FutureBuilder通过图像加载器显示 View ,直到加载图像为止。每次您启动此小部件时,它将调用该图像。

class _Image extends StatefulWidget {

final String _imageId;

_Image(this._imageId);

@override
State createState() => new _ImageState();

}
class _ImageState extends State<_Image> {

ImageResponse image;

@override
void initState() {
super.initState();

}

Future<ImageResponse> loadImage() async {
ImageResponse res = await fetchImage(widget._imageId);
return res;
}


@override
Widget build(BuildContext context) {
return FutureBuilder(
future: loadImage(),
builder: (context, snapshot) {
if (snapsnot.connectState==ConnectionState.done) {
return new Container(
width: 350.0,
height: 350.0,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(8)),
color: Color(0xffFFFFFF),
image: image != null ? DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(snapshot.data.downloadURL)
) : null,
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.25),
spreadRadius: 0,
blurRadius: 4,
offset: Offset(0, 4)
)
]
),
);
} else {
// paint whatever you want to the screen while the image loads. I'm using an empty container as an example
return Container();
}
}
)


}

}

关于android - Flutter重新运行内部StatefulWidget的initState函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64143802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com