Saya menggunakan Navigator 2.0 di Flutter dan saya memiliki halaman yang memiliki tipe dan kode untuk mengidentifikasi diri mereka sendiri.

Saya memiliki Drawer yang terdiri dari Listile, yang dapat membuka halaman dengan tipe dan kode yang berbeda atau membuka halaman dengan tipe yang sama tetapi kode yang berbeda. Jadi masalah saya adalah bernavigasi di antara halaman dengan jenis yang sama dan kode yang berbeda

Ini adalah tumpukan halaman saya ke dalam delegasi:

  List<Page> get _loggedInStack {
    final onLogout = () async {
      await auth.logout();
      splash = true;
      loggedIn = false;
      _clear();
    };
    return [
  if (selectedPageType == "dashboard")
    DashboardPage(
        onPageChange: (String page, String code) {
          selectedPageType = page;
          selectedPageCode = code;
          print(selectedPageCode);
        },
        id: selectedPageCode,
        onLogout: onLogout),
   if (selectedPageType == "chart")
        ChartPage(
            id: selectedPageCode,
            onPageChange: (String page, String code) {
              selectedPageType = page;
              selectedPageCode = code;
              print(selectedPageCode);
            },
            onLogout: onLogout),
       ...
    ];
  }

Di sinilah saya pergi ke halaman yang dipilih:

  goToSelectedPage(String type, String config) {
    switch (type) {
      case ('Monitoring'):
        widget.onPageChange('dashboard', config);
        break;
      case ('Charts'):
        widget.onPageChange('chart', config);
        break;
      
      ...
    }
  }

Berikut contoh Halaman:

class DashboardPage extends Page {
  DashboardPage(
      {required this.onPageChange, required this.onLogout, required this.id})
      : super(key: ValueKey(AppStrings.DASHBOARD_PAGE_KEY));

  final Function(String, String) onPageChange;
  final VoidCallback onLogout;
  final String id;

  @override
  Route createRoute(BuildContext context) {
    return PageRouteBuilder(
        transitionDuration: Duration(seconds: 0),
        settings: this,
        pageBuilder: (context, animation1, animation2) {
          return DashboardScreen(
            onPageChange: onPageChange,
            onLogout: onLogout,
            id: id,
            key: ValueKey(AppStrings.DASHBOARD_SCREEN_KEY),
          );
        });
  }
}

inilah yang terjadi

Jadi, ketika saya mencoba mengubah dari halaman yang memiliki selectedPageType yang sama tetapi tidak sama selectedPageCode tidak terjadi apa-apa

1
Nico 11 Mei 2021, 16:06

1 menjawab

Jawaban Terbaik

Selamat datang di komunitas!

Masalahnya akan tampak bahwa dalam memanggil selectedPageType yang sama dengan selectedPageCode yang berbeda Anda menggunakan kunci yang sama (AppStrings.DASHBOARD_SCREEN_KEY). Jadi, coba ubah kunci untuk setiap kali Anda memanggil DashboardPage dan DashboardScreen Anda, misalnya menambahkan selectedPageCode :

key: ValueKey(AppStrings.DASHBOARD_SCREEN_KEY + selectedPageCode)

Dengan melakukan ini, Anda seharusnya tidak memiliki masalah lagi!

0
snuz 12 Mei 2021, 07:34