最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

flutter中的網(wǎng)絡(luò)請求數(shù)據(jù)獲取詳解

 更新時(shí)間:2023年01月11日 10:11:02   作者:前端那些年  
這篇文章主要為大家介紹了flutter中的網(wǎng)絡(luò)請求數(shù)據(jù)獲取示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

跨平臺(tái)的http請求

http包提供了最簡單的發(fā)起請求的方式,并且這個(gè)包在WEB,ANDROID,IOS上都得到了很好的支持。

需要注意的是,在某些特定的平臺(tái)上需要設(shè)置一些額外的內(nèi)容,比如:

ANDROID上必須在manifest(AndroidManifest.xml)文件中進(jìn)行聲明。

<manifest xmlns:android...>
 ...
 <uses-permission android:name="android.permission.INTERNET" />
 <application ...
</manifest>

macOS上必須在.entitlements進(jìn)行配置。

<key>com.apple.security.network.client</key>
<true/>

請求數(shù)據(jù)

從網(wǎng)絡(luò)上請求數(shù)據(jù)大致分為四步:

  • 添加http
  • 通過http包發(fā)起請求
  • 將收到的響應(yīng)數(shù)據(jù)轉(zhuǎn)為客戶端可用的數(shù)據(jù)
  • 展示用戶界面

添加http包

我們只需要在pub.dev文件中添加配置即可:

dependencies:
  http: <latest_version>

然后在代碼中導(dǎo)入http包:

import 'package:http/http.dart' as http;

另外,在安卓中我們需要添加網(wǎng)絡(luò)權(quán)限:

<!-- Required to fetch data from the internet. -->
<uses-permission android:name="android.permission.INTERNET" />

發(fā)起請求

發(fā)起請求很簡單:

Future<http.Response> fetchAlbum() {
  return http.get(Uri.parse('https://jsonplaceholder.typicode.com/albums/1'));
}

http.get()方法返回一個(gè)Future類的數(shù)據(jù),這個(gè)數(shù)據(jù)包含了收到的響應(yīng)數(shù)據(jù)。 Future是用于處理異步操作的核心Dart類。Future對象表示將來某個(gè)時(shí)間可能出現(xiàn)的值或錯(cuò)誤。 http.Response類包含從成功的http調(diào)用接收的數(shù)據(jù)。

將響應(yīng)轉(zhuǎn)為常用對象

雖然發(fā)出網(wǎng)絡(luò)請求很容易,但使用原始的Future<http.Response>并不是很方便。為了讓我們的開發(fā)更簡單,我們可以將http.Response轉(zhuǎn)換為Dart對象。

首先,創(chuàng)建一個(gè)包含網(wǎng)絡(luò)請求數(shù)據(jù)的Album類。它包括一個(gè)工廠構(gòu)造函數(shù),用于從JSON創(chuàng)建Album。

class Album {
  final int userId;
  final int id;
  final String title;
  const Album({
    required this.userId,
    required this.id,
    required this.title,
  });
  factory Album.fromJson(Map<String, dynamic> json) {
    return Album(
      userId: json['userId'],
      id: json['id'],
      title: json['title'],
    );
  }
}

然后,我們使用以下步驟更新fetchAlbum()函數(shù)以返回Future<Album>

  • 使用dart:Convert包將響應(yīng)體轉(zhuǎn)換為JSON映射。
  • 如果服務(wù)器確實(shí)返回了狀態(tài)代碼為200的OK響應(yīng),則使用fromJson()工廠方法將JSON映射轉(zhuǎn)換為Album。
  • 如果服務(wù)器沒有返回狀態(tài)代碼為200的OK響應(yīng),則拋出異常。(即使在“404 Not Found”服務(wù)器響應(yīng)的情況下,也會(huì)拋出異常。不要返回null。這在檢查快照中的數(shù)據(jù)時(shí)很重要,如下所示。)
Future<Album> fetchAlbum() async {
  final response = await http
      .get(Uri.parse('https://jsonplaceholder.typicode.com/albums/1'));
  if (response.statusCode == 200) {
    // If the server did return a 200 OK response,
    // then parse the JSON.
    return Album.fromJson(jsonDecode(response.body));
  } else {
    // If the server did not return a 200 OK response,
    // then throw an exception.
    throw Exception('Failed to load album');
  }
}

獲取數(shù)據(jù)

我們可以在initState()didChangeDependencies()方法中調(diào)用fetchAlbum()方法。

initState()方法只調(diào)用一次,然后再也不會(huì)調(diào)用。如果我們想選擇重新加載API以響應(yīng)InheritedWidget的更改,我們可以將調(diào)用放入didChangeDependencies()方法中。

class _MyAppState extends State<MyApp> {
  late Future<Album> futureAlbum;
  @override
  void initState() {
    super.initState();
    futureAlbum = fetchAlbum();
  }
  // ···
}

展示數(shù)據(jù)

要在屏幕上顯示數(shù)據(jù),我們可以使用FutureBuilder組件。FutureBuilder組件隨Flutter一起提供,可以輕松處理異步數(shù)據(jù)源。

