【问题标题】:How to go from one screen to another clearing all the previous screens from stack?如何从一个屏幕转到另一个屏幕从堆栈中清除所有先前的屏幕?
【发布时间】:2019-07-18 00:56:28
【问题描述】:

在我的 Flutter 项目中,我有三个屏幕 - Screen0、Screen1、Screen2。现在,从 screen0 ,我可以通过点击按钮进入 screen1 ,然后从 screen1 我们可以通过一个按钮进入 screen2 。在 screen2 中,我有一个用于返回 screen0 的按钮。由于 Screen0 是初始屏幕,当我回到 Screen0 时,我想清除所有以前的屏幕,并且不希望像此图像中那样有任何后退选项 -

这是我的代码-

main.dart

import 'package:flutter/material.dart';
import 'screen0.dart';
import 'screen1.dart';
import 'screen2.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      routes: {
        '/': (context)=> Screen0(),
        '/first': (context)=> Screen1(),
        '/second': (context)=> Screen2(),
      },
    );
  }
}

我已经在我的 main.dart 文件中设置了所有路由。然后在 Screen0 中,我有一个按钮可以转到 screen1,如下所示-

screen0.dart

导入'package:flutter/material.dart';

class Screen0 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.purple,
        title: Text('Screen 0'),
      ),

      body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              color: Colors.red,
              child: Text('Go to screen 1'),
              onPressed: (){
                Navigator.pushNamed(context, '/first');
              },
            ),

          ],
        ),
      ),

    );
  }

}

在screen1中,我有一个按钮可以转到screen2-

class Screen1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.purple,
        title: Text('Screen 1'),
      ),

      body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              color: Colors.red,
              child: Text('Go to screen 2'),
              onPressed: (){
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) {
                    return Screen2();
                  })
                );
              },
            ),
          ],
        ),
      ),

    );
  }

}

现在,在 screen2 中,我有转到 screen0 的按钮 -

class Screen2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.purple,
        title: Text('Screen 2'),
      ),

      body: Center(
        child: Column(
          children: <Widget>[
            RaisedButton(
              color: Colors.red,
              child: Text('Go to screen 0'),
              onPressed: (){
                Navigator.pop(context, Screen2);
                Navigator.pushNamed(context, '/');
              },
            ),

          ],
        ),
      ),

    );
  }

}

我尝试了一些解决方案,例如使用下面链接中给出的 Navigator.pushAndRemoveUntil -

Flutter - Navigate to a new screen, and clear all the previous screens

但是这个解决方案对我不起作用。

所以,如果有人帮我解决这个问题,那就太好了。

【问题讨论】:

标签: flutter dart


【解决方案1】:

使用 pushNamedAndRemoveUntil

例如

Navigator.of(context).pushNamedAndRemoveUntil('/screen4', (Route<dynamic> route) => false);

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 2020-07-27
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多