#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
ее как глобальную переменную, поскольку вы используете ее как вызов кнопки.