Вызов ListView из void

#flutter #listview #dart #void

#flutter #listview #dart #void

Вопрос:

У меня проблема с кодом Flutter. Я хочу вызвать ListView aAntwort() из void randAnswer(). ListView должен отображаться в виде текста в RaisedButton. Моделирование показало «NoSuchMethodError: метод ‘_aAntwort()’ был вызван в null. Получатель: null ….. «

Кто-нибудь может мне помочь? Спасибо 🙂

                                 children: <Widget>[                     //StatefulWidget
                                  RaisedButton(
                                      onPressed: () {},
                                      child:randAnswer()._aAntwort()),    //ERROR
                                ]

  



  void randAnswer() {                                                 //Random Answer 
    var list = <String>['aAnswer', 'bAnswer', 'cAnswer', 'dAnswer'];
    var rand = new Random();    
    //get the random string
    int i = rand.nextInt(list.length);
    String iAnswer = list[i];    
    //print the random String    
    print(iAnswer);

    //remove the random string
    list.removeAt(i);

    //print rest of the list
    print(list.toString());    
    //get the random string
    int ii = rand.nextInt(list.length);
    String iiAnswer = list[ii];    
    //print the random String    
    print(iiAnswer); 

    //remove the random string
    list.removeAt(ii);  

    //print rest of the list
    print(list.toString());    
    //get the random string
    int iii = rand.nextInt(list.length);
    String iiiAnswer = list[iii];    
    //print the random String    
    print(iiiAnswer); 

    //remove the random string
    list.removeAt(iii);

    //print rest of the list
    print(list.toString());    
    //get the random string
    int iiii = rand.nextInt(list.length);
    String iiiiAnswer = list[iiii];    
    //print the random String    
    print(iiiiAnswer);   

    //remove the random string
    list.removeAt(iiii); 

    //print rest of the list
    print(list.toString());




    ListView _aAntwort(){                   // I want to call this one
      if (iAnswer == "aAnswer") {
        return aAnswer();
      } else if (iAnswer == "bAnswer") {
        return bAnswer();
      } else if (iAnswer == "cAnswer") {
        return cAnswer();
      } else if (iAnswer == "dAnswer") {
        return dAnswer();    
    }

  }





  ListView aAnswer() {                    
    return ListView.builder(
      scrollDirection: Axis.vertical,
      shrinkWrap: true,
      itemCount: count,
      itemBuilder: (BuildContext context, int position) {
        return Card(
          color: Colors.white,
          elevation: 2.0,
          child: ListTile(
            title: Text(this.todoList[position].aright,
                style: TextStyle(fontWeight: FontWeight.bold)),
            onTap: () {
              debugPrint("ListTile Tapped");
            },
          ),
        );
      },
    );
  }

  ListView bAnswer() {
    return ListView.builder(
      scrollDirection: Axis.vertical,
      shrinkWrap: true,
      itemCount: count,
      itemBuilder: (BuildContext context, int position) {
        return Card(
          color: Colors.white,
          elevation: 2.0,
          child: ListTile(
            title: Text(this.todoList[position].bwrong,
                style: TextStyle(fontWeight: FontWeight.bold)),
            onTap: () {
              debugPrint("ListTile Tapped");
            },
          ),
        );
      },
    );
  }

  ListView cAnswer() {
    return ListView.builder(
      scrollDirection: Axis.vertical,
      shrinkWrap: true,
      itemCount: count,
      itemBuilder: (BuildContext context, int position) {
        return Card(
          color: Colors.white,
          elevation: 2.0,
          child: ListTile(
            title: Text(this.todoList[position].cwrong,
                style: TextStyle(fontWeight: FontWeight.bold)),
            onTap: () {
              debugPrint("ListTile Tapped");
            },
          ),
        );
      },
    );
  }

  ListView dAnswer() {
    return ListView.builder(
      scrollDirection: Axis.vertical,
      shrinkWrap: true,
      itemCount: count,
      itemBuilder: (BuildContext context, int position) {
        return Card(
          color: Colors.white,
          elevation: 2.0,
          child: ListTile(
            title: Text(this.todoList[position].dwrong,
                style: TextStyle(fontWeight: FontWeight.bold)),
            onTap: () {
              debugPrint("ListTile Tapped");
            },
          ),
        );
      },
    );
  }
  

Ответ №1:

Возвращаемое значение для функции void всегда будет равно null .

Вы можете либо отредактировать возвращаемый тип функции

 ListView randAnswer 
//or 
Widget randAnswer
  

и последней строкой должен быть return _aAntwort() вызов функции, однако я рекомендовал вам отделить _aAntwort форму функции randAnswer и использовать iAnswer ее как глобальную переменную, поскольку вы используете ее как вызов кнопки.