Я использую OverlayEntry и хочу удалить запись при нажатии Back Press.
OverlayEntry overlayEntry;
overlayEntry = OverlayEntry(builder: (c) {
return FullScreenLoader(
loaderText: "Placing Order",
);
},maintainState: true);
Overlay.of(context).insert(overlayEntry);
и метод Inside FullScreenLoader Build
, который я использовал, onWillScope
но он все еще не работает.
@override
Widget build(BuildContext context) {
return new WillPopScope(
onWillPop: _onWillPop,
);
}
Future<bool> _onWillPop() {
return ""?? false;
}
Я просто хочу обнаружить физическую кнопку обратного нажатия, чтобы я мог удалить наложение на обратное нажатие.
Я что-то упускаю? Или с оверлеем нельзя?
Решение проблемы
То, как вы попробуете, должно сработать. Используйте 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.
В следующий раз, когда вы нажмете назад, появится маршрут.
Комментариев нет:
Отправить комментарий