【问题标题】:Dispose method not called in flutter颤振中未调用处置方法
【发布时间】:2020-08-20 00:17:04
【问题描述】:

我面临一个问题,在flutter中更改屏幕后没有调用dispose方法。首先这里是源代码。

class Game extends StatefulWidget {

  Game({Key key, this.title}) : super(key: key);

  final String title;
  @override
  _GameState createState() => new _GameState();
}

class _GameState extends State<Game>  with SingleTickerProviderStateMixin {

  final CrosswordController myController = CrosswordController();

  var chewieController = null;
  var videoPlayerController = null;


  Widget makeVideoStreaming(){
    videoPlayerController = VideoPlayerController.network("https://somelink.com");
    chewieController = ChewieController(//paramtere here
    );
  }

  @override
  void initState() {
    super.initState();
   this.makeVideoStreaming();
    _controller =  AnimationController(vsync: this, duration: Duration(minutes: gameTime));
  }

  @override
  void dispose(){
    print('DISPOSE CALLED- GAME---');
    videoPlayerController.dispose();
    chewieController.dispose();
    _controller.dispose();
    super.dispose();
  }
  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: _onBackPressed,
      child:  Scaffold(
        key: _scaffoldKey,
        drawer: NavigationDrawer(),
        resizeToAvoidBottomPadding: false,

        body://body here
      ),
    );
  }
}

NavigationDrawer() 中,我更改为类似这样的一些不同路线。

 onTap: () {
   Navigator.pop(context); Navigator.pushNamed(context, '/edit_profile');
 },

以上只是点击抽屉列表项中的一项后调用的代码的一部分。 为什么在GameState dispose 方法没有调用?

【问题讨论】:

  • 尝试只推送到edit_profile页面并检查它是否有效?
  • 不,没有用
  • 您的 dispose 未被调用,因为该小部件以某种方式保存在小部件树中,请尝试使用 Navigator.pushReplacement('the replacement'),

标签: flutter flutter-state


【解决方案1】:

从堆栈中移除屏幕时调用的 Dispose 方法意味着当您使用 navigator.pop()pushReplacement;

【讨论】:

  • 那么请建议我如何解决这个问题?我的意思是从导航抽屉作为我发送给你的屏幕是应用程序的主屏幕
  • 您可以创建一个方法并在导航之前调用它。
  • 您想在按下返回按钮时返回该屏幕吗?如果不是,则使用推送替换。
  • 我试过了。但是我出现了一个错误!当我使用推送替换时,编辑个人资料页面现在没有后退按钮
  • 这也是我提到的。如果您不想返回该屏幕,那么只有这样才能工作。我认为对您来说唯一的解决方案是创建一个单独的方法并在 dispose 方法中执行您正在执行的任何操作并在导航到其他屏幕之前调用它,
【解决方案2】:

这是一个已知错误:https://github.com/flutter/flutter/issues/40940
即使您从官方文档中复制示例,它也不会被调用:https://flutter.dev/docs/cookbook/networking/web-sockets#complete-example
我已经启动了一个 flutter-dev 线程来确定是否应该使用其他东西:https://groups.google.com/g/flutter-dev/c/-0QZFGO0p-g/m/bictyZWCCAAJ

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2022-11-17
    • 2021-08-06
    • 1970-01-01
    • 2019-08-13
    • 2021-06-08
    • 2021-04-06
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多