在Flutter中移除Back上的OverLayEntry按钮

时间:2019-04-18 08:46:50

标签: flutter flutter-layout

我正在使用OverlayEntry,并且希望在Back Press上删除条目。

OverlayEntry overlayEntry;
    overlayEntry = OverlayEntry(builder: (c) {
      return FullScreenLoader(
          loaderText: "Placing Order",
          );
    },maintainState: true);
    Overlay.of(context).insert(overlayEntry);

和我使用过Build的FullScreenLoader onWillScope方法内部,但仍然无法正常工作。

 @override
  Widget build(BuildContext context) {
    return new WillPopScope(
        onWillPop: _onWillPop,
    );
  }

Future<bool> _onWillPop() {
    return "" ?? false;
}

我只想检测实际的后按按钮,以便可以删除“后按”上的覆盖物。

我错过了什么吗?还是无法使用overLay?

1 个答案:

答案 0 :(得分:2)

您尝试的方式应该起作用。 使用WillPopScope来检测后按,并在可见的情况下将其移除。

这是一个有效的示例代码。 保留对覆盖项的全局引用,并将WillPopScope添加到状态类的构建方法中:

class _XYZState extends State<XYZ> {
  OverlayEntry _detailsOverlayEntry;

  @override
  Widget build(BuildContext context) {
    return Container(
      child: WillPopScope(
        onWillPop: _onWillPop,
        child: GoogleMap(
          mapType: MapType.normal,
          initialCameraPosition: _kFallbackInitialCameraPosition,
          polylines: _polylines.toSet(),
          myLocationEnabled: false,
          myLocationButtonEnabled: false,
          onMapCreated: (GoogleMapController controller) {
            _controller.complete(controller);
          },
        ),
      ),
    );
  }

  Future<bool> _onWillPop() {
    if(_detailsOverlayEntry != null){
      _detailsOverlayEntry.remove();
      _detailsOverlayEntry = null;
      return Future.value(false);
    }
    return Future.value(true);
  }
}

就像您看到的一样,_detailsOverlayEntry == null条件检查用于检查覆盖项是否可见。如果可见,请将其删除并将引用设置为null。

下次按下返回键,它将弹出路线。