【问题标题】:Flutter initState and dispose called twice during first buildFlutter initState 和 dispose 在第一次构建期间调用了两次
【发布时间】:2021-08-13 10:10:32
【问题描述】:

我有一个具有三个屏幕的应用程序。当我从第二个屏幕转到第三个屏幕时。第三个屏幕的 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

【问题讨论】:

    标签: flutter flutter-dependencies flutter-web


    【解决方案1】:

    这很可能是发生了什么:

    socket.on('start-resp', (_) {
          print("MOST LIKELY I'M CALLED TWICE");
          Navigator.pushReplacement(
              context,
              MaterialPageRoute(
                  builder: (context) => GameScreen(
                        username: widget.username,
                      )));
        });
    

    【讨论】:

      猜你喜欢
      • 2019-08-30
      • 2019-10-02
      • 2017-01-19
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2018-06-07
      相关资源
      最近更新 更多