最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 2021首次发车,Flutter Fair正式开源了

    正文概述 掘金(狗头研究中心)   2021-01-11   426

    传送门

    Flutter Fair是什么?

    在正式开源前,我们已经通过两篇文章,介绍了Fair的设计初衷和技术思路,这里不再赘述。

    • Flutter动态化框架Fair的设计与思考
    • Flutter动态化框架Fair文档上线&开源倒计时

    Fair是面向Dart的框架,虽然JavaScript是世界上“最好的语言”,但是我们仍然选择面向Dart而不是JS。有两个考量:

    • 基于JS的框架社区已经存在了,不想重复造轮子。
    • 面向JS存在通信的鸿沟,且对Dart开发者不够友好,如果使用JS,与RN打照面好像有点尴尬?。

    Fair通过DSL动态,结合Module组件,实现UI和逻辑的协作。其中DSL可以通过Bundle下发,Module需要作为基础能力,固化在App中跟版迭代。

    2021首次发车,Flutter Fair正式开源了

    概括一下Fair的面貌:

    1. Fair是面向原生Flutter开发者的,你不需要使用前端JS技术栈
    2. Fair的性能得益于Dart,无桥接更纯真
    3. Fair适用与Android,iOS,Web等全平台,Flutter可以用在哪里Fair就可以在哪里
    4. Fair是平台无关的,像普通Package一样,甚至可以和其他flutter动态化框架一起用

    效果怎么样?

    其实这个完全取决你能用Flutter画出多美妙的UI。如果非要说Flutter是一个画画图的框架,那他绝不会让你失望的。

    2021首次发车,Flutter Fair正式开源了

    录制的视频可以访问文档平台查看:https://fair.58.com/guide/#demo-preview

    Flutter模板工程Hello World

    通过flutter create可以新建一个模板工程,内容是一个点击计数器效果。 我们将生成的源码,接入Fair后既可以通过动态形式去展示这个点击计数的逻辑。

    效果

    Flutter 原生Flutter Fair
    2021首次发车,Flutter Fair正式开源了2021首次发车,Flutter Fair正式开源了

    Fair接入

    FairWidget(
      name: 'home_page',
      path: 'assets/bundle/lib_home_page.fair.json',
      data: {
        'title': 'Flutter Demo Home Page',
      },
    )
    

    Flutter源码

    /*
     * Copyright (C) 2005-present, 58.com.  All rights reserved.
     * Use of this source code is governed by a BSD type license that can be
     * found in the LICENSE file.
     */
    import 'package:fair/fair.dart';
    import 'package:flutter/material.dart';
    
    import 'theme.dart';
    @FairPatch()
    class MyHomePage extends StatefulWidget {
      MyHomePage({Key key, this.title}) : super(key: key);
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      @FairWell('_counter')
      int _counter = 0;
    
      @FairWell('_incrementCounter')
      void _incrementCounter() {
        setState(() {
          _counter++;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text(
                  'You have pushed the button this many times:',
                ),
                Text(
                  '$_counter',
                  style: ThemeStyle.headline4(context),
                ),
              ],
            ),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: Icon(Icons.add),
          ),
        );
      }
    }
    

    AdobeXD plugin支持

    在前端开发中,有一种技术叫做代码生成,可以基于设计稿直接生成js/css代码。Adobe的工程师团队也在做面向Flutter代码生成的插件AdobeXD。这个插件目前还是早期阶段xd-to-flutter-plugin

    由于Flutter这种书写界面的方式和HTML相差无几,技术上是完全可行的。可以开发一套功能有限的运营平台,实现基础界面的拖拽设计,然后导出flutter代码。这里我们利用Adobe XD插件生成的flutter工程,直接转换为Fair动态化。都不用写“俄罗斯套娃”布局了,是不是想想还有点刺激的?

    效果

    Flutter 原生Flutter Fair1Flutter Fair2
    2021首次发车,Flutter Fair正式开源了2021首次发车,Flutter Fair正式开源了2021首次发车,Flutter Fair正式开源了

    Fair接入

    FairWidget(
      name: 'adobe_xd',
      path: kIsWeb
          ? 'assets/bundle/lib_Home.fair.json'
          : 'assets/bundle/lib_Home.fair.bin',
      data: {
        'svg_il6hf2': svg_il6hf2,
        'svg_uvjlj2': svg_uvjlj2,
        'svg_6o6tx4': svg_6o6tx4,
        'svg_emmxj3': svg_emmxj3,
        'svg_dzwujb': svg_dzwujb,
        'svg_p45gdo': svg_p45gdo,
        'svg_20idv2': svg_20idv2
      },
    )
    

    Flutter源码

    这个界面源码过于复杂,就不贴了。代码地址在:samples/adobe_xd/lib/Home.dart

    Best UI template转换

    这个就厉害了,一个UI相等精美的flutter工程,各种动效,界面设计完全是工业级的。当然他使用的属性也特别多,所以转换起来还是有点麻烦的,我们选择性转换了大部分页面。 建议大家也去看前面提到的视频。其中带Fair黄色角标的都是动态组件,有的使用在滑动列表中,作为一个卡片,有的作为全屏页面。 2021首次发车,Flutter Fair正式开源了

    相关源码位于:samples/best_flutter_ui_templates/lib

    使用Fair会不会掉帧?

    帧率经常被用来评估App的顺滑程度。flutter的UI性能优化可以参考此文。

    开启悬浮层可以看到栅格化线程和UI线程的帧率,Y轴方向每条分割线是16ms一档,如果超出最低档,基本可能会出现卡顿Jank。

    这个demo是官方的hello,UI,State都有了,在点击加号的时候,Fair内部也是做得局部刷新,不会导致整个页面重加载。

    不过这个界面确实有点简单,也说明不了太多问题。需要指出的是Fair并没有替换Flutter的渲染方式,所以如果转换前的代码有卡顿问题,那么转换后也会有问题,UI优化可以从转义源码前入手,目前不需要去优化Fair写法。

    针对Fair的性能,将进一步优化,确保不会为接入app新增隐患。

    原生计数器Fair计数器
    2021首次发车,Flutter Fair正式开源了2021首次发车,Flutter Fair正式开源了

    还有。。。

    还想知道更多?请移步至文档平台:fair.58.com/

    在上手之后在结合源码,效果更佳。


    起源地下载网 » 2021首次发车,Flutter Fair正式开源了

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元