flutter出來也有一年多的時(shí)間了,這個(gè)東西呢,也是用來做跨平臺的,是由google主推的季春,作用與weex,reactive native一樣徙菠,flutter的各種優(yōu)勢及缺點(diǎn)呢缨称,我們這里就不再多說了凝果,網(wǎng)上有非常多的文章供大家參考,今天我們重點(diǎn)來分析一下睦尽,flutter工程與我們傳統(tǒng)的android工程有什么區(qū)別器净,以及這些區(qū)別的作用。
? 在我們講解本節(jié)課的內(nèi)容之前当凡,希望大家有一定的flutter基礎(chǔ)和gradle基礎(chǔ)山害,因?yàn)槲覀円治龅氖亲顝?fù)雜最完整的flutter與原生的混編工程與傳統(tǒng)的android工程的區(qū)別,在講解區(qū)別的時(shí)候沿量,我們又會講解幾個(gè)重要的gradle文件的作用浪慌,所以大家最好對這些知識有一個(gè)基本的了解,這樣看起來才不會太吃力朴则,好权纤,下面我們正式開始本節(jié)課的內(nèi)容。
?    既然我們要講解的是flutter工程乌妒,那么汹想,我們首先先來創(chuàng)建一個(gè)flutter工程(混編工程,非純flutter工程)撤蚊,如下圖:
![圖片描述](//img.mukewang.com/5c652f1b0001d4f102820626.png)
? 如上圖古掏,下面我們就按個(gè)來分析,看一下一個(gè)flutter混編工程都有那些不同之處相對我們傳統(tǒng)的android工程侦啸。首先第一個(gè).gradle文件沒有區(qū)別槽唾,里面就是我們當(dāng)前工程使用的gradle的版本,接下來一個(gè)光涂,就是我們的android文件夾夏漱,用來存放我們的android工程,再下來是我們的asset文件夾顶捷,用來存放flutter工程的資源,包括圖片屎篱,字體服赎,視頻等任何資源文件,http_plugin大家先不看交播,因?yàn)樗且粋€(gè)插件工程重虑,我們最后看,再下來是一個(gè)ios文件夾秦士,里面當(dāng)然是存放我們的ios工程的所有內(nèi)容缺厉,再下來的lib文件夾,則是存放flutter代碼的默認(rèn)目錄(可以修改名字,后面詳細(xì)講解),最后一個(gè)最重要的文件是pubspec.yaml文件提针,這個(gè)文件用來配置flutter工程所需要的依賴等命爬,到這里其實(shí)我們就從整體上知道了,flutter工程有那些特別的地方辐脖,當(dāng)然還只是停留在一個(gè)整體饲宛,下面我們以一張圖來進(jìn)行對比,從整體上我們來看一下與傳統(tǒng)android工程的區(qū)別嗜价。
![圖片描述](//img.mukewang.com/5c65360800018e7911500870.png)
從圖中我們可以看到艇抠,其實(shí)flutter混編工程無非就是多了下面兩部分,很容易理解,因?yàn)槭强缙脚_的所以久锥,需要一個(gè)ios的容器工程家淤,最后一部分就是flutter工程本身的東西,包括他的資源和代碼瑟由,以及依賴等絮重。所以大家不要對flutter有恐懼覺得他有多復(fù)雜,其實(shí)只是多了一點(diǎn)點(diǎn)東西错妖。
?    下面我們就詳細(xì)的講解一下圖中的各個(gè)部分绿鸣,我們先從最簡單的flutter工程來看,他有三個(gè)主要文件(夾)暂氯,第一個(gè)lib文件夾潮模,存放flutter部分代碼,即一系列的dart文件痴施,如圖:
![圖片描述](//img.mukewang.com/5c6538000001b98502500095.png)
所以如果想要學(xué)會寫flutter,需要有一定的drat基礎(chǔ)擎厢。第二部分資源文件asset文件夾,來看一下我這個(gè)工程里面放了那些內(nèi)容辣吃,如圖:
![圖片描述](//img.mukewang.com/5c65388600018a5102160242.png)
我這個(gè)工程里主要存放了字體資源和各個(gè)模塊的所用到的圖动遭。最后一個(gè)就是flutter工程自己的一個(gè)工程配置文件pubspec.yaml,下面我們來看一下這個(gè)配置文件里有哪些內(nèi)容,如下:
```
#第一部分神得,工程相關(guān)的描述信息
name: flutter_module
description: A new Flutter module.
version: 1.0.0+1
environment:
? sdk: ">=2.0.0-dev.68.0 <3.0.0"
#第二部分厘惦,flutter工程本身所需要的依賴
dependencies:
? flutter:
? ? sdk: flutter
? # The following adds the Cupertino Icons font to your application.
? # Use with the CupertinoIcons class for iOS style icons.
? cupertino_icons: ^0.1.2
? device_info: 0.2.1
? intl: 0.15.7
? connectivity: 0.3.2
? english_words: ^3.1.0
? url_launcher: 4.0.1
? video_player: 0.7.2
dev_dependencies:
? flutter_test:
? ? sdk: flutter
? #源碼依賴http_plugin插件工程
? http_plugin:
? ? ? path: ./http_plugin/
? json_serializable: ^2.0.0
? build_runner: ^1.0.0
# For information on the generic Dart part of this file, see the
# following page: https://www.dartlang.org/tools/pub/pubspec
# 第三部分,flutter中的資源申明
flutter:
? # The following line ensures that the Material Icons font is
? # included with your application, so that you can use the icons in
? # the material Icons class.
? uses-material-design: true
? assets:
? ? - asset/images/
? fonts:
? ? - family: Raleway
? ? ? fonts:
? ? ? ? - asset: asset/fonts/raleway/Raleway-Regular.ttf
? ? ? ? - asset: asset/fonts/raleway/Raleway-Medium.ttf
? ? ? ? ? weight: 500
? ? ? ? - asset: asset/fonts/raleway/Raleway-SemiBold.ttf
? ? ? ? ? weight: 600
? module:
? ? androidPackage: com.imooc.fluttermodule
? ? iosBundleIdentifier: com.imooc.flutterModule
```
可以看到哩簿,也非常得簡單宵蕉,主要就是用來管理flutter工程本身的代碼,依賴节榜,資源羡玛。
   在了解了flutter工程特有的結(jié)構(gòu)以后,我們來看一些復(fù)雜的內(nèi)容宗苍,那么稼稿,我問大家薄榛,flutter工程的dart代碼和資源是如何打入到我們最終的可執(zhí)行文件apk中的呢,這下我們就要來看flutter工程如何與圖中的android工程結(jié)合起來让歼。由于此部分篇幅比較長敞恋,所以我們放到[下一節(jié)課](http://www.imooc.com/article/278454)來講解這部分內(nèi)容。
**歡迎關(guān)注課程:**
[Gradle3.0自動(dòng)化項(xiàng)目構(gòu)建技術(shù)精講+實(shí)戰(zhàn)](https://coding.imooc.com/class/206.html?mc_marking=a48f4eff5ae64dfbaf9427fa0c171ce5&mc_channel=shouji)
[Android熱修復(fù)與插件化實(shí)踐之路](https://coding.imooc.com/class/106.html?mc_marking=b49330c6e77b596b0ca51b78899c715b&mc_channel=shouji)
[組件化封裝思想實(shí)戰(zhàn)Android App](https://coding.imooc.com/class/84.html?mc_marking=4b8b7f0de1d11ec04c1f64da9ade8280&mc_channel=shouji)