• <ul id="cgeq2"></ul>
  • 歡迎您光臨深圳塔燈網絡科技有限公司!
    電話圖標 余先生:13699882642

    網站百科

    為您解碼網站建設的點點滴滴

    跨平臺UI框架Flutter的入門和使用

    發表日期:2018-11 文章編輯:小燈 瀏覽次數:5115

    前言

    現如今,跨平臺已是大勢所趨。層出不窮的跨平臺方案也在不停地迭代。下面看一下谷歌發布的跨平臺方案UI框架Flutter。

    Flutter的簡介

    Flutter是Google用以幫助開發者在Ios和Android兩個平臺快速開發高質量原生應用的全新移動UI框架。


    Flutter的時間線

    2018年2月27日,在2018世界移動大會上,Google發布了Flutter的第一個Beta版本。

    image.png

    同時Flutter也作為谷歌下一代移動操作系統Fuchsia的UI庫

    在最近的谷歌開發者大會上,FLutter已經發布了Release Preview2版本了,預計年底能出正式版。

    相對于其他跨平臺方案的優勢

    其他跨平臺方案

    image.png

    Flutter的特點和優勢

    繼承RN的優點

    • 1.快速開發
    • 2.質量有保證,性能足夠
    • 3.一次編寫,多平臺共享。
    • 4.提升開發體驗,支持熱重載.(基于Dart語言特性,更迅速)
    • 5.方便的與原生橋接
    • 6.與web端共享代碼(Dart語言可以在web端運行,也可將Dart轉換成js)

    改善RN的不足的點:

    • 1.使用Dart語言,解決js帶來的各種問題。包括兼容性和運行速度問題。
    • 2.雖然Flutter初始包和RN初始包大小差不多(7m左右),但由于語言特性,當業務代碼足夠多時。Flutter會遠小于RN。
    • 3.不使用原生的控件,而是單獨實現gui庫渲染。刷新速度保證在60fps。
    • 4.以幀為單位刷新頁面,不會發生過度繪制等性能問題。
    • 5.提供大量的雙平臺控件,保證一套代碼做出兩種風格的UI。

    Flutter的架構

    框架整體架構

    如圖所示

    image.png

    從該架構圖可知,Flutter框架可分為Framework層(API層)Engine層(引擎層)

    Flutter Framework: 整個框架層都是用Dart語言實現,該層提供一套基礎庫, 用于處理動畫、繪圖和手勢等。并且基于繪圖封裝了一套 UI組件庫,并且細分為兩種風格的組件

    Flutter Engine: 這是一個純 C++實現的框架層,包含了 Skia引擎(高性能渲染引擎Dart運行環境、文字排版引擎等。

    框架架構原理(與RN對比)

    RN架構

    image.png

    Flutter架構

    image.png

    說明:

    1.UI繪制上:RN使用JSBridge 繪制原生組件來顯示圖形.而Flutter使用自帶的widget引擎渲
    染圖形。
    2.與原生通信上:RN使用JSBridge橋接,而Flutter使用平臺通道。

    Dart語言簡介

    在學習使用Flutter之前,必須先了解Dart的使用。總體來說像java和js的結合,更像kotlin、swift。

    Dart語言介紹

    Dart是一種強類型、跨平臺的客戶端開發語言。具有專門為客戶端優化、高生產力、快速高效、可移植(兼容ARM/x86)、易學的OO編程風格和原生支持響應式編程(Stream & Future)等優秀特性。

    Dart語言基本概念

    • 所有變量的值都是對象,也就是類的實例。甚至數字、函數和null也都是對象,都繼承自Object類。(更多對象,而且不需要new關鍵字)

    • 雖然Dart是強類型語言,但是顯式變量類型聲明是可選的,Dart支持類型推斷。如果不想使用類型推斷,可以用dynamic類型。

    • Dart支持泛型,List<int>表示包含int類型的列表,List<dynamic>則表示包含任意類型的列表。

    • Dart支持頂層(top-level)函數和類成員函數,也支持嵌套函數和本地函數。

    • Dart支持頂層變量和類成員變量。

    • Dart沒有public、protected和private這些關鍵字,使用下劃線“_”開頭的變量或者函數,表示只在庫內可見。

    Dart語言特點(為什么谷歌選擇Dart而不是其他語言)

    • Dart可以跨平臺運行,因為他可以以不同的形式在瀏覽器/ios/android/DartVM上運行。

    • Dart是AOT(Ahead Of Time)編譯的,編譯成快速、可預測的本地代碼,使Flutter幾乎都可以使用Dart編寫。Dart也可以JIT(Just In Time)編譯,所以Flutter支持熱重載,開發周期異常快。

    因為Dart編寫的Flutter應用程序被編譯為本地代碼,因此它們不需要在領域之間建立緩慢的橋梁(例如,JavaScript到本地代碼)。它的啟動速度也快得多。

    • Dart使Flutter不需要單獨的聲明式布局語言,如JSX或XML,或單獨的可視化界面構建器,因為Dart的聲明式編程布局易于閱讀和可視化。(android 使用 java邏輯+xml布局是無奈之舉,現在改過來了。)

    • Dart特別容易學習,因為它具有靜態和動態語言用戶都熟悉的特性。

    搭建Flutter開發環境

    因為ios開發必須使用macOS,所以我這里只介紹win系統下的環境搭建具體參考官方文檔

    1.設置鏡像地址

    可以更快的獲取Flutter包和相關資源
    在環境變量里面加入
    PUB_HOSTED_URL=https://pub.flutter-io.cn
    FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

    image.png

    2.獲取Flutter SDK

    網址https://flutter.io/sdk-archive/#windows 選擇想要的版本下載或者直接從倉庫拉取版本

    git clone -b master https://github.com/flutter/flutter.git./flutter/bin/flutter --version 

    3.設置Flutter的環境變量

    將下載的壓縮包解壓后,配置flutter/bin 目錄到環境變量path里面

    image.png

    4.安裝平臺所需依賴

    ios:macos 系統只需要更新xcode到7.2以上即可進行ios軟件的開發
    android:安裝最新班的AndroidStudio 同時下載必須的AndroidSDK 即可配置完成

    5.使用其他工具開發

    Flutter可以在VSCode 、AndroidStudio(最方便)、JIDEA下進行開發。只需要安裝flutter插件即可

    以VsCode為例: 點擊 image.png
    -->搜索 Flutter--->安裝

    6.檢查一切是否正常

    命令行輸入:flutter doctor

    image.png

    實戰從0開發Flutter項目

    創建一個新的項目

    直接使用ide new flutter project 或者使用命令行 flutter create 項目名稱
    等待片刻(最好翻墻) 下載相關依賴后 項目創建完成

    image.png

    連接設備后 繼續輸入命令

    cd new_app flutter run

    稍等片刻,運行結果

    jieg

    文件目錄

    image.png

    整個文件目錄分為android 部分 ios部分 和 dart代碼部分
    android和ios部分用于放置對應平臺代碼
    下面是lib下的main.dart文件內容,是整個app的啟動入口

    image.png

    Flutter的布局

    Flutter的布局思想

    Flutter基于widget(組件)的 即萬物皆widget 從大類上來看 所有的控件都繼承與widget這個類。

    而在widget類上面,根據狀態是否有變化。又分為 StatelessWidgetStatefulWidget

    Stateless widgets是不可變的, 這意味著它們的屬性不能改變 - 所有的值都是最終的.

    Stateful widgets持有的狀態可能在widget生命周期中發生變化. 實現一個 stateful widget 至少需要兩個類:

    常用的布局控件介紹

    Flutter提供了大量的控件,包括大量類型原生風格 包括ios/Andoroid兩個平臺的。

    根據功能分為 功能控件和布局控件

    功能控件

    負責顯示 交互 的控件,包括Text Button CheckBox RadioButton EditText等控件。使用方法和在其他平臺下
    類似,這里不做詳細介紹。具體參考 https://flutterchina.club/widgets/

    布局控件

    布局控件用于排列其他控件,都有一個child屬性。根據child的數量又分為單子元素布局和多子
    元素布局。介紹幾個用的最多的布局控件。

    Container 單子元素布局控件---:擁有繪制 定位 調整大小 的容器
    Container 是最常用的容器控件,沒有之一。他的功能太豐富了。只要套上,可以給
    任意widget添加這些屬性
    屬性:
    padding 設置內邊距margin 設置外邊距 color 背景顏色 width 寬度 child 子widget
    height 高度 alignment 子布局位置 foregroundDecoration 前景描述 transform 旋轉

    Row/Column水平/垂直方向的多widget排列容器,相當于Android中的LinearLayout 兩種方向

    Stack 絕對布局,可以將所有的子布局疊加起來。相當于Android中的AbsoluteLayout類比web中的absolute

    加載資源文件

    加載本地資源

    Flutter加載任何本地文件都需要寫入配置文件 pubspec.yamlasset節點中.下面以圖片文件為例。
    介紹整個加載過程

    • 1.創建工程中image文件夾(放在工程哪里沒關系,叫什么也沒關系 只要能訪問得到)

    • 2.配置文件加入資源相對路徑。這個相對是相對于整個flutter工程的。 加入到flutter下的asset 節點下

    image.png
    • 3.代碼中引用即可,就像這樣
    image.png

    其他資源 像字體文件 文本 文件 都加入asset 下即可

    引用第三方依賴

    除了Flutter內置的控件和庫,還有很多其他依賴可以加入。具體可以去 https://pub.dartlang.org/packages 獲得。這里包括官方提供的額外依賴還有其他開發者提供的依賴。
    引入第三方依賴步驟如下(以引入webview為例):

    1.https://pub.dartlang.org/packages 上搜索webview 復制依賴代碼

    flutter_webview_plugin: ^0.2.1+2 

    2.將依賴加入到配置文件下,并啟動包獲取 flutter packages get

    image.png image.png

    3.參考文檔,代碼中引用即可,就像這樣

    image.png

    效果

    image.png

    頁面跳轉

    當應用有多個頁面時 需要從一個頁面跳轉到另一個頁面。需要用到兩個核心類Router。 route是一個屏幕或頁面的抽象,Navigator是管理route的Widget。Navigator可以通過route入棧和出棧來實現頁面之間的跳轉。

    image.png

    1.在頂層聲明路由 指向新的頁面

    2.在點擊事件里面 添加跳轉邏輯 傳入注冊的
    路由值

    Navigator可以攜帶參數和接收參數。方便頁面間的值傳遞。同時可以配置跳轉動畫,元素共享等參數

    頁面返回 使用pop方法:Navigator.of(context).pop('data');

    網絡訪問和數據解析

    Flutter中的網絡訪問來自 dart:io ,提供基本的數據訪問。由于Dart是單線程,需要配合異步(Future類)使用。

    補充:Future(期貨)對象用于執行異步操作,允許在將來獲得一個值。一般使用async 和 await可以獲得Future對象。

    訪問網絡整個流程如下:

    • 1創建 client.
    • 2構造 Uri.
    • 3發起請求, 等待請求,同時也可以配置請求headers、 body。
    • 4關閉請求, 等待響應.
    • 5解碼響應的內容.
    image.png

    取得數據后使用使用dart:convert庫可以解碼json數據。
    解析成map:

     Map datas = JsonCodec().decode(data); 
    image.png

    總結與提問

    對于企業

    Flutter的出現提供了另外一種跨平臺的方案。直接上框架是比較冒進的,因為無論是框架本身還是市場從業人員的成熟程度都不夠。但是作為技術選型的備用選項是非常不錯的選擇。

    對于個人開發者

    無論是原生開發還是前端人員 flutter都是易上手的框架。
    如果你想成為大前端開發者,flutter絕對是值得嘗試的。


    本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶學習參考,本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.juherenli.com/18400.html
    相關APP開發
     八年  行業經驗

    多一份參考,總有益處

    聯系深圳網站公司塔燈網絡,免費獲得網站建設方案及報價

    咨詢相關問題或預約面談,可以通過以下方式與我們聯系

    業務熱線:余經理:13699882642

    Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.    

    99久久久国产精品免费牛牛四川| 四虎亚洲国产成人久久精品| 国内精品免费在线观看| 日韩精品福利视频一区二区三区| 久久99精品国产自在现线小黄鸭| 潮喷大喷水系列无码久久精品| 精品日韩二区三区精品视频| 久久精品国产亚洲AV高清热| 国语自产偷拍精品视频偷蜜芽| 青草国产精品视频。| 人妻无码久久精品人妻| 亚洲精品在线网站| 久久国内精品自在自线软件| 国产成人精品三上悠亚久久 | 国产成人精品福利网站人| 亚洲熟妇无码久久精品| 久久国产乱子伦精品免费看| 亚洲伊人久久精品影院| 精品久久久久久久久久中文字幕 | 99久久人妻精品免费二区| 中文字幕九七精品乱码 | 手机在线观看精品国产片| 无码人妻精品一区二区三区99不卡| 国产微拍精品一区二区| 久久久国产亚洲精品| 91精品国产综合久久青草| 久9这里精品免费视频| 国产精品久久久久久吹潮| 99久久国产综合精品麻豆| 国语自产精品视频| 国产亚洲精品免费视频播放| 久久精品女人天堂AV麻| 凹凸国产熟女精品视频app| 一本大道无码人妻精品专区| 国产国产成人久久精品杨幂| 国产精品冒白浆免费视频| 妇女自拍偷自拍亚洲精品| 国产成人精品123区免费视频| 精品女同一区二区三区在线| 国产成人亚综合91精品首页| 精品无码av无码专区|