将变量传递给扩展另一个类的Flutter小部件

时间:2019-02-28 02:29:29

标签: inheritance dart flutter

我正在使用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”类定义“回调”方法

如何从小部件中调用回调函数?

1 个答案:

答案 0 :(得分:0)

您遇到此错误是因为class _GooglePlacesState extends PlacesAutocompleteState而不是State<GooglePlaces>。因此widget.callback()指的是PlacesAutocompleteWidget的状态。

这里有两种解决方案:

1)廉价的出路:

将回调传递给状态,如下所示: _GooglePlaces createState() => _GooglePlacesState(callback);

并将回调添加到状态构造函数中。

2)(如上所述)更改_GooglePlacesState以扩展State<GooglePlaces>