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 代碼脖律。
作為一個跨平臺框架酒朵,Flutter
最接近 React Native够傍,允許響應(yīng)式和聲明式的編程風(fēng)格疹吃。然而册倒,與 React Native 不同呆万,Flutter
不需要使用 Javascript 橋接商源,這可以改善應(yīng)用啟動時間和整體性能。Dart
通過使用Ahead-Of-Time
或 AOT
編譯來實(shí)現(xiàn)這一點(diǎn)桑嘶。
Dart
的另一個獨(dú)特方面是它也可以使用 Just-In-Time
或 JIT
編譯炊汹。使用 JIT 編譯通過熱重新加載(hot reload
)功能在開發(fā)期間刷新 UI 而無需全新構(gòu)建,從而改進(jìn)了開發(fā)工作流程逃顶。
Flutter
框架主要圍繞窗口小部件(widgets
)構(gòu)建讨便。在 Flutter
中,窗口小部件不僅用于應(yīng)用程序的視圖以政,還用于整個屏幕霸褒,甚至用于應(yīng)用程序本身。
除了跨平臺的 iOS 和 Android 開發(fā)之外盈蛮,學(xué)習(xí) Flutter
還將為您開發(fā)Fuchsia
平臺提供一個良好的開端废菱,該平臺目前是 Google 開發(fā)的實(shí)驗(yàn)性操作系統(tǒng)。許多人認(rèn)為它是未來 Android 的潛在替代品抖誉。
在本教程中殊轴,您將構(gòu)建一個 Flutter
應(yīng)用程序,該應(yīng)用程序查詢 GitHub API袒炉,并在可滾動列表中顯示團(tuán)隊(duì)成員信息:
窗口小部件
幾乎 Flutter
應(yīng)用程序的每個元素都是一個小部件旁理。窗口小部件被設(shè)計(jì)為不可變的,因?yàn)槭褂貌豢勺兇翱谛〔考兄诒3謶?yīng)用程序 UI 輕量級我磁。
您將使用兩種基本類型的小部件:
-
StatelessWidget
:無狀態(tài)孽文,僅依賴于自己的配置信息的小部件,例如圖像視圖中的靜態(tài)圖像夺艰。 -
StatefulWidget
:有狀態(tài)芋哭,需要維護(hù)動態(tài)信息的小部件,并通過與State
對象交互來實(shí)現(xiàn)郁副。
無狀態(tài)和有狀態(tài)窗口小部件都在 Flutter
應(yīng)用程序中重繪每一幀减牺,不同之處在于有狀態(tài)窗口小部件將其配置委托給 State
對象。
網(wǎng)絡(luò)請求
現(xiàn)在將使用框架中可用的包進(jìn)行 HTTP 網(wǎng)絡(luò)調(diào)用,并將生成的響應(yīng) JSON 解析為 Dart
對象烹植。
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 簡寫形式
final members = jsonDecode(response.body);
for (var member in members) {
_members.add(Member(member["login"], member["avatar_url"]));
}
});
}
ListView
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