前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter来了,你慌了吗

Flutter来了,你慌了吗

作者头像
PhoenixZheng
发布2018-08-07 16:13:14
8720
发布2018-08-07 16:13:14
举报
文章被收录于专栏:Phoenix的Android之旅

在刚过去的一周里Google公布了第一个预览版的Flutter, Flutter 的首个「发布预览版」全球发布 如果你接触过React-Native的话,Flutter是一个跟RN差不多的框架。 它支持跨平台运行,一次开发,就可以在Android和IOS上同时运行。

很多人预测这会给现在的移动开发带来一些改变,也可能预示着未来Android开发的发展方向。 今天花几分钟了解一下Flutter是个什么东西,你才能判断对自己有什么影响。

什么是Flutter

可以把Flutter理解为一个跟Android Framework一样的中间层框架, 它提供接口和控件给开发者,同时它自己会维护UI的更新,线程的控制。 在原理上,Flutter是一个c++引擎作为中间件支撑UI运行的。

然后,它的开发基于 dart语言,如果你了解Web开发的话,下面的语言风格可能不陌生

代码语言:javascript
复制
void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Startup Name Generator',
      home: new Text('Hello Futter'),
      theme: new ThemeData(
          primaryColor: Colors.white
      ),
    );
  }
}

如果你是Java开发也没关系, dart是面向对象语言,只要有Java的基础,很快就能上手 dart开发。 上面用几行代码就完成了一个 Hello World界面,非常简单,Flutter也不需要通过 xml来定义 layout,可能对于Android开发者来说不太习惯,而对于Web开发者来说就比较熟悉了。

Flutter的UI

在Flutter上,没有跟Android一样的Activity/Fragment这种概念, 取而代之的是 Widget和State。 可以理解为,在 Flutter上,一切都是 widget, 而 Activity的跳转,Fragment的切换,都可以理解为 Widget在 UI栈上的push和pop。

而State是什么呢, 官方解释是,关于每个Widget都有自己的状态,像Button的pressed和normal状态,Image的Color值,在Flutter上都可以理解为State。 粗浅的理解的话,Widget负责定义UI该显示什么,State负责定义UI该怎么显示。

Flutter的线程

Flutter跟Web有点相似,它只有一个线程,也是UI线程。 但是对于耗时操作,它也提供了 async和wait接口来供开发者处理复杂的事务。

代码语言:javascript
复制
loadData() async {
  String dataURL = "https://jsonplaceholder.typicode.com/posts";
  http.Response response = await http.get(dataURL);
  setState(() {
    widgets = json.decode(response.body);
  });
}

在这段代码中,loadData()定义了一个方法, async 字段声明这是一个异步的方法, 在方法体中通过 await声明了耗时操作, Flutter会自动帮开发者处理耗时的事情,直到操作完成,就会接着调用 setState()方法来更新UI。

Flutter跟原生Android的交互

跟RN类似,在开发的过程中总会为了各种各样的原因来做混合开发。 Flutter也一样,但是由于它的所有界面都在同一个stack里,所以它不能够像RN一样在Android界面中间嵌入一个Flutter的控件。 它提供了回调的语法,让开发者可以在Android代码中唤起Flutter界面

代码语言:javascript
复制
public class MainActivity extends FlutterActivity {
....
new MethodChannel(getFlutterView(), "app.channel.shared.data")
      .setMethodCallHandler(new MethodChannel.MethodCallHandler() {
        @Override
        public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
          if (methodCall.method.contentEquals("getSharedText")) {
            result.success(sharedText);
            sharedText = null;
          }
        }
      });

不过不排除以后会有混合UI的可能性,毕竟现在还是预览版。

Flutter会让Android开发失业吗

其实Android开发最担心的应该这个问题,它会取代传统的Android开发吗? 就目前Flutter的情况来说可能性不大, 首先它编出来的 apk非常大,因为要打包Flutter FW进去,所以即使是一个HelloWord也有30M。 其次UI卡顿问题也比较明显,特别是在切换界面的时候目前的情况还不能做到跟原生一样的体验。 最后因为Flutter FW的存在,想要用高级技巧来操作Android底层的话会更加困难。 但是自从RN之后,越来越多的跨平台开发出现,现在Google也开始发力推出自己的平台,可以想象在未来跨平台移动开发的重要性会逐渐显现。 想不被淘汰?还是要保持学习才行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Flutter
  • Flutter的UI
  • Flutter的线程
  • Flutter跟原生Android的交互
  • Flutter会让Android开发失业吗
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档