Динамический выбор элементов вложенного списка в Flutter

#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