Anda dapat menghapus tombol kembali dengan melewatkan kosong new Container()
sebagai leading
argumen AndaAppBar
.
Namun, jika Anda menemukan diri Anda melakukan ini, Anda mungkin tidak ingin pengguna dapat menekan tombol kembali perangkat untuk kembali ke rute sebelumnya. Daripada menelepon pushNamed
, coba teleponNavigator.pushReplacementNamed
untuk menghilangkan rute sebelumnya.
Contoh kode lengkap untuk pendekatan terakhir ada di bawah.
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()
membuang widget layar sebelumnya (dan semua tergantung data & status)?Saya yakin solusinya adalah sebagai berikut
Anda sebenarnya:
Tidak ingin menampilkan bahwa tombol jelek kembali (:]), dan dengan demikian pergi untuk:
AppBar(...,automaticallyImplyLeading: false,...)
;Tidak ingin pengguna kembali - mengganti tampilan saat ini - dan dengan demikian memilih
Navigator.pushReplacementNamed(## your routename here ##)
:;Tidak ingin pengguna kembali - mengganti tampilan tertentu kembali ke tumpukan - dan karenanya menggunakan:
Navigator.pushNamedAndRemoveUntil(## your routename here ##, f(Route<dynamic>)→bool);
mana f adalah fungsi yang kembalitrue
saat bertemu dengan tampilan terakhir yang ingin Anda simpan di tumpukan (tepat sebelum yang baru);Tidak ingin pengguna kembali - PERNAH - mengosongkan sepenuhnya tumpukan navigator dengan:
Navigator.pushNamedAndRemoveUntil(context, ## your routename here ##, (_) => false);
Bersulang
sumber
Sebuah cara sederhana untuk menghilangkan tombol kembali di AppBar adalah untuk set
automaticallyImplyLeading
kefalse
.sumber
Navigator.pushReplacementNamed
adalah solusi yang tepat. Apa yang Anda sarankan adalah solusi yang jika diterapkan dalam semua skenario, pada akhirnya dapat menyimpulkan perilaku yang salah, seperti di suatu tempat di mana seseorang inginAppBar
terus menyiratkan perilaku utama (yaitu: tombol navigasi kembali)Hanya ingin menambahkan beberapa deskripsi atas jawaban @Jackpap:
otomatisImplyLeading:
Ini memeriksa apakah kita ingin menerapkan widget belakang (widget terkemuka) di atas bilah aplikasi atau tidak. Jika automaticImplyLeading salah maka secara otomatis spasi diberikan ke judul dan jika widget utama bernilai true, maka parameter ini tidak berpengaruh.
sumber
// jika Anda ingin menyembunyikan tombol kembali gunakan kode di bawah ini
// jika Anda ingin menyembunyikan tombol kembali dan menghentikan pop action gunakan kode di bawah ini
sumber
Widget AppBar memiliki properti bernama
automaticallyImplyLeading
. Secara default nilainya adalahtrue
. Jika Anda tidak ingin flutter secara otomatis membuat tombol kembali untuk Anda, buat saja propertinyafalse
.Untuk menambahkan tombol kembali kustom Anda
sumber
Jika menavigasi ke halaman lain.
Navigator.pushReplacement()
dapat digunakan. Ini dapat digunakan jika Anda menavigasi dari login ke layar beranda. Atau Anda bisa menggunakan.AppBar(automaticallyImplyLeading: false)
sumber
Gunakan ini untuk slivers AppBar
Gunakan ini untuk Appbar normal
sumber
Ini bekerja dengan baik
sumber