Prechádzať zdrojové kódy

[infra_ui][overlay] Add delegate to overlay item

Jaylen Bian 3 rokov pred
rodič
commit
ccca15d361

+ 13 - 6
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/material.dart';
-import 'package:flutter/scheduler.dart';
 
 
 /// Specifies how overlay are anchored to the SourceWidget
 /// Specifies how overlay are anchored to the SourceWidget
 enum AnchorDirection {
 enum AnchorDirection {
@@ -53,6 +52,10 @@ TransitionBuilder overlayManagerBuilder() {
   };
   };
 }
 }
 
 
+abstract class FlowyOverlayDelegate {
+  void didRemove();
+}
+
 class FlowyOverlay extends StatefulWidget {
 class FlowyOverlay extends StatefulWidget {
   const FlowyOverlay({
   const FlowyOverlay({
     Key? key,
     Key? key,
@@ -105,22 +108,26 @@ class FlowyOverlay extends StatefulWidget {
 }
 }
 
 
 class FlowyOverlayState extends State<FlowyOverlay> {
 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(() {
     setState(() {
-      _overlayList.add(Tuple2(widget, identifier));
+      _overlayList.add(Tuple3(widget, identifier, delegate));
     });
     });
   }
   }
 
 
   void remove(String identifier) {
   void remove(String identifier) {
     setState(() {
     setState(() {
-      _overlayList.removeWhere((ele) => ele.value2 == identifier);
+      final index = _overlayList.indexWhere((ele) => ele.value2 == identifier);
+      _overlayList.removeAt(index).value3?.didRemove();
     });
     });
   }
   }
 
 
   void removeAll() {
   void removeAll() {
     setState(() {
     setState(() {
+      for (var ele in _overlayList.reversed) {
+        ele.value3?.didRemove();
+      }
       _overlayList = [];
       _overlayList = [];
     });
     });
   }
   }