TL; DR
Назначить пустую реализацию тела для свойства finalBetList
Stack(children: [
AppListView(
matchList: matchList,
finalBetList: (value) {}, // <- NEW CODE IS HERE
//callback function brings the counter value from ListView class
onChange: (value) {
setState(() {
counter = value;
});
},
),
Почему вы должны это сделать?
В Dart функции - это объекты. Объектам, если им не присвоено значение, являются null
. В примере кода из HomeScreen
вы присваиваете значение onChange
, поэтому позже, когда вы вызываете его через widget.onChange(counter)
, onChange
оценивается как объект функции и выполняется его тело.
Однако в том же примере вы не присваиваете значение finalBetList
, поэтому оно остается null
. Когда вы делаете вызов widget.finalBetList(counter)
, finalBetList
оценивается, и это явно не функциональный объект. На этом этапе вы бы исключили ошибку, но это еще не конец истории, поскольку можно вызывать не только функциональные объекты. Любой класс, который реализует метод call()
, также может быть вызван. Таким образом, попытка вызова finalBetList.call()
предпринята. Это исключение, которое вы должны получить:
NoSuchMethodError: The method 'call' was called on null.
Receiver: null
Очевидно, null
не реализует метод call()
, поэтому он не существует, и выдается исключение.
Если вы не хотите назначать пустую реализацию тела свойству finalBetList
внутри HomeScreen
, у вас также есть возможность назначить его в конструкторе.
Другой вариант, о котором я могу подумать, - это вызов функции с использованием условного доступа к члену:
widget.finalBetList?.call(counter);
Все объекты функции имеют метод call()
, который выполняет тело функции.