Możesz usunąć przycisk Wstecz, przekazując pusty new Container()
jako leading
argument do swojegoAppBar
.
Jeśli jednak okaże się, że to robisz, prawdopodobnie nie chcesz, aby użytkownik mógł nacisnąć przycisk Wstecz urządzenia, aby wrócić na wcześniejszą trasę. Zamiast dzwonić pushNamed
, spróbuj zadzwonić, Navigator.pushReplacementNamed
aby spowodować zniknięcie wcześniejszej trasy.
Pełny przykład kodu dla tego drugiego podejścia znajduje się poniżej.
import 'package:flutter/material.dart';
class LogoutPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Logout Page"),
),
body: new Center(
child: new Text('You have been logged out'),
),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text("Remove Back Button"),
),
floatingActionButton: new FloatingActionButton(
child: new Icon(Icons.fullscreen_exit),
onPressed: () {
Navigator.pushReplacementNamed(context, "/logout");
},
),
);
}
}
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
home: new MyHomePage(),
routes: {
"/logout": (_) => new LogoutPage(),
},
);
}
}
pushReplacementNamed()
widżet poprzedniego ekranu (i wszystkie zależne dane i stany)?Uważam, że rozwiązania są następujące
W rzeczywistości albo:
Nie chcę wyświetlać tego brzydkiego przycisku Wstecz (:]), więc idź do
AppBar(...,automaticallyImplyLeading: false,...)
:;Nie chcę, aby użytkownik cofał się - zastępując bieżący widok - i w ten sposób przechodził do
Navigator.pushReplacementNamed(## your routename here ##)
:;Nie chcę, aby użytkownik wracał - zastępując pewien widok z powrotem w stosie - i dlatego użyj:
Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool);
gdzie f jest funkcją zwracającą siętrue
po spotkaniu z ostatnim widokiem, który chcesz zachować na stosie (tuż przed nowym);Nie chcę, aby użytkownik wracał - NIGDY - całkowicie opróżniając stos nawigatora za pomocą:
Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);
Twoje zdrowie
źródło
Prosty sposób, aby usunąć przycisk wstecz w AppBar jest zestaw
automaticallyImplyLeading
dofalse
.źródło
Navigator.pushReplacementNamed
jest to właściwe rozwiązanie. Sugerujesz obejście, które jeśli zostanie zastosowane we wszystkich scenariuszach, może ostatecznie wywnioskować niewłaściwe zachowanie, na przykład gdzieś, że ktoś chciałby, abyAppBar
nadal sugerowało wiodące zachowanie (tj .: przycisk nawigacji wstecz)Po prostu chcę dodać opis nad odpowiedzią @Jackpap:
automatycznie ImplyLeading:
To sprawdza, czy chcemy zastosować tylny widżet (wiodący widżet) na pasku aplikacji, czy nie. Jeśli parametr automaticImplyLeading ma wartość false, to w tytule jest automatycznie przydzielana spacja, a jeśli widget wiodący ma wartość true, to parametr ten nie ma znaczenia.
źródło
// jeśli chcesz ukryć przycisk Wstecz, użyj poniższego kodu
// jeśli chcesz ukryć przycisk Wstecz i zatrzymać akcję pop, użyj poniższego kodu
źródło
Widżet AppBar ma właściwość o nazwie
automaticallyImplyLeading
. Domyślnie jest to wartośćtrue
. Jeśli nie chcesz, aby flutter automatycznie tworzył przycisk Wstecz, po prostu utwórz właściwośćfalse
.Aby dodać niestandardowy przycisk Wstecz
źródło
Jeśli przechodzisz do innej strony.
Navigator.pushReplacement()
może być użyty. Może być używany, jeśli przechodzisz od logowania do ekranu głównego. Lub możesz użyć.AppBar(automaticallyImplyLeading: false)
źródło
Użyj tego dla taśm AppBar
Użyj tego dla zwykłego paska aplikacji
źródło
Działa dobrze
źródło