From ccca15d361ead9cf1d1a71eaaff906fe025638ab Mon Sep 17 00:00:00 2001 From: Jaylen Bian <jabian@linkedin.com> Date: Wed, 28 Jul 2021 17:35:57 +0800 Subject: [PATCH] [infra_ui][overlay] Add delegate to overlay item --- .../lib/src/flowy_overlay/flowy_overlay.dart | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/app_flowy/packages/flowy_infra_ui/lib/src/flowy_overlay/flowy_overlay.dart b/app_flowy/packages/flowy_infra_ui/lib/src/flowy_overlay/flowy_overlay.dart index 5af51e3471..5dac9ae149 100644 --- a/app_flowy/packages/flowy_infra_ui/lib/src/flowy_overlay/flowy_overlay.dart +++ b/app_flowy/packages/flowy_infra_ui/lib/src/flowy_overlay/flowy_overlay.dart @@ -1,6 +1,5 @@ -import 'package:dartz/dartz.dart' show Tuple2; +import 'package:dartz/dartz.dart' show Tuple3; import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; /// Specifies how overlay are anchored to the SourceWidget enum AnchorDirection { @@ -53,6 +52,10 @@ TransitionBuilder overlayManagerBuilder() { }; } +abstract class FlowyOverlayDelegate { + void didRemove(); +} + class FlowyOverlay extends StatefulWidget { const FlowyOverlay({ Key? key, @@ -105,22 +108,26 @@ class FlowyOverlay extends StatefulWidget { } class FlowyOverlayState extends State<FlowyOverlay> { - List<Tuple2<Widget, String>> _overlayList = []; + List<Tuple3<Widget, String, FlowyOverlayDelegate?>> _overlayList = []; - void insert(Widget widget, String identifier) { + void insert(Widget widget, String identifier, FlowyOverlayDelegate? delegate) { setState(() { - _overlayList.add(Tuple2(widget, identifier)); + _overlayList.add(Tuple3(widget, identifier, delegate)); }); } void remove(String identifier) { setState(() { - _overlayList.removeWhere((ele) => ele.value2 == identifier); + final index = _overlayList.indexWhere((ele) => ele.value2 == identifier); + _overlayList.removeAt(index).value3?.didRemove(); }); } void removeAll() { setState(() { + for (var ele in _overlayList.reversed) { + ele.value3?.didRemove(); + } _overlayList = []; }); }