我面临一个问题,其中dispose方法是不调用后,在flutter。首先这里是源代码。
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()
中,i改变了一些不同的路由,就像这样。
onTap: () {
Navigator.pop(context); Navigator.pushNamed(context, '/edit_profile');
},
上面只是一部分代码,在点击抽屉列表项中的一个项后调用。为什么在GameState
中不调用dispose方法?
3条答案
按热度按时间jmo0nnb31#
从堆栈中移除屏幕时调用的Dispose方法是指使用navigator.pop()或pushReplacement;
wnrlj8wa2#
这是一个已知bug: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
s71maibg3#
您可以使用maintainState:MaterialPageRoute小部件中的false