我正在使用fluter_google_places Flutter插件。 我正在尝试将回调函数传递到小部件中,以便在点击位置时调用该回调函数:
class GooglePlaces extends PlacesAutocompleteWidget {
final Function callback;
GooglePlaces(this.callback)
: super(
apiKey: kGoogleApiKey,
sessionToken: Uuid().generateV4(),
language: "en",
);
@override
_GooglePlaces createState() => _GooglePlacesState();
}
class _GooglePlacesState extends PlacesAutocompleteState {
final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
void startSearch() async {
Prediction p = await PlacesAutocomplete.show(
context: context,
apiKey: kGoogleApiKey,
mode: Mode.overlay,
language: "en",
);
displayPrediction(p);
}
Future<Null> displayPrediction(Prediction p) async {
if (p != null) {
widget.callback(); // Call callback function
}
}
}
在另一个文件中创建窗口小部件:
void myCallback() {
// ...
}
GooglePlaces(myCallback);
但是widget.callback();
显示错误:
没有为“ PlacesAutocompleteWidget”类定义“回调”方法
如何从小部件中调用回调函数?
答案 0 :(得分:0)
您遇到此错误是因为class _GooglePlacesState extends PlacesAutocompleteState
而不是State<GooglePlaces>
。因此widget.callback()
指的是PlacesAutocompleteWidget
的状态。
这里有两种解决方案:
1)廉价的出路:
将回调传递给状态,如下所示:
_GooglePlaces createState() => _GooglePlacesState(callback);
并将回调添加到状态构造函数中。
2)(如上所述)更改_GooglePlacesState
以扩展State<GooglePlaces>
。