0

In my Flutter project, I have three screens - Screen0, Screen1, Screen2. Now, from the screen0 , I can go to the screen1 with a button click, then from screen1 we can go to screen2 with a button. In screen2, I have a button which I have used to go back to screen0. As Screen0 is the initial screen, I want to clear all the previous screens when I come back to Screen0 and don't want to have any back option like in this image-

enter image description here

And here's my code-

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(),
      },
    );
  }
}

I have set all the routes in my main.dart file. Then in the Screen0, I have a button to go to screen1 like below-

screen0.dart

import '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');
              },
            ),

          ],
        ),
      ),

    );
  }

}

In the screen1, I have a button to go to 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();
                  })
                );
              },
            ),
          ],
        ),
      ),

    );
  }

}

Now, in the screen2, i have the button to go to 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, '/');
              },
            ),

          ],
        ),
      ),

    );
  }

}

I have tried some solution like using Navigator.pushAndRemoveUntil given in the below link-

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

But this solution didn't work for me.

So, it would be nice if someone help me out this code to solve the problem.

S. M. Asif
  • 3,437
  • 10
  • 34
  • 58
  • In what way did `pushAndRemoveUntil` not work? – MichaelM Jul 18 '19 at 01:02
  • Possible duplicate of [Flutter remove all routes](https://stackoverflow.com/questions/45889341/flutter-remove-all-routes) –  Jul 18 '19 at 05:18

1 Answers1

1

use pushNamedAndRemoveUntil

for example

Navigator.of(context).pushNamedAndRemoveUntil('/screen4', (Route<dynamic> route) => false);
Junsu Cho
  • 826
  • 7
  • 16