Flutter WillPopScope对我来说正常工作,但是当我导航或推回到同一页面时,它不起作用

时间:2019-07-17 14:11:06

标签: android flutter dart

我的问题是,我有一个主页,然后登录页面,然后是一个主页,如果我按主页上的注销,它应该将我导航回到包含willpopscope的主页,我想要做的是阻止用户按下主页上的后退按钮,以使应用程序在没有用户登录的情况下不会返回首页,问题是,当我Navigator.push主页时,willpopscope无法使用返回按钮,它使我回到主页。

我尝试更改WillPopScope的位置,如果用它包装整个小部件,它将永远无法工作

要复制的代码

//Main page:
class MainActivity extends StatefulWidget {
  final bool isWelcome;
  MainActivity(this.isWelcome);
  @override
  State<StatefulWidget> createState() {
    return OperateMainActivity(isWelcome);
  }
}

class OperateMainActivity extends State<MainActivity> {
  bool isWelcome = false;
  OperateMainActivity(this.isWelcome);
  @override
  Widget build(BuildContext context) {
    //print(isWelcome);
    return MaterialApp(
        home: MyHome(
      isWelcome: isWelcome,
    ));
  }
}

class myHome extends StatelessWidget
return Scaffold(
      body: Center(
          child: WillPopScope(
            onWillPop: () async => false,
        child: Container(....)


// Home page

Navigator.push(context,MaterialPageRoute(builder: (context) => MainActivity(false)));

//When pushing to main activity WillPopScope does not work

1 个答案:

答案 0 :(得分:0)

按下时不会呼叫

WillPopScope。这是合乎逻辑的行为,因为当您推入另一个视图时,它会超出堆栈中的当前视图。因此,当前视图永远不会弹出。

如果您知道MainActivity在堆栈中当前页面的下方,则可以更改:

Navigator.push(context,MaterialPageRoute(builder: (context) => MainActivity(false)));

收件人:

Navigator.pop(context); // This will make a call to onWillPop.

更新:

要实现的目标,您可以使用pushAndRemoveUntil

Navigator.of(context).pushAndRemoveUntil(
  MaterialPageRoute(
    builder: (context) {
      return MainActivity();
    },
  ),
  (Route<dynamic> route) => false,
);

它将推送所需的页面并从堆栈中删除所有其他内容。