在第一次构建期间调用两次 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,
                  )));
    });