• Flutter 根界面退出的时候(即是应用退出),不会触发deactivate/dispose方法 / 监听返回按钮


    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @override
      Widget build(BuildContext context) {
        print('----------------!!!!!build  111!!!!----------------');
        return Scaffold(
            body: GestureDetector(
          behavior: HitTestBehavior.opaque,
          onTap: () {
            Navigator.of(context).push(new MaterialPageRoute(builder: (_) => SecondPage()));
          },
          child: Container(
            color: Colors.red,
          ),
        ));
      }
    
      @override
      void deactivate() {
        super.deactivate();
        print('----------------!!!!!deactivate  111!!!!----------------');
      }
    
      @override
      void dispose() {
        print('----------------!!!!!dispose  111!!!!----------------');
        super.dispose();
      }
    }

    输出结果:

    I/flutter (18058): ----------------!!!!!build  111!!!!----------------

    处理方法:使用 WillPopScope 来处理。以下是参考案例:

    class HomePage extends StatefulWidget {
      @override
      _HomePageState createState() => _HomePageState();
    }
    
    class _HomePageState extends State<HomePage> {
      Future<bool> _onBackPressed() {
        return showDialog(
            context: context,
            builder: (context) => AlertDialog(
                  title: Text('确定退出程序吗?'),
                  actions: <Widget>[
                    FlatButton(
                      child: Text('暂不'),
                      onPressed: () => Navigator.pop(context, false),
                    ),
                    FlatButton(
                      child: Text('确定'),
                      onPressed: () => Navigator.pop(context, true),
                    ),
                  ],
                ));
      }
    
      @override
      Widget build(BuildContext context) {
        return WillPopScope(
          onWillPop: _onBackPressed,
          child: Scaffold(
            appBar: AppBar(
              title: Text('title'),
            ),
            body: Center(
              child: Text('exit'),
            ),
          ),
        );
      }
    }
  • 相关阅读:
    ACM_求f(n)
    ACM_四数之和
    jQuery 3D旋转展示焦点图
    jQuery+CSS3动画相册特效
    jQuery/CSS3实现Android Dock效果
    html5/CSS3鼠标滑过图片特效插件
    CSS3定时提示动画特效
    日期选择插件
    HTML5/CSS3淡入淡出滑块焦点图
    HTML5/CSS3动画下拉菜单
  • 原文地址:https://www.cnblogs.com/hbolin/p/10582317.html
Copyright © 2020-2023  润新知