@@ -557,6 +557,26 @@ void main() {
557557
558558    expect (alternate.children.length, 1 );
559559  });
560+ 
561+   testWidgets ('Keep alive Listenable has its listener removed once called' , (WidgetTester  tester) async  {
562+     final  LeakCheckerHandle  handle =  LeakCheckerHandle ();
563+     await  tester.pumpWidget (Directionality (
564+       textDirection:  TextDirection .ltr,
565+       child:  ListView .builder (
566+         itemCount:  1 ,
567+         itemBuilder:  (BuildContext  context, int  index) {
568+           return  const  KeepAliveListenableLeakChecker (key:  GlobalObjectKey <_KeepAliveListenableLeakCheckerState >(0 ));
569+         },
570+       ),
571+     ));
572+     final  _KeepAliveListenableLeakCheckerState  state =  const  GlobalObjectKey <_KeepAliveListenableLeakCheckerState >(0 ).currentState! ;
573+ 
574+     expect (handle.hasListeners, false );
575+     state.dispatch (handle);
576+     expect (handle.hasListeners, true );
577+     handle.notifyListeners ();
578+     expect (handle.hasListeners, false );
579+   });
560580}
561581
562582class  _AlwaysKeepAlive  extends  StatefulWidget  {
@@ -633,3 +653,26 @@ class RenderSliverMultiBoxAdaptorAlt extends RenderSliver with
633653  @override 
634654  void  performLayout () { }
635655}
656+ 
657+ class  LeakCheckerHandle  with  ChangeNotifier  {
658+   @override 
659+   bool  get  hasListeners =>  super .hasListeners;
660+ }
661+ 
662+ class  KeepAliveListenableLeakChecker  extends  StatefulWidget  {
663+   const  KeepAliveListenableLeakChecker ({super .key});
664+ 
665+   @override 
666+   State <KeepAliveListenableLeakChecker > createState () =>  _KeepAliveListenableLeakCheckerState ();
667+ }
668+ 
669+ class  _KeepAliveListenableLeakCheckerState  extends  State <KeepAliveListenableLeakChecker > {
670+   void  dispatch (Listenable  handle) {
671+     KeepAliveNotification (handle).dispatch (context);
672+   }
673+ 
674+   @override 
675+   Widget  build (BuildContext  context) {
676+     return  const  Placeholder ();
677+   }
678+ }
0 commit comments