Ошибка NoSuchMethodError: метод ‘add’ был вызван с нулевым значением — пытался вызвать: add (экземпляр ‘FittedBox’)

#flutter #flutter-layout

#flutter #flutter-layout

Вопрос:

В моем приложении Flutter у меня есть список данных. Это выглядит следующим образом:

 List<ContentData> contentList = [
    ContentData(
        'Mona Lisa',
        'images/0.jpg',
        '1504',
        'daVinci',
        'Louvre, Paris',
        'Mona Lisa ist ein weltberühmtes Ölgemälde von Leonardo da Vinci aus der Hochphase der italienischen Renaissance Anfang des 16. Jahrhunderts. Das auf Italienisch als La Gioconda (‚die Heitere‘) – davon abgeleitet ihr französischer Name La Joconde – bekannte Bild wurde vermutlich nach der Florentinerin Lisa del Giocondo benannt. Der unter anderem im deutschsprachigen Raum gebräuchliche Titel Mona Lisa beruht auf einem Rechtschreibfehler, denn Mona leitet sich von der italienischen Kurzform Monna (für Madonna ‚Frau‘) ab, und ist demnach also kein Vorname, sondern der Titel, mit dem Lisa als Ehefrau (madonna) von Francesco del Giocondo angeredet wurde.',
        'https://de.wikipedia.org/wiki/Mona_Lisa'),]
  

В одном месте моего приложения у меня есть виджет, похожий на изображение Tinder, который называется TCard (https://pub.dev/packages/tcard). В TCard есть атрибут cards, который может содержать несколько виджетов. Это сработало нормально, но я не хочу жестко кодировать каждый раз, когда добавляю что-либо в contentList, поэтому я просто хочу, чтобы он содержал список. На данный момент список реализован следующим образом:

  Expanded(
              child: TCard(
                cards: AppBrain().tinderPagesList,
                controller: _controller,
                onForward: (index, info) {
                  print(index);
                  print(info.direction);
                  if (info.direction == SwipDirection.Right) {
                    print('right');
                  } else {
                    print('left');
                  }
                },
                onBack: (index) {
                  print("onBack");
                },
                onEnd: () {
                  setState(() {
                    toSwipePage();
                    print("end");
                  });
                },
              ),
            ),
  

Я также хочу, чтобы tinderPagesList автоматически создавал себя в соответствии с тем, что находится внутри contentList, поэтому, когда я добавляю новую запись, в tinderPagesList должна быть новая запись.
Способ, которым я пытался добиться этого, выглядит следующим образом:
У меня есть список:

  List<FittedBox> tinderPagesList;
  

И у меня есть эта функция:

  void tinderPagesListAdder() {
    for (var i = 0; i < AppBrain().contentList.length; i  ) {
      var currentImageNumber = 0;
      AppBrain().tinderPagesList.add(
            FittedBox(
              child: Container(
//                height: MediaQuery.of(context).size.height,
                margin: EdgeInsets.only(left: 50, right: 50),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.only(
                      topLeft: Radius.circular(20),
                      topRight: Radius.circular(20),
                      bottomLeft: Radius.circular(20),
                      bottomRight: Radius.circular(20)),
                  boxShadow: [
                    BoxShadow(
                      color: Colors.grey.withOpacity(0.5),
                      spreadRadius: 5,
                      blurRadius: 7,
                      offset: Offset(0, 3), // changes position of shadow
                    ),
                  ],
                ),
                child: ClipRRect(
                  borderRadius: BorderRadius.circular(20),
                  child: Image.asset(
                    "images/$currentImageNumber.jpg",
                  ),
                ),
              ),
            ),
          );
    }
  }
  

Ошибка, которую я получаю, находится в названии. Я застрял и не знаю, как решить проблему.

Ответ №1:

Вы не инициализировали tinderPagesList переменную.

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

 List<FittedBox> tinderPagesList = [];