【问题标题】:how to disable phone back press in flutter如何在颤动中禁用手机后按
【发布时间】:2019-01-20 21:01:18
【问题描述】:

我是 Flutter 开发的新手。谁能分享我如何在flutter 中禁用后按?

在Android中,我们可以使用onbackpressed方法。

@Override
public void onBackPressed() {
  // super.onBackPressed(); commented this line in order to disable back press
  //Write your code here
  Toast.makeText(getApplicationContext(), "Back press disabled!", Toast.LENGTH_SHORT).show();
}

flutter怎么可能呢?

【问题讨论】:

标签: dart flutter


【解决方案1】:

将您的小部件包装在 WillPopScope 中,并在 onWillPop 属性中返回错误的 Future

    @override
    Widget build(BuildContext context) {
      return WillPopScope(
        onWillPop: () => Future.value(false),
        child: Scaffold(
          appBar: AppBar(
            title: const Text("Home Page"),
          ),
          body: Center(
            child: const Text("Home Page"),
          ),
        ),
      );
    }

请参阅此文档:https://api.flutter.dev/flutter/widgets/WillPopScope-class.html

【讨论】:

  • 它只是用于返回按钮还是主页按钮和最近的活动按钮?
  • 我们无法阻止主页按钮
  • 我们可以使用事件作为主页按钮吗?例如,如果单击主页按钮将需要密码
  • 有没有一种简单的方法可以为整个应用禁用它?还是我必须用 WillPopScope 包裹每个屏幕
【解决方案2】:

最简单的方法是使用WillPopScope,但如果出于某种原因您不想或不能使用WillPopScope 小部件,这里有另一种方法。

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  ModalRoute<dynamic> _route;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    _route?.removeScopedWillPopCallback(_onWillPop);
    _route = ModalRoute.of(context);
    _route?.addScopedWillPopCallback(_onWillPop);
  }

  @override
  void dispose() {
    _route?.removeScopedWillPopCallback(_onWillPop);
    super.dispose();
  }

  Future<bool> _onWillPop() => Future.value(false);

  @override
  Widget build(BuildContext context) => Container();
}

【讨论】:

  • 一个解释会很好。
  • @OjonugwaJudeOchalifu 我不记得我为什么发布这个或者为什么人们更喜欢这个解决方案而不是使用 WillPopScope。这几乎正​​是 WillPopScope 所做的。只需查看github.com/flutter/flutter/blob/master/packages/flutter/lib/src/… 并查看 API 文档以了解 WillPopScope 和 ModalRoute 以获得更好的理解。
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 2023-03-10
  • 2015-12-04
  • 2020-12-30
  • 2019-08-11
  • 1970-01-01
  • 2021-08-20
  • 2020-06-07
相关资源
最近更新 更多