Удаление флаттера между маршрутами - PullRequest
0 голосов
/ 08 января 2020

В моем приложении флаттера я хочу удалить между маршрутами , поэтому, когда пользователь нажимает назад, он будет go с предыдущего на предыдущий экран. Ниже приведена последовательность действий моего экрана.

  1. Целевой экран панели инструментов.
  2. Пользователь нажимает кнопку Список тем c и попадает на Список тем page.
  3. Пользователь нажимает на Создать новую топи c и попадает на новую страницу с формой для заполнения базовой c информацией для топи c.
  4. После заполнения формы пользователь нажимает кнопку save и попадает на новую страницу с подробностями topi c, которые он только что создал.
  5. Сейчас если пользователь нажимает кнопку назад, он / она должен попасть на страницу Список тем вместо Создать новую страницу c.
  6. Также, если он снова нажмет форму На странице Список тем он должен видеть панель управления, а не выходить из приложения.

Заранее благодарю.

1 Ответ

2 голосов
/ 08 января 2020

Просто используйте pushReplacement вместо push, когда хотите пропустить страницу при переходе на back.

enter image description here

import 'dart:math';

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter naviagtion',
      theme: ThemeData(
        backgroundColor: Colors.white,
        primarySwatch: Colors.green,
      ),
      home: DashboardLandingScreen(),
    );
  }
}

class DashboardLandingScreen extends StatelessWidget {
  static Route route() => MaterialPageRoute(
        builder: (context) => DashboardLandingScreen(),
      );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        alignment: Alignment.center,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Dashboard landing screen.'),
            RaisedButton(
              child: Text('List of Topics'),
              onPressed: () => Navigator.of(context).push(
                TopicsListScreen.route(),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

class TopicsListScreen extends StatelessWidget {
  static Route route() => MaterialPageRoute(
        builder: (context) => TopicsListScreen(),
      );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        alignment: Alignment.center,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('List of Topics'),
            RaisedButton(
              child: Text('Create New Topic'),
              onPressed: () => Navigator.of(context).push(
                NewTopic.route(),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

class NewTopic extends StatelessWidget {
  static Route route() => MaterialPageRoute(
        builder: (context) => NewTopic(),
      );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        alignment: Alignment.center,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('page: new topic'),
            RaisedButton(
              child: Text('Save'),
              onPressed: () => Navigator.of(context).pushReplacement(
                CreatedTopicDetails.route(),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

class CreatedTopicDetails extends StatelessWidget {
  static Route route() => MaterialPageRoute(
        builder: (context) => CreatedTopicDetails(),
      );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        alignment: Alignment.center,
        child: Text('page: created topic details'),
      ),
    );
  }
}
...