Flutter来了,你慌了吗
Posted Android每日一讲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter来了,你慌了吗相关的知识,希望对你有一定的参考价值。
在刚过去的一周里Google公布了第一个预览版的Flutter,
Flutter 的首个「发布预览版」全球发布
如果你接触过React-Native的话,Flutter是一个跟RN差不多的框架。
它支持跨平台运行,一次开发,就可以在android和ios上同时运行。
很多人预测这会给现在的移动开发带来一些改变,也可能预示着未来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',
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接口来供开发者处理复杂的事务。
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来了,你慌了吗的主要内容,如果未能解决你的问题,请参考以下文章