Флаттер извлекает элементы списка DropdownButtonFormField из Sqflite - ошибки 0 или 2 значения - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь создать dropdownButtonFormField со списком значений объектов из базы данных sqflite. Я дошел до того, что элементы списка будут отображаться, но когда я нажму на один из них, он выдаст ошибку The error

class Test extends StatefulWidget {
  @override
  _TestState createState() => _TestState();
}

class _TestState extends State<Test> {
  Section currentSection;
  @override
  Widget build(BuildContext context) {
    final sectionsProvider = Provider.of<SectionsProvider>(context);
    return Scaffold(
      body: Container(
        padding: EdgeInsets.all(15),
        child: FutureBuilder<List<Section>>(
          future: sectionsProvider.getSections(),
          builder: (BuildContext context,AsyncSnapshot<List<Section>> snapshot){
            if(!snapshot.hasData){
              return Text('Loading...');
            }else{
              return DropdownButtonFormField<Section>(
                //decoration: inputDecoration.copyWith(hintText: currentSection.title),
                //value: currentSection,
                items: snapshot.data.map((section){
                  return DropdownMenuItem<Section>(
                    value: section,
                    child: Row(
                      children: [
                        Icon(
                          Icons.brightness_1,
                          size: 15,
                          color: Color(section.color),
                        ),
                        SizedBox(width: 20,),
                        Text(section.title),
                      ],
                    ),
                  );
                },
                ).toList(),
                isExpanded: false,
                isDense: true,
                onChanged: (value){
                  setState(() {
                    currentSection = value;
                  });
                },
              );
            }
          },
        ),
      ),
    );
  }
}

1 Ответ

0 голосов
/ 04 мая 2020

В DropdownButtonFormField отсутствует параметр-значение, так как вы получаете эту ошибку.

Без комментариев будет работать следующая строка.

value: currentSection,

Обновление:

I Если проблема заключается в том, что вы присваиваете весь объект аргументу значения, выпадающий список должен сравнивать значение со значением в раскрывающемся списке, чтобы убедиться, что новое значение присваивания доступно в выпадающем списке или нет.

Однако в флаттере (дротик ), мы не можем сравнивать объект напрямую. Вы должны переопределить оператор == и hascode для этого, но мы можем использовать пакет Equatable для простого сравнения.

я не знаю вас, класс Section, поэтому внесите изменения, как я делаю в следующем примере класса.

Прежде всего, включите пакет Equatable в файл pubspe c .yaml.

class Section extends Equatable {
  final int id;
  Section({this.id});

  @override
  List<Object> get props => [id];  // pass all variable with(,) separated as i pass id.
}
...