#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
виджете вы используете категорию в состоянии инициализации (что может произойти только один раз) … С большим количеством кода мы могли бы помочь вам проще!