Ошибка подтверждения при выборе элемента в DropdownButton - PullRequest
0 голосов
/ 30 мая 2019

Я создал приложение во Флаттере, чтобы использовать его для инвентаря моей компании.Одним из виджетов в приложении является DropdownButton, который заполняется элементами из Firebase Cloud Firestore.Все пункты меню загружаются правильно, но когда я выбираю элемент, у меня появляется красный экран.

Я довольно плохо знаком с Flutter, поэтому я в основном скопировал код из учебника, поэтому я нахожу странным, что он делаетне работает.

class _ReviewChangesScreenState extends State<ReviewChangesScreen> {
  final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
  final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
  DocumentSnapshot job;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        key: _scaffoldKey,
        appBar: AppBar(
          title: Text('Review Changes'),
        ),
        body: Column(children: <Widget>[
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Form(
                key: _formKey,
                child: StreamBuilder(
                  stream: Firestore.instance.collection('jobs').snapshots(),
                  builder: (BuildContext context,
                      AsyncSnapshot<QuerySnapshot> snapshot) {
                    if (!snapshot.hasData) return new Text('Loading...');
                    return new DropdownButton(
                      value: job,
                      onChanged: (val) {
                        setState(() {
                          job = val;
                        });
                      },
                      items: snapshot.data.documents
                          .map<DropdownMenuItem<DocumentSnapshot>>(
                              (DocumentSnapshot document) {
                        return new DropdownMenuItem<DocumentSnapshot>(
                          child: Text(document.data['jobCode']),
                          value: document,
                        );
                      }).toList(),
                    );
                  },
                )),
          ),
        ]));
  }
}

Это ошибка, которую я получаю, когда пытаюсь выбрать элемент в меню.

I/flutter ( 7320): The following assertion was thrown building StreamBuilder<QuerySnapshot>(dirty, state:
I/flutter ( 7320): _StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot<QuerySnapshot>>#22b54):
I/flutter ( 7320): 'package:flutter/src/material/dropdown.dart': Failed assertion: line 609 pos 15: 'items == null ||
I/flutter ( 7320): items.isEmpty || value == null || items.where((DropdownMenuItem<T> item) => item.value ==
I/flutter ( 7320): value).length == 1': is not true.

Вывод врач-флаттера:

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.5.4-hotfix.2, on Microsoft Windows [Version 10.0.17763.529],
    locale en-CA)
[√] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[√] Android Studio (version 3.3)
[√] Connected device (1 available)

Я действительно озадачен тем, в чем проблема.

1 Ответ

0 голосов
/ 30 мая 2019

Ошибка говорит о том, что ваши items или value параметры конструктора Dropdown не удовлетворяют требованиям Dropdown.Взгляните на код:

https://github.com/flutter/flutter/blob/v1.5.4-hotfix.2/packages/flutter/lib/src/material/dropdown.dart#L609

assert(items == null || items.isEmpty || value == null || items.where((DropdownMenuItem<T> item) => item.value == value).length == 1)

В человеческом переводе:

  • элементы не должны быть null
  • элементы должны содержать хотя бы 1 элемент
  • значение не должно быть null
  • элементы должны содержать элемент, значение которого value

Вашвходные данные, нарушают одно из этих условий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...