美文网首页
flutter Mixins解决部分类似特性继承问题

flutter Mixins解决部分类似特性继承问题

作者: 某非著名程序员 | 来源:发表于2021-08-25 08:34 被阅读0次

    1. Mixins的作用

    iOS中一直都是单继承,假如父类(A)有子类A1、A2、A3。


    继承.png

    假设A1和A2有共用方法method12;A2和A3有共用方法method23;A1和A3有共用方法method13;这种场景下,单继承还能满足场景吗?

    1. 方案一:把method12、method23、method13移至父类A中实现


      方案一.png

    代码复用了,但是父类的方法并不适用所有的子类。例如method12对A3来说就冗余了。

    1. 方案二:每个子类单独实现需要的方法。
      缺点:就是继承的作用完全丢失了。

    flutter中提供了一个方案Mixins。mixin去定义并实现相关信息,一个类可以继承多个。

    mixin A12 {
      void method12() {
        print("method12");
      }
    }
    
    mixin A13 {
      void method13() {
        print("method13");
      }
    }
    
    mixin A23 {
      void method23() {
        print("method23");
      }
    }
    
    class A {}
    
    class A1 extends A with A12, A13 {}
    
    class A2 extends A with A12, A23 {}
    
    class A3 extends A with A13, A23 {}
    

    method12、method13、method23只用实现一遍,被多个需要的类进行复用。很好的解决了多继承的问题。

    2. 系统很多实现采用了这种方式,例如页面间的跳转,在返回到当前页面时,进行刷新操作。

    1. 定义routeObserver:
    final RouteObserver<PageRoute> routeObserver = RouteObserver<PageRoute>();
    
    1. 在MaterialApp定义添加观察者:
    MaterialApp(navigatorObservers: [routeObserver],);
    
    1. 在需要的类withRouteAware:
    class _SpaceState extends State<Space> with RouteAware {
        @override
      void didChangeDependencies() {
        super.didChangeDependencies();
        routeObserver.subscribe(this, ModalRoute.of(context));
      }
    
      @override
      void dispose() {
        super.dispose();
        routeObserver.unsubscribe(this);
      }
    
      @override
      void didPopNext() {
        super.didPopNext();
        debugPrint("刷新");
        list.loadNewStart();
      }
    
      @override
      void didPush() {
        super.didPush();
      }
    
      @override
      void didPop() {
        super.didPop();
      }
    
      @override
      void didPushNext() {
        super.didPushNext();
      }
    }
    

    相关文章

      网友评论

          本文标题:flutter Mixins解决部分类似特性继承问题

          本文链接:https://www.haomeiwen.com/subject/kivkiltx.html