Flutter来了,你慌了吗

Posted Android每日一讲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter来了,你慌了吗相关的知识,希望对你有一定的参考价值。

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

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

什么是Flutter

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

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

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',
      homenew Text('Hello Futter'),
      themenew 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接口来供开发者处理复杂的事务。

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界面

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也开始发力推出自己的平台,可以想象在未来跨平台移动开发的重要性会逐渐显现。
想不被淘汰?还是要保持学习才行。


以上是关于Flutter来了,你慌了吗的主要内容,如果未能解决你的问题,请参考以下文章

还在用JDK7,JDK11马上就要发布了,你慌了吗?

快手裁员30%,大部分年薪超100w?工资越高越容易被裁,你慌了吗?

《360前端星计划》360最强前端团队奇舞团来了!

初识Dubbo

华为鸿蒙系统Harmony OS真的让谷歌慌了吗?

C#9都来了,连7.0版本都没学好的我慌了...