作家
登录

为安卓开发者介绍的移动开发框架 Flutter

作者: 来源: 2017-10-10 14:40:01 阅读 我要评论

Async/Await

这种情况你只能应用线程来处理,如下所示:

public void onClick(View v) {    new Thread(new Runnable() {        public void run() {            // a potentially  time consuming task            final Bitmap bitmap =                    processBitMap("image.png");            mImageView.post(new Runnable() {                public void run() {                    mImageView.setImageBitmap(bitmap);                }            });        }    }).start();}

上述代码可以很简单的应用 Dart 完成:

onClick() async {  Bitmap bitmap = await processBitMap("image.png");
  // you don't want to update non-existent widget  if (!mounted) return;
  setState(() {    imageView = bitmap;  });}

这里产生了什么? async 润饰符标记的办法会安排稍后履行,该办法变成非浊宣的,是以你的应用法度榜样不会损掉任何帧,await 润饰符挂起办法的履行,等待 processBitMap 完成,然后履行将会恢复。

Widget

今朝有大年夜量在 Android 之上运行的各类 OEM 软件和皮肤,这都是可以懂得的,因为每个制造商都欲望为其设备建立本身的附加值,我不克不及计算我毕竟说了若干次“Funck S*ms*ng”,OEM 定制对 Android 开辟人员惹人了很多灾题.。

Flutter,为了实现 120FPS 的目标,已决定开端在一个空的画布上,应用 Skia 2D 图形库绘制每个 widget,而不是重用 OEM widget,并实现大年夜多半 Material Designa 和通用 layout。

这种办法,无法包管你的应用法度榜样在多种设备上看起来是一样的,尽管并不是所有的 Flutter widget 都经由优化,可以在平板电脑上也可以在较小屏幕的设备上正常工作。

无论若何,这种办法也为 UI 设计的立异打开了新的大年夜门,例如,以下的代码可以使得用户改变 Activity 的大年夜小:

class HeroScreen extends StatefulWidget {  @override  HeroState createState() => new HeroState();}class HeroState extends State<HeroScreen> with SingleTickerProviderStateMixin {  bool _scaling = false;  Matrix4 _transformScale = new Matrix4.identity();  double scalePos = 1.0;  set _scale(double value) =>      _transformScale = new Matrix4.identity()..scale(value, value, 1.0);  @override  Widget build(BuildContext context) {    return new Scaffold(        body: new GestureDetector(            onScaleStart: (details) {              setState(() {                _scaling = true;              });            },            onScaleUpdate: (details) {              var n = details.scale;              setState(() {                scalePos = n;                _scale = n;              });            },            onScaleEnd: (details) {              setState(() {                _scaling = false;                _scale = scalePos < 1 ? 1.0 : scalePos;              });            },            child: new Container(                color: Colors.black26,                child: new Transform(                    transform: _transformScale,                    child: new Center(                        child: new Row(                            mainAxisAlignment: MainAxisAlignment.center,                            children: <Widget>[                          new Text(_scaling ? "Scaling" : "Scale me up"),                        ]))))));  }}

这让我们获得一个异常有趣的小部件,如许去写可反复应用的小部件就太轻易了, 我可以将以上不太友爱的代码转换成可重用且干净的小部件:

class Scale extends StatefulWidget {  final Widget child;  final GestureScaleStartCallback onStart;  final GestureScaleEndCallback onEnd;  final GestureScaleUpdateCallback onUpdate;  Scale({Key key, this.child, this.onStart, this.onUpdate, this.onEnd})      : super();  @override  ScaleState createState() => new ScaleState();}class ScaleState extends State<Scale> with SingleTickerProviderStateMixin {  Matrix4 _transformScale = new Matrix4.identity();  double scalePos = 1.0;  set _scale(double value) =>      _transformScale = new Matrix4.identity()..scale(value, value, 1.0);  @override  Widget build(BuildContext context) {    return new GestureDetector(        onScaleStart: widget.onStart,        onScaleUpdate: (details) {          widget.onUpdate(details);          var n = details.scale;          setState(() {            scalePos = n;            _scale = n;          });        },        onScaleEnd: (details) {          widget.onEnd(details);          setState(() {            _scale = scalePos < 1 ? 1.0 : scalePos;          });        },        child: new Container(            color: Colors.black26,            child: new Transform(                transform: _transformScale, child: widget.child)));  }}

重构后的代码如下:

即时运行称为热从新加载,须要不到一秒钟

  • Flutter 应用 CPU 绘制图形、应用 GPU 衬着, 然则一些关于 3D 的 API 是弗采取的

  • 不消 XML 来设计构造

  • 我是 TrueFace 的高等软件工程师 Adel Boussaken。今天我要给大年夜家介绍 Flutter 开辟。迎接参加 Dart 阵营。

    构造只需一次性计算树的大年夜小

  • 即使有语法缺点,您的 APP 也不会崩溃


      推荐阅读

      通过SSH实现TCP/IP隧道(端口转发):使用OpenSSH可能的8种场景

    interno1 $ vncviewer localhost::7900 externo1 $ ssh -L 0.0.0.0:7900:localhost:5900 user@interno1 对于 Secure Shell (SSH) 如许的收集协定来说,其重要职责就是在终端模式下拜访一个>>>详细阅读


    本文标题:为安卓开发者介绍的移动开发框架 Flutter

    地址:http://www.17bianji.com/lsqh/37758.html

  • 关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)