【问题标题】:Flutter onWillPop never calledFlutter onWillPop 从未调用过
【发布时间】:2022-08-18 17:28:59
【问题描述】:

我已经阅读了几个与该主题相关的问题,但任何解决方案都对我有用。 这是我的代码。可能还有一些其他问题或代码改进,但我在 Flutter 中还很新。但无论如何,代码有效。

class Calendario1 extends StatelessWidget {
  final List listaini;
  Calendario1(this.listaini);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: \"ATGapp\",
      home:Cal1(listaini: listaini),
    );
  }
}

class Cal1 extends StatefulWidget {
  final List listaini;
  Cal1({Key? key,required this.listaini}) : super(key: key);

  @override
  ///
  _Cal1State createState() => _Cal1State();
}

class _Cal1State extends State<Cal1> {
  @override
  void initState() {
    getImage(path1);
    super.initState();
  }

  String url_1 = \'\';

  getImage(String path1) async {
    //String url=\'\';
    final ref1 = FirebaseStorage.instance.ref().child(path1);
    var url1 = await ref1.getDownloadURL();
    setState(() => url_1 = url1);
  }

  final FirebaseStorage storage =
      FirebaseStorage.instance;
  String path1 = \'fondos/mons.jpeg\';

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: ()async{
        print(\'Bck button pressed\');
        return false;
      },
      child: Scaffold(
          body: Column(...//and so on

我还尝试用 de WillPopScope 包装 MaterialApp 小部件,但结果是相同的,从未调用过。 先感谢您

    标签: flutter


    【解决方案1】:

    您遇到此问题的原因是因为您没有推送到新页面,所以当您弹出它时调用它。为了调用 WillPopScope,您应该执行此操作,例如从 MaterialApp 加载页面 A,然后导航到页面 B,如果您按下 WillPopScope 应该调用的按钮,则导航到页面 B。

    【讨论】:

    • 如果我用 Navigator.maybePop(context, true); 替换打印行它仍然从未被调用。我不知道我是否需要做更多的事情。
    • 不,您没有以正确的方式使用它。请参阅this 了解更多信息。
    【解决方案2】:

    我找到了重组应用程序的解决方案。 我将每一页都放在不同的 dart 文件中,而 onwillpop 从未调用过。 现在,我将所有页面都放在一个由 MaterialApp 中的路由构成的文件中,并且我能够处理 android 后退按钮事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-02
      • 2021-02-27
      • 1970-01-01
      • 2020-12-04
      • 2020-06-30
      • 2014-11-23
      • 2017-08-27
      • 2012-08-09
      相关资源
      最近更新 更多