為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2018-09 文章編輯:小燈 瀏覽次數(shù):1643
GitHub:https://github.com/happy-python/flutter_demos/tree/master/http_demo
Flutter
應(yīng)用程序使用 Dart
語言編寫(最初來自 Google,現(xiàn)在是 ECMA標(biāo)準(zhǔn))。Dart
與其他現(xiàn)代語言(如 Kotlin 和 Swift)具有許多相同的功能,可以轉(zhuǎn)換為 JavaScript 代碼。
作為一個(gè)跨平臺(tái)框架,Flutter
最接近 React Native,允許響應(yīng)式和聲明式的編程風(fēng)格。然而,與 React Native 不同,Flutter
不需要使用 Javascript 橋接,這可以改善應(yīng)用啟動(dòng)時(shí)間和整體性能。Dart
通過使用Ahead-Of-Time
或 AOT
編譯來實(shí)現(xiàn)這一點(diǎn)。
Dart
的另一個(gè)獨(dú)特方面是它也可以使用 Just-In-Time
或 JIT
編譯。使用 JIT 編譯通過熱重新加載(hot reload
)功能在開發(fā)期間刷新 UI 而無需全新構(gòu)建,從而改進(jìn)了開發(fā)工作流程。
Flutter
框架主要圍繞窗口小部件(widgets
)構(gòu)建。在 Flutter
中,窗口小部件不僅用于應(yīng)用程序的視圖,還用于整個(gè)屏幕,甚至用于應(yīng)用程序本身。
除了跨平臺(tái)的 iOS 和 Android 開發(fā)之外,學(xué)習(xí) Flutter
還將為您開發(fā)Fuchsia
平臺(tái)提供一個(gè)良好的開端,該平臺(tái)目前是 Google 開發(fā)的實(shí)驗(yàn)性操作系統(tǒng)。許多人認(rèn)為它是未來 Android 的潛在替代品。
在本教程中,您將構(gòu)建一個(gè) Flutter
應(yīng)用程序,該應(yīng)用程序查詢 GitHub API,并在可滾動(dòng)列表中顯示團(tuán)隊(duì)成員信息:
幾乎 Flutter
應(yīng)用程序的每個(gè)元素都是一個(gè)小部件。窗口小部件被設(shè)計(jì)為不可變的,因?yàn)槭褂貌豢勺兇翱谛〔考兄诒3謶?yīng)用程序 UI 輕量級(jí)。
您將使用兩種基本類型的小部件:
StatelessWidget
:無狀態(tài),僅依賴于自己的配置信息的小部件,例如圖像視圖中的靜態(tài)圖像。StatefulWidget
:有狀態(tài),需要維護(hù)動(dòng)態(tài)信息的小部件,并通過與 State
對(duì)象交互來實(shí)現(xiàn)。無狀態(tài)和有狀態(tài)窗口小部件都在 Flutter
應(yīng)用程序中重繪每一幀,不同之處在于有狀態(tài)窗口小部件將其配置委托給 State
對(duì)象。
現(xiàn)在將使用框架中可用的包進(jìn)行 HTTP 網(wǎng)絡(luò)調(diào)用,并將生成的響應(yīng) JSON 解析為 Dart
對(duì)象。
Dart
應(yīng)用程序是單線程的,但 Dart
支持使用 async / await
模式在其他線程上運(yùn)行異步代碼以便不阻止 UI 線程。
import 'package:http/http.dart' as http; import 'dart:convert';_loadData() async { String dataURL = "https://api.github.com/orgs/raywenderlich/members"; http.Response response = await http.get(dataURL); setState(() { // json.decode 簡(jiǎn)寫形式 final members = jsonDecode(response.body); for (var member in members) { _members.add(Member(member["login"], member["avatar_url"])); } }); }
ListView.separated( itemCount: _members.length, itemBuilder: (BuildContext context, int index) => _buildRow(index), separatorBuilder: (BuildContext context, int index) => Divider(), )
原文鏈接:https://www.raywenderlich.com/116-getting-started-with-flutter