Saya memiliki dua aliran berbeda dalam proyek saya.

  1. Halaman Utama -> HalamanA -> Halaman B -> Halaman C -> Halaman A

Dari Halaman C ke Halaman A, saya menggunakan kode ini, yang berfungsi dengan baik.

   Navigator.popUntil(context, ModalRoute.withName(AssetMenu.ROUTE));
  1. Saat menerima notifikasi push, pengguna mengetuk notifikasi push, saya ingin langsung menavigasi seperti ini

Halaman Utama -> Halaman B -> Halaman C -> lalu kembali ke Halaman A ketika tombol di Halaman C diklik.

Tetapi ketika tombol di Halaman C diklik, itu menunjukkan layar hitam.

Bagaimana saya harus menangani ini?

2
John Joe 3 Januari 2021, 20:36

3 jawaban

Jawaban Terbaik

Dalam kasus penggunaan kedua Anda Page A tidak ada. Saat Anda memanggil Navigator.popUntil(), navigator naik ke tumpukan rute dan memunculkannya hingga menemukan rute yang ditentukan. Jika rute yang ditentukan tidak ada di tumpukan, itu akan menghapus rute sampai tumpukan kosong. Itu sebabnya Anda mendapatkan layar hitam.

Jika Anda ingin mengubah Main Page -> Page B -> Page C menjadi Main Page -> Page A, Anda harus memanggil Navigator.pushAndRemoveUntil() dengan rute baru Page A dan predikat cocok dengan Main Page. Atau gunakan Navigator.pushNamedAndRemoveUntil().

2
0x4b50 3 Januari 2021, 17:48

Saya sarankan menggunakan rute nama, itu lebih mudah bahkan jika aplikasi Anda semakin besar dengan lebih banyak halaman. Saya lebih suka membiarkan widget di luar main.dart dan di dalam dart hanya menggunakan logika dan rute, dan setelah Buat 3 halaman yang Anda perlukan A,B,C dan atur di kode dart utama Anda bahwa Anda adalah halaman pertama (halaman beranda ) harus halaman A.

Buka halaman Anda dan tepat di bawah Statefull{ atau Stateless { ketik nama rute:

static const routeName = '/pageA';
static const routeName = '/pageB';
static const routeName = '/pageC';

Tentukan di main.dart Anda rute:

home: WidgetFromPageA(),
      routes: {
        WidgetFromPageB.routeName: (ctx) => WidgetFromPageB(),
        WidgetFromPageC.routeName: (ctx) => WidgetFromPageC(),
        },

Dari halaman mana pun Anda dapat memanggil tindakan ini:

Navigator.of(context).pushNamed(WidgetFromPageA.routeName);
Navigator.of(context).pushNamed(WidgetFromPageB.routeName);
Navigator.of(context).pushNamed(WidgetFromPageC.routeName);

Dengan cara ini Anda dapat pergi ke halaman B dan pada halaman baru di bilah aplikasi Anda mendapatkan tombol kembali. Misalnya, ketika Anda berada di halaman kedua, gunakan metode pushReplacement() dan buka halaman ketiga, ketika Anda menekan tombol kembali, Anda akan pergi ke halaman pertama dan melewati halaman kedua.

Agar lebih jelas anda dapat menavigasi ke halaman keempat seperti ini:

[ 1 --push()--> 2 --pushReplacement()--> 3 --pushReplacement()--> 4] dan ketika Anda menekan tombol kembali, Anda akan sampai ke halaman pertama.

2
Diaconescu Constantin 3 Januari 2021, 18:48

Mungkin Anda bisa mencoba ini

Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => AssetMenu(),), (route) => route.isFirst);
1
dm_tr 3 Januari 2021, 18:32