как восстановить виджет

#flutter #flutter-layout

Вопрос:

Я разрабатываю приложение для электронной коммерции в flutter, на главном экране у меня есть общая страница, но здесь есть категории :

Начальный экран

Поэтому, когда я нажимаю на каждую категорию, весь экран должен быть заново построен и изменен на виджет «Элементы категорий».

У меня есть метод каждый раз, когда пользователь нажимает на одну из категорий, экран будет построен заново:

 void _switchToCategories(String categoryValue) {
    setState(() {
      _categoryScreen = true;
      category = categoryValue;
    });
  }
 

поэтому у меня есть условие, когда экран строится

 (_categoryScreen)?
            ProdcutsPerCategory(category: category): 
            other column
 

но есть проблема, виджет ProdcutsPerCategory создается только один раз, когда выбрана первая категория,

это означает, что даже если я выберу другую категорию, виджет не будет создан заново и не предоставит мне продукты этой категории. и я также использую setState ().

есть идеи?

Комментарии:

1. Можете ли вы опубликовать больше кода? Этого недостаточно, чтобы увидеть, что происходит

2. идея проста, флаттер не перестраивал виджет, потому что я думаю, что это то же самое, что и старый, даже когда я меняю аргумент

Ответ №1:

У меня была точно такая же проблема, и я немного обойти, но сначала позвольте мне объяснить, что я думаю, что это происходит, вы используете тот же виджет, ProdcutsPerCategory и это изменение передается аргумент, так что дротик имеет тот же самый старый объект, отметив его же, моя работа вокруг, что я создал виджет для каждого типа категории и сдачи его в список

 List<Widgets> listOfCatigory = [ProdcutsPerCategory(cat1),ProdcutsPerCategory(cat3),ProdcutsPerCategory(cat3)]
 

таким образом, пример кода будет примерно таким

 // default widget
var widget catWidget = listOfCatigory[0];
void _switchToCategories(int selectedIndex) {
    setState(() {
      _categoryScreen = true;
      catWidget = listOfCatigory[selectedIndex];
    });
  }
 

и изобразите это так

 (_categoryScreen)?
            catWidget: 
            other column
 

Комментарии:

1. Я сделал то же самое, что и вы, до сих пор не восстановлен, я не знаю, в чем проблема

2. Я создал список виджетов по одному для каждой категории, но все равно flutter прочитал его как один виджет, а не перестроил его

3. попробуйте предоставить уникальный ключ, который должен работать

4. эта работа, большое вам спасибо. Вы спасли часы моей жизни в поисках, большое вам спасибо

5. это сделало меня счастливым, я был рад, что смог помочь

Ответ №2:

Возможно, в вашем ProdcutsPerCategory виджете вы используете категорию в состоянии инициализации (что может произойти только один раз) … С большим количеством кода мы могли бы помочь вам проще!