zoukankan      html  css  js  c++  java
  • 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'),
            ),
          ),
        );
      }
    }
  • 相关阅读:
    Docker 安装 Logstash
    Docker 安装 Kibana
    go命令行参数
    小程序 表单提交
    小程序picker日历
    小程序,验证码倒计时效果
    flex图片垂直居中
    小程序单选框样式
    wechat-wxparse 使用
    小程序Banner跳转
  • 原文地址:https://www.cnblogs.com/hbolin/p/10582317.html
Copyright © 2011-2022 走看看