【发布时间】:2021-03-16 20:52:29
【问题描述】:
我有在页面更改时卸载的小部件。
我正在使用颤振网络。
我查看了所有方法 here,但似乎找不到。
我试过了
@override
void dispose() {
print("dispose?");
super.dispose();
}
@override
void deactivate() {
print("deactivate");
super.deactivate();
}
两者都没有被调用。
当小部件没有“构建”(渲染)时,我需要检测这是一件非常简单的事情。我不认为有一些东西可以检测页面更改是解决方案,这似乎有点矫枉过正。 谢谢
添加代码示例
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
title: 'Named Routes Demo',
initialRoute: '/',
routes: {
'/': (context) => FirstScreen(),
'/second': (context) => SecondScreen(),
},
));
}
class FirstScreen extends StatefulWidget {
FirstScreen({Key key}) : super(key: key);
@override
_FirstScreenState createState() => _FirstScreenState();
}
class _FirstScreenState extends State<FirstScreen> {
@override
void dispose() {
print("dispose");
super.dispose();
}
@override
void deactivate() {
print("deactivate");
super.deactivate();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('First Screen'),
),
body: Center(
child: ElevatedButton(
child: Text('Launch screen'),
onPressed: () {
Navigator.pushNamed(context, '/second');
},
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Second Screen"),
),
body: Center(
child: ElevatedButton(
onPressed: () {
// Navigate back to the first screen by popping the current route
// off the stack.
Navigator.pop(context);
},
child: Text('Go back!'),
),
),
);
}
}
当导航到第二个屏幕并且第一个屏幕小部件不再是渲染树的一部分时,似乎既没有调用 deactive 也没有调用 dispose。那么调用什么来检测 Screen 1 离开了渲染树呢?
【问题讨论】:
-
所以您是说小部件已卸载,但您没有采取任何措施将其从小部件树中移除?也许发布一些演示该问题的代码会有所帮助。
-
@user1032613 添加。当第一个屏幕停止重新渲染时,我想从第一个屏幕检测。在反应中,我们有带有类的 componentDidUnmount。是否有等效的颤振?
标签: flutter flutter-web