我正在使用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?
答案 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。
下次按下返回键,它将弹出路线。