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

    網站百科

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

    跨端應用Flutter初體驗

    發(fā)表日期:2018-12 文章編輯:小燈 瀏覽次數:2286

    概述

    Google開源的跨端應用解決方案,官方介紹:

    Flutter allows you to build beautiful native apps on iOS and Android from a single codebase

    Flutter是谷歌開源的移動UI框架,可在iOSAndroid快速創(chuàng)建原生用戶界面,Flutter是完全免費和開源的,其中腳本語言采用Dart
    Flutter組件采用現代響應式框架構建,從React中獲得靈感,中心思想是用組件(widget)構建你的UI。 組件描述了在給定其當前配置和狀態(tài)時他們顯示的樣子,當組件狀態(tài)改變,組件會重構它的描述(description),Flutter會從底層渲染樹將當前狀態(tài)轉換到下一個狀態(tài)所需要的最小更改。

    image

    Windows環(huán)境搭建

    • 在環(huán)境變量中配置
    1export PUB_HOSTED_URL=https://pub.flutter-io.cn2export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn 
    • 系統(tǒng)要求:需要Windows 7.0/Windows 7.0+,安裝Git命令;
    • flutter.io官網下載最新包,解壓到非系統(tǒng)盤目錄;
    • 如果你使用android studio開發(fā)安卓應用,必須在您的機器上安裝有android sdk
    • 運行目錄下的flutter_console.bat,在Dos中輸入flutter doctor安裝依賴并自行編譯,可能需要10幾分鐘,請耐心等待,如果flutter命令無法顯示,請將安裝目錄的bin的目錄加入到path路徑下;
    • android studio中安裝flutter插件,在應用商店搜索flutter安裝即可;
    • 安裝完Dard-SDK和Flutter-SDK后,你無需使用android studio開發(fā),利用輕量級的vs code照樣可以開發(fā)flutter應用,比如我的環(huán)境:
    image

    注:只需要在vs code中安裝插件dart和flutter,利用flutter create xxx新建一個flutter項目,利用flutter emulators列出本機AVD列表,選一個模擬器運行:flutter emulators launch AVD_ID即可,在vscode中修改代碼,只需要在終端中輸入“r”即可實時在模擬器中看到效果,非常輕量和方便。

    從一個例子說起

    我們實現一個用戶列表,顯示最近使用我們sumslack服務的用戶列表,并在列表中顯示頭像,效果如下圖:


    image.png

    技術點:

    1. 通過http異步獲取用戶列表;
    2. json解析;
    3. ListView顯示;
      Flutter采用Dart語言編寫,支持熱部署,修改代碼后即可在手機在看到實時效果,一個最簡單的Hello World的例子如下,從中可看到項目結構:
    import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Welcome to Flutter', home: new Scaffold( appBar: new AppBar( title: new Text('Welcome to Flutter'), ), body: new Center( child: new Text('Hello World'), ), ), ); } } 
    代碼結構分析
    • 本示例創(chuàng)建一個Material APP。Material是一種標準的移動端和web端的視覺設計語言。 Flutter提供了一套豐富的Material widgets。
    • main函數使用了(=>)符號, 這是Dart中單行函數或方法的簡寫。
    • 該應用程序繼承了 StatelessWidget,這將會使應用本身也成為一個widget。 在Flutter中,大多數東西都是widget,包括對齊(alignment)、填充(padding)和布局(layout)
    • Scaffold 是 Material library 中提供的一個widget, 它提供了默認的導航欄、標題和包含主屏幕widget樹的body屬性。widget樹可以很復雜。
    • widget的主要工作是提供一個build()方法來描述如何根據其他較低級別的widget來顯示自己。
    • 本示例中的body的widget樹中包含了一個Center widget, Center widget又包含一個 Text 子widget。 Center widget可以將其子widget樹對其到屏幕中心。

    基礎以上最簡單的示例,在我們構建用戶列表這個app時,首先主體結構和hello world例子并無差異,如下dart代碼:

     import 'package:flutter/material.dart';import 'package:hello_world/homepage.dart';void main() => runApp(new MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {return new MaterialApp( title: '用戶列表', theme: new ThemeData( primarySwatch: Colors.orange, ), home: new MyHomePage() ); } } 

    頁面的主體內容是一個ListViewListView里每個ListItem又是一個復雜Widget,采用RowColumn的布局容器即可實現,MyHomePage.dart代碼如下:

     import 'package:flutter/material.dart';import 'package:dio/dio.dart';import 'dart:convert' show json;Dio dio = new Dio();class MyHomePage extends StatefulWidget {@overrideState<StatefulWidget> createState() { return new _MyHomePageState(); } }class _MyHomePageState extends State<MyHomePage>{ List<Model> _items = [];@override void initState() { super.initState(); _getListDate(); }@override Widget build(BuildContext context){ return new Scaffold( appBar: new AppBar( title: new Text("用戶列表"), ), body: new ListView.builder(itemCount: _items.length,itemBuilder: itemView,) ); }Widget itemView(BuildContext context,int index){ Model model = this._items[index]; if(index.isOdd) return new Divider(height:2.0); return new Container( color:Color.fromARGB(0x22, 0x49, 0x49,0x8d), child: new Padding( padding: const EdgeInsets.all(8.0), child: new Padding( padding: const EdgeInsets.all(8.0), child: new Column( children: <Widget>[ new Row( children: <Widget>[ Image.network('${model.avator}',width: 70,height: 70,), new Text('${model.uid}',style: new TextStyle(fontSize: 20.0)), ] ), new Center( heightFactor: 2.0, child: new Text("${model.nickname}",style: new TextStyle(fontSize: 25.0),), ) ], ) ) ) ); }void _getListDate(){ //列表來自http請求 Future<Response<String>> response= dio.get("http://wx.sumslack.com/restful/stat/userList.jhtml?p=1"); response.then((item){ List<Model> widgets = []; final dynamic dataJson = json.decode(item.data); final List resultList = dataJson['result']; resultList.forEach((dynamic _user){ print(_user["nickname"]); widgets.add(new Model(_user["uid"],_user["nickname"],_user["avator"])); }); setState(() { _items= widgets; }); }); }}class Model { String uid; String nickname; String avator; Model(this.uid,this.nickname,this.avator); } 

    在模擬器或手機上運行即可看到截圖中的效果,Flutter相比Weex更復雜,畢竟Dart語言平時接觸不多,可以在官網:https://flutter.io/docs/get-started/install 找到更多學習材料,阿里技術公眾號中有一篇更深入講解Flutter的文章:《深入理解Flutter的編譯原理與優(yōu)化》

    相比阿里開源的Weex,flutter能更好的替代native頁面展現復雜的交互頁面,性能也更好,weex用來展現內容頁面更加合適,還有就是表單類的頁面,但對于復雜的頁面交互,weex性能略差。

    如果你沒接觸過weex,并且對vue也并不熟悉,那么,筆者強烈建議您使用Flutter作為您的跨端應用解決方案。


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

    多一份參考,總有益處

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

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

    業(yè)務熱線:余經理:13699882642

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

    牛牛本精品99久久精品| 99re6在线视频精品免费下载 | 四虎精品免费永久免费视频| 最新国语自产精品视频在| 亚洲国产精品福利片在线观看 | 9久久9久久精品| 国产精品久免费的黄网站| 97久久超碰国产精品2021| 国产精品天天看天天狠| 中文国产成人精品久久一区| 国产精品福利网站| 久热这里只精品99国产6_99| 精品国产AV色欲果冻传媒| 精品国产a∨无码一区二区三区| 亚洲AV永久无码精品一百度影院| 国产精品哟女在线观看| 精品一区二区三区中文| 精品性高朝久久久久久久| 国产亚洲精品成人AA片| 久久久精品国产免大香伊| 日韩精品国产另类专区| 国产精品igao视频网网址| 国产在vr视频精品观看| 久久精品中文字幕第23页| 精品视频在线观看一区二区三区 | 中文字幕精品在线观看| 人妻无码久久精品| 国产乱子伦精品免费无码专区| 99国产精品欧美一区二区三区 | 国产精品毛片在线完整版| 国产成人精品一区二三区熟女| 99久久综合国产精品免费| 亚洲国产精品免费观看 | 日日夜夜精品视频| 精品国精品国产自在久国产应用| 精品一区二区三区免费毛片爱| 精品综合久久久久久88小说| 国产精品成人观看视频| 青草久久精品亚洲综合专区| 九九精品国产亚洲AV日韩| 精品一区狼人国产在线|