永恒的码流

万物皆流,无物常驻

0%

Flutter入门

前言

照着官方get-started教程做,略作补充。

入门

1 下载SDK安装包并解压

2 使用$ flutter doctor做检查并安装相关工具

安装IOS相关工具时,如果报错

1
configure: error: Package requirements (libusbmuxd >= 1.1.0) were not met:

可以使用如下方法解决IOS toolchain安装异常解决

1
2
3
4
5
6
7
brew update
brew uninstall --ignore-dependencies libimobiledevice
brew uninstall --ignore-dependencies usbmuxd
brew install --HEAD usbmuxd
brew unlink usbmuxd
brew link usbmuxd
brew install --HEAD libimobiledevice

3 配置IDE,安装插件

4 尝试运行项目

创建、在Android和IOS模拟器上运行、修改字符串并热加载。

5 写第一个APP

分为两部分,入门文档主要介绍第一部分。这两部分的内容都可以在Google Codelas中找到。


入门之坑

  • 使用命令行方式flutter upgrade升级需要谨慎,有一次升级后,flutter直接挂了。

移动端开发演进

详细请看文章为什么说Flutter是革命性的?

**传统(Android&IOS)**。APP直接调用平台控件和服务。

传统构架

WebView。APP直接调用平台的WebView以及通过桥接的方式调用服务。

WebView

ReactNative。JS代码通过桥接的方式调用平台控件和服务。桥接的转化效率较低。

WebView

Flutter。APP端通过接口直接调用平台的Canvas、Events和服务,转化效率较桥接的方式快几个数量。

WebView

上面的图皆来自文章为什么说Flutter是革命性的?



其他

一切皆控件。所有的组成部分都是控件,包括位置、补白、主题、导航等。

Flutter运行机制。请看文章

Flutter视图

Flutter异步编程

大纲:

  • 概念澄清:线程进程、并行并发、同步异步、阻塞非阻塞、单线程模型
  • 单线程异步事件模型
  • API使用及场景实践:本地编写、本地资源读写、网络请求等。

单线程模型

仅仅指代码在一个线程里执行,但可以通过工作线程调度某段代码在其他时刻异步触发。

事件机制

参考

混合开发实践

这里考虑将flutter项目作为AAR添加到已有的Android工程里,可以将AAR文件作为本地文件依赖,或者发布AAR作为远程仓库依赖。

将flutter项目作为本地AAR依赖

  • 创建flutter module项目
  • 执行flutter build apk,生成aar文件./.android/Flutter/build/outputs/flutter-release.aar
  • 将上述aar文件放入已有Android工程app/libs中,并使用api fileTree(dir: 'libs', include: ['*.jar', '*.aar'])依赖
  • 在已有Android工程添加flutter初始化代码以及集成FlutterActivity的容器。

关于有三方控件不能使用的情况,我使用的是flutter版本为1.7.8+hotfix.4,直接打包成AAR作为依赖,就可以直接使用,可能flutter当前的版本已经修复了这个问题:在打包aar的时候,会将其依赖的第三方代码也一起打进aar文件里。

另外,官方-Add Flutter to existing apps 这篇文章里说将来稳定版flutter发布本地aar仓库非常简单。

Flutter应用框架BLoC

纲要:

  • 概念
  • stream bloc
  • bloc框架

参考



参考

  1. Flutter官网
  2. Flutter Github
  3. Flutter中文社区
  4. Flutter官网中文翻译
  5. 书籍-Flutter实战
  6. Flutter从配置安装到填坑指南详解
  7. IOS toolchain安装异常解决
  8. 为什么说Flutter是革命性的?
  9. Flutter原理解析