У меня проблема с кодом флаттера. Я хочу вызвать 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");
            },
          ),
        );
      },
    );
  }
2
Bruno 24 Ноя 2020 в 00:23

1 ответ

Лучший ответ

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

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

ListView randAnswer 
//or 
Widget randAnswer

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

1
Mohammed Alfateh 24 Ноя 2020 в 14:11