在第一次构建期间调用两次 Flutter initState 和 dispose
Flutter initState and dispose called twice during first build
我有一个具有三个屏幕的应用程序。当我从第二个屏幕转到第三个屏幕时。第三屏的initState和dispose一起被调用了两次。
代码的相关部分:
屏幕 2
@override
void dispose() {
print("Screen2: dispose");
socket.io.disconnect();
super.dispose();
}
socket.on('start-resp', (_) {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => GameScreen(
username: widget.username,
)));
});
屏幕 3
@override
void dispose() {
print("Screen3: dispose");
socket.io.disconnect();
super.dispose();
}
@override
void initState() {
super.initState();
print("Screen3: init");
}
@override
Widget build(BuildContext context) {
print("Screen3: Build");
输出:
Screen3: init
Screen3: Build
Screen3: init
Screen3: Build
Screen3: dispose
Screen2: dispose
最有可能的情况是:
socket.on('start-resp', (_) {
print("MOST LIKELY I'M CALLED TWICE");
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => GameScreen(
username: widget.username,
)));
});
我有一个具有三个屏幕的应用程序。当我从第二个屏幕转到第三个屏幕时。第三屏的initState和dispose一起被调用了两次。 代码的相关部分:
屏幕 2
@override
void dispose() {
print("Screen2: dispose");
socket.io.disconnect();
super.dispose();
}
socket.on('start-resp', (_) {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => GameScreen(
username: widget.username,
)));
});
屏幕 3
@override
void dispose() {
print("Screen3: dispose");
socket.io.disconnect();
super.dispose();
}
@override
void initState() {
super.initState();
print("Screen3: init");
}
@override
Widget build(BuildContext context) {
print("Screen3: Build");
输出:
Screen3: init
Screen3: Build
Screen3: init
Screen3: Build
Screen3: dispose
Screen2: dispose
最有可能的情况是:
socket.on('start-resp', (_) {
print("MOST LIKELY I'M CALLED TWICE");
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => GameScreen(
username: widget.username,
)));
});