Mam dolny pasek nawigacyjny do nawigacji między zajęciami na tym samym ekranie

Mój główny widżet kompilacji:

  Widget build(BuildContext context) {
    return SafeArea(
      top: false,
      child: Scaffold(
        body: PageStorage(
          child: Stack(
            children: <Widget>[currentPage, bottomBar()],
          ),
          bucket: bucket,
        ),
      ),
    );
  }

Mój dolny pasek

Widget bottomBar() {
    return Column(
      children: <Widget>[
        const Expanded(
          child: SizedBox(),
        ),
        BottomBarView(
          tabIconsList: tabIconsList,
          addClick: () {},
          changeIndex: (int index) {
            setState(() {
              currentTab = index;
              currentPage = pages[index];
              print(pages[index]);
              print(currentTab);
            });
          },
        ),
      ],
    );
  }

Dolny pasek działa poprawnie, ale za każdym razem, gdy naciskam przycisk, w kółko odbudowuje tę samą klasę mimo że używam Bucket i PageStoorage Jak mogę przerwać odbudowywanie zajęć?

2
Wail Hayaly 19 grudzień 2019, 15:08
Masz jakieś rozwiązanie?
 – 
anoop4real
6 październik 2020, 00:44
Zamiast tego używam TabBar, ponieważ zapisuje ostatnią pozycję przewijania karty
 – 
Wail Hayaly
9 październik 2020, 08:34
Coś takiego? stackoverflow.com/questions/51824959 /…..... co z wywołaniami API i zapychaniami... powiedzmy, że jeśli mam wywołanie API, czy będzie ono wywoływane za każdym razem, gdy przełączam kartę?
 – 
anoop4real
9 październik 2020, 12:47
Wierzę, że pobieranie będzie wywoływane za każdym razem, chyba że dodasz jakieś narzędzia do zarządzania stanem, takie jak flutter_bloc, provider, GetX
 – 
Wail Hayaly
10 październik 2020, 08:42

1 odpowiedź

Cóż, naprawdę nie ma sposobu, aby zapobiec odbudowie. Skieruję Cię na tę odpowiedź, ponieważ moim zdaniem jest najlepsza.

Jak radzić sobie z niechcianym budową widget?

Widżety można przebudować w dowolnym momencie z dowolnego powodu. Jeśli nie chcesz mieć poważnego wpływu na wydajność, nie stosuj logiki do metody kompilacji, ponieważ metoda kompilacji powinna służyć tylko do wyświetlania interfejsu użytkownika. Wzorzec BLoC jest naprawdę dobry w oddzielaniu wyświetlacza od logiki.

Zasadniczo utrzymuj metody kompilacji w czystości.

1
Benjamin 19 grudzień 2019, 15:15
Ale nie jest to niemożliwe, mam na myśli stworzenie aplikacji takiej jak Instagram, która porusza się po eksploracji, koncie lub działaniach bez odświeżania danych i przewijania lokalizacji
 – 
Wail Hayaly
19 grudzień 2019, 15:33
Czy mówisz, że po naciśnięciu przycisku na pasku nawigacyjnym resetuje się, a ikona się nie zmienia?
 – 
Benjamin
19 grudzień 2019, 15:36
1
Nie, pokazuje widżet od samego początku. Tak jak masz futurebuilder, który pobiera dane i buduje je tylko raz, więc za każdym razem, gdy naciśniesz przycisk na pasku nawigacyjnym, pokazuje on reload (CircularProgressIndicator) i ponownie pobiera dane i pokazuje widżet od góry (tracąc ostatnia lokalizacja przewijania)
 – 
Wail Hayaly
19 grudzień 2019, 15:42