Как сделать al oop, чтобы проверить, существует ли элемент в базе данных? - PullRequest
0 голосов
/ 13 марта 2020

Фотографии ниже - моя коллекция базы данных. У меня есть два документа:

  • В документе "1" у меня есть коллекция из 8 предметов
  • В документе "1B" есть коллекция из 9 предметов.

Когда я вызываю его в Таблице данных, как показано ниже, я получаю ошибку * NoSuchMethodError: Получающие «ячейки» были вызваны с нулевым значением. Receiver: null Пробный вызов: ячейки в «1» при нажатии, тогда как в документе «2» я получаю все поля, как определено.

Как можно устранить ошибку и правильно отобразить данные?

Document 1 with 8 fields of stop Document 1B with 9 fields of stop

import 'package:flutter/material.dart';

class BusInfo extends StatelessWidget {
  BusInfo({
    @required this.routenum,
    this.stop1,
    this.stop2,
    this.stop3,
    this.stop4,
    this.stop5,
    this.stop6,
    this.stop7,
    this.stop8,
    this.stop9,
  });

  final routenum;
  final stop1;
  final stop2;
  final stop3;
  final stop4;
  final stop5;
  final stop6;
  final stop7;
  final stop8;
  final stop9;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: DefaultTabController(
            length: 2,
            child: Scaffold(
              appBar: AppBar(
                title: Text(routenum),
                backgroundColor: Color(0xFFBDBDBD),
                elevation: 3,
                bottom: TabBar(indicatorSize: TabBarIndicatorSize.label, tabs: [
                  Tab(
                    child: Align(
                      alignment: Alignment.center,
                      child: Text("Route Info"),
                    ),
                  ),
                  Tab(
                    child: Align(
                      alignment: Alignment.center,
                      child: Text("Timetable"),
                    ),
                  ),
                ]),
              ),
              body: TabBarView(children: [
                Center(
                  child: Column(
                      children: <Widget>[
                        DataTable(
                          columns: [
                            DataColumn(
                              label: Text('Margeot - Victoria'),
                            ),
                          ],
                          rows: [
                            DataRow(cells: [
                              DataCell(Text(stop1)),
                            ]),
                            DataRow(cells: [
                              DataCell(Text(stop2)),
                            ]),
                            DataRow(cells: [
                              DataCell(Text(stop3)),
                            ]),
                            DataRow(cells: [
                              DataCell(Text(stop4)),
                            ]),
                            DataRow(cells: [
                              DataCell(Text(stop5)),
                            ]),
                            DataRow(cells: [
                              DataCell(Text(stop6)),
                            ]),
                            DataRow(cells: [
                              DataCell(Text(stop7)),
                            ]),
                            DataRow(cells: [
                              DataCell(Text(stop8)),
                            ]),
                            // DataRow(cells: [
                            //   DataCell(Text(stop8)),
                            // ]),
                            stop9 != null
                                ? DataRow(cells: [
                                    //this is the code if stop 9 is not equal to null
                                    DataCell(Text(stop9)),
                                  ])
                                : null //this is the code if stop 9 is equal to null
                          ],
                          sortColumnIndex: 0,
                          sortAscending: true,
                        ),
                      ]),
                ),
                Icon(Icons.movie),
              ]),
            )));
  }
}

Ответы [ 2 ]

2 голосов
/ 14 марта 2020

Это решит вашу проблему с пустой строкой данных в ней

stop9 != null
   ? DataRow(cells: [DataCell(Text(stop9))])
   : DataRow(cells: [DataCell(SizedBox())])

Совет: Вместо stop1 ... stop8 / 9 вы можете создать массив строк:).

0 голосов
/ 14 марта 2020

Вы можете использовать Null Aware выражений

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

это означает, что последняя часть должна быть похожа на:

stop9 ? DataRow(cells: [
     DataCell(Text(stop9))
     ])
    : DataRow(cells: [
      DataCell(SizedBox())
     ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...