我們需要提供兩個(gè)參數(shù):

  • 具體的Future
  • builder方法,用來告訴系統(tǒng)渲染什么內(nèi)容,根據(jù)狀態(tài)可以選擇加載中等等。
FutureBuilder<Album>(
  future: futureAlbum,
  builder: (context, snapshot) {
    if (snapshot.hasData) {
      return Text(snapshot.data!.title);
    } else if (snapshot.hasError) {
      return Text('${snapshot.error}');
    }
    // By default, show a loading spinner.
    return const CircularProgressIndicator();
  },
)

為什么要在initstate中獲取數(shù)據(jù)?

雖然在build()中調(diào)用很方便,但不建議將API調(diào)用放在build()方法中。

Flutter每次需要更改視圖中的任何內(nèi)容時(shí)都會(huì)調(diào)用build()方法,這種情況經(jīng)常發(fā)生。如果將fetchAlbum()方法放置在build()中,則會(huì)在每次重建時(shí)重復(fù)調(diào)用,導(dǎo)致應(yīng)用程序速度減慢。

以上就是flutter中的網(wǎng)絡(luò)請求數(shù)據(jù)獲取詳解的詳細(xì)內(nèi)容,更多關(guān)于flutter網(wǎng)絡(luò)請求數(shù)據(jù)獲取的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android?Studio調(diào)試Gradle插件詳情

    Android?Studio調(diào)試Gradle插件詳情

    這篇文章主要介紹了Android?Studio調(diào)試Gradle插件詳情,文章圍繞主題展開詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Android設(shè)計(jì)模式之單例模式解析

    Android設(shè)計(jì)模式之單例模式解析

    這篇文章主要為大家詳細(xì)介紹了Android設(shè)計(jì)模式之單例模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android自定義View之繪制圓形頭像功能

    Android自定義View之繪制圓形頭像功能

    這篇文章主要介紹了Android自定義View之繪制圓形頭像功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Android開發(fā)中判斷手機(jī)是否安裝了QQ或者微信

    Android開發(fā)中判斷手機(jī)是否安裝了QQ或者微信

    這篇文章主要介紹了Android開發(fā)中判斷手機(jī)是否安裝了QQ或者微信的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • android仿音悅臺(tái)頁面交互效果實(shí)例代碼

    android仿音悅臺(tái)頁面交互效果實(shí)例代碼

    這篇文章主要介紹了android 仿音悅臺(tái)頁面播放效果實(shí)例代碼,新版的音悅臺(tái) APP 播放頁面交互非常有意思,可以把播放器往下拖動(dòng),然后在底部懸浮一個(gè)小框,還可以左右拖動(dòng)。
    2017-01-01
  • Android變形(Transform)之Matrix用法

    Android變形(Transform)之Matrix用法

    Android的2D變形(包括縮放,扭曲,平移,旋轉(zhuǎn)等)可以通過Matrix來實(shí)現(xiàn),本文研究了一下;接下來就將我這倆天研究的東西和大家分享下,先來看看Matrix的用法感興趣的你可不要錯(cuò)過了哈
    2013-02-02
  • Flutter學(xué)習(xí)教程之Route跳轉(zhuǎn)以及數(shù)據(jù)傳遞

    Flutter學(xué)習(xí)教程之Route跳轉(zhuǎn)以及數(shù)據(jù)傳遞

    這篇文章主要給大家介紹了關(guān)于Flutter學(xué)習(xí)教程之Route跳轉(zhuǎn)以及數(shù)據(jù)傳遞的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • AndroidStudio中AVD虛擬機(jī)設(shè)備空間不足調(diào)試過程出現(xiàn)的黑屏問題及解決方案

    AndroidStudio中AVD虛擬機(jī)設(shè)備空間不足調(diào)試過程出現(xiàn)的黑屏問題及解決方案

    這篇文章主要介紹了解決AndroidStudio中AVD虛擬機(jī)設(shè)備空間不足調(diào)試過程出現(xiàn)的黑屏問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Android 動(dòng)態(tài)改變布局實(shí)例詳解

    Android 動(dòng)態(tài)改變布局實(shí)例詳解

    這篇文章主要介紹了Android 動(dòng)態(tài)改變布局實(shí)例詳解的相關(guān)資料,這里舉例說明如何實(shí)現(xiàn)動(dòng)態(tài)改變布局的例子,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下
    2016-11-11
  • Android中使用itemdecoration實(shí)現(xiàn)時(shí)間線效果

    Android中使用itemdecoration實(shí)現(xiàn)時(shí)間線效果

    這篇文章主要介紹了Android中使用itemdecoration實(shí)現(xiàn)時(shí)間線效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02

最新評論

贵德县| 宁乡县| 英超| 郧西县| 岗巴县| 江源县| 老河口市| 乌恰县| 邯郸县| 鸡东县| 龙泉市| 定南县| 金溪县| 宁都县| 新河县| 遵化市| 航空| 固阳县| 阜城县| 海城市| 怀柔区| 柞水县| 芒康县| 江油市| 禹城市| 当涂县| 隆尧县| 重庆市| 万安县| 井陉县| 桐柏县| 乌海市| 双牌县| 辽宁省| 灵台县| 南澳县| 奇台县| 新邵县| 朝阳市| 贵溪市| 汉阴县|