#flutter #listview #flutter-layout
Вопрос:
Я собираюсь разработать приложение для электронной коммерции и хочу выбрать различные атрибуты продукта. Эти атрибуты поступают из базы данных и являются динамическими. Вот пример скриншота:
Здесь у нас есть три атрибута:
Дизайн Шеи Sleves
Эти атрибуты и их количество динамичны. Может быть более 3 атрибутов.
Теперь в этом случае у нас есть два списка. Один для себя, шеи и дизайна. И другие по их соответствующему значению, такие как полный, наполовину, без.
Я хочу выбрать значение для всех слевов, шеи и дизайна.
Не могли бы вы, пожалуйста, предоставить мне рабочий процесс, как я могу реализовать этот сценарий?
Заранее спасибо.
Ответ №1:
Я немного теряюсь в том, как именно выглядят ваши данные, сколько списков вы получаете? что есть в каждом из этих списков? Не могли бы вы опубликовать свой код, чтобы я мог взглянуть на них получше?
В любом случае, я бы написал класс, у которого есть название и список значений:
class Section {
Section({required this.title, required this.values});
String title;
List<String> values;
}
А затем, когда вы получите свои элементы из базы данных, вы можете структурировать их примерно так:
// example
List<Section> sections = [
Section(title: 'Sleeves', values: ['Full', 'Half', 'Without']),
Section(title: 'Neck', values: ['Round', 'High']),
Section(title: 'Design', values: ['Beioided', 'Print']),
];
Затем в пользовательском интерфейсе вы делаете что-то вроде этого:
class SectionDisplay extends StatelessWidget {
SectionDisplay({required this.sections});
final List<Section> sections;
@override
Widget build(BuildContext context) {
return ListView(
children: sections.map((v) => _buildSection(v)).toList(),
);
}
Widget _buildSection(Section section) {
return Column(children: [
Text(section.title),
Row(
children: [
for (var value in section.values)
ElevatedButton(
child: Text(value),
onPressed: () {
int index = section.values.indexOf(value);
print("$index'th value: $value");
},
],
),
]);
}
}
Надеюсь, это то, что вам было нужно.
Комментарии:
1. Привет, спасибо за ответ, да, это именно тот случай с моей стороны. Но как выбрать значения из этого: Список<Раздел> разделы = [ Раздел(название: «Рукава», значения: [«Полный», «Наполовину», «Без»]), Раздел(название: «Шея», значения: [«Круглый», «Высокий»]), Раздел(название: «Дизайн», значения: [«Без рукавов», «Печать»]),]; Например, я хочу выбрать полный из sleves, круглое значение из шеи и значение печати из broided. Так как же их выбрать?
2. @AliCoder Что вы имеете в виду под выбором значений? Как при нажатии на кнопку? Если это так, я обновил свой ответ, чтобы напечатать на консоли нажатое значение, с этого момента вы должны отправить это значение в блок, если у вас есть, или на новую страницу. Если вы хотите сделать это с
StatefulWidget
помощью, вы можете настроить список выбранных значений как состояние или добавитьselectedValue
поле в класс разделов и использовать список разделов как состояние.3. Я достиг ожидаемого результата, кстати, спасибо @h8moss