Было сгенерировано другое исключение: FormatException: Неверный номер (в символе 1) - PullRequest
1 голос
/ 22 января 2020

Почему ошибка Another exception was thrown: FormatException: Invalid number (at character 1) появляется на моем экране в течение нескольких микросекунд, пока все не вернется в норму. Иногда это даже не происходит. Ниже моя функция StreamBuilder:

_delivered() {
    print('In the delivered function:${resId},${customerId}, ');
    return StreamBuilder<QuerySnapshot>(
        stream: Firestore.instance
            .collection('restaurants')
            .document(resId)
            .collection('customers')
            .document(customer)
            .collection('orders')
            .where('deliveryTime', isGreaterThan: '')
            .snapshots(),
        builder: (context, snapshot) {
          print('Does snapshop have data? ${snapshot.hasData}');
          if (!snapshot.hasData) return Container();

          List deliveredListFromServer = snapshot.data.documents;
          return Expanded(
            child: ListView(
              shrinkWrap: true,
              children: deliveredListFromServer.map((item) {
                print('document id: ${item.documentID}');
                return InkWell(
                  child: SizedBox(
                    height: 50,
                    child: Row(
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        SizedBox(
                          width: 80,
                          child: Text(
                            item['orderBy']['username'],
                            textAlign: TextAlign.center,
                            overflow: TextOverflow.ellipsis,
                            style: TextStyle(fontWeight: FontWeight.bold),
                          ),
                        ),
                        SizedBox(
                          width: 5,
                        ),
                        Expanded(
                          child: ListView(
                            scrollDirection: Axis.horizontal,
                            children: item['order'].map<Widget>((item) {
                              return SizedBox(
                                width: 80,
                                child: Align(
                                  alignment: Alignment.centerLeft,
                                  child: Text(
                                    '${item['qty']} ${item['drinkName']}',
                                    overflow: TextOverflow.ellipsis,
                                  ),
                                ),
                              );
                            }).toList(),
                          ), //
                        ),
                        SizedBox(
                          width: 5,
                        ),
                        SizedBox(
                          width: 60,
                          child: Text(DateFormat('h:mm a').format(
                              DateTime.fromMillisecondsSinceEpoch(
                                  int.parse(item['deliveryTime'])))),
                        )
                      ],
                    ),
                  ),
                  onTap: () {
                    _deliveredDetail(item);
                  },
                );
              }).toList(),
            ),
          );
        });
  }

Это моя консоль:

I/flutter (11506): In the delivered function:XufIsxA8a24lLhO6gTr1,zMrQmcoQwci9bVVRo6tx, 
I/flutter (11506): Does snapshop have data? true
I/flutter (11506): document id: 1579534059562
I/flutter (11506): document id: 1579595374166
I/flutter (11506): Another exception was thrown: FormatException: Invalid number (at character 1)
I/flutter (11506): Does snapshop have data? true
I/flutter (11506): document id: 1579534059562

С консоли я не понимаю, почему она выводит document id: 1579595374166 из базы данных. Только document id: 1579534059562 имеет комплект поставки. База данных имеет 6 записей, только одна имеет набор deliveryTime. Другие являются пустыми "" строками.

Таким образом, через несколько миллисекунд все работает так, как ожидалось, т.е. соответствующий интерфейс пользователя с одним элементом для базы данных, отображаемой на экране. Похоже, что все возвращается к нормальной работе во второй раз, когда поток возвращает только один документ. Фактически, единственный раз, когда он не отображает красный экран, это когда консоль выглядит так:

I/flutter (11506): In the delivered function:XufIsxA8a24lLhO6gTr1,zMrQmcoQwci9bVVRo6tx, 
I/flutter (11506): Does snapshop have data? false
I/flutter (11506): Does snapshop have data? true
I/flutter (11506): document id: 1579534059562

Это также означает, что streamBuilder передает неверные данные в список (и вероятный источник ошибки). Почему запрос иногда возвращает неправильные результаты?!

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