日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )

發布時間:2025/6/17 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、引入 http 插件
  • 二、HTTP 請求測試數據
  • 三、使用 http 插件進行 Get 請求
  • 四、使用 http 插件進行 Post 請求
  • 五、將 Get / Post 請求結果 Future





一、引入 http 插件



到 https://pub.dev/packages 搜索 http 組件 https://pub.dev/packages/http ;

安裝 http 插件 : 參考 https://pub.dev/packages/http/install 安裝 ;

① 配置 Flutter 插件 : 在 pubspec.yaml 配置文件中配置 Flutter 插件 :

dependencies:http: ^0.13.3

② 獲取 Flutter 插件 : 點擊右上角的 " Pub get " 按鈕 , 獲取插件 , 此時會自動從 https://pub.dev/packages 平臺下載該插件并配置到 Flutter 項目中 ;

③ 在項目中引入 : 在需要使用 Banner 輪播插件 flutter_swiper 的組件代碼中導入該 dart 包 ;

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



二、HTTP 請求測試數據



在網上找了幾個 json 數據鏈接 :

  • https://www.devio.org/io/flutter_app/json/test_common_model.json
{"icon": "https://www.devio.org/io/flutter_app/img/ln_food.png","title": "美食林","url": "https://m.ctrip.com/webapp/you/foods/address.html?new=1&ishideheader=true","statusBarColor": "19A0F0","hideAppBar": true }
  • https://jsonplaceholder.typicode.com/posts/1
{"userId": 1,"id": 1,"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit","body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto" }
  • https://jsonplaceholder.typicode.com/users/1/posts
  • https://jsonplaceholder.typicode.com/users/1/todos
  • https://jsonplaceholder.typicode.com/users/1/albums
  • https://jsonplaceholder.typicode.com/albums/1/photos
  • https://jsonplaceholder.typicode.com/posts/1/comments




三、使用 http 插件進行 Get 請求



引入 http 插件后 ,

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

調用 http.get 方法 , 發送 Get 請求 , 會返回一個包括 http.Response 泛型的 Future , 返回值類型為 Future<http.Response> ;

/// 調用 Http Get 方法 , 獲取服務器的 json 數據Future<CommonModel> httpGet() async {//var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');var url = Uri.parse('https://www.devio.org/io/flutter_app/json/test_common_model.json');final response = await http.get(url);Map<String, dynamic> jsonMap = json.decode(response.body);return CommonModel.fromJson(jsonMap);}

Future 是 異步操作 相關的核心 Dart 類 , 用于表示 將來 某個時間 可能出現的結果 ;

http.Get 返回值是 Future<http.Response> , 其中的 http.Response 泛型中 , 封裝了 HTTP Request 請求對應的 Response 響應數據 , 也就是服務器返回給請求端的數據 ;





四、使用 http 插件進行 Post 請求



引入 http 插件后 ,

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

調用 http.get 方法 , 發送 Get 請求 , 會返回一個包括 http.Response 泛型的 Future , 返回值類型為 Future<http.Response> ;

/// 調用 Http Post 方法 , 獲取服務器的 json 數據Future<CommonModel> httpPost() async {//var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');var url = Uri.parse('https://www.devio.org/io/flutter_app/json/test_common_model.json');final response = await http.post(url);Map<String, dynamic> jsonMap = json.decode(response.body);return CommonModel.fromJson(jsonMap);}

Future 是 異步操作 相關的核心 Dart 類 , 用于表示 將來 某個時間 可能出現的結果 ;

http.Get 返回值是 Future<http.Response> , 其中的 http.Response 泛型中 , 封裝了 HTTP Request 請求對應的 Response 響應數據 , 也就是服務器返回給請求端的數據 ;





五、將 Get / Post 請求結果 Future<http.Response> 轉為 Dart 對象



將 Get / Post 請求結果 Future<http.Response> 轉為 Dart 對象 :

創建 Model 類 , 用于存儲獲取的結果 , 參考 https://jsonplaceholder.typicode.com/posts/1 中的 json 數據創建 Dart 類 ;

CommonModel 類包括一個工廠方法 , 通過 Map<String, dynamic> json 類型 , 構造該類 ;

class CommonModel {final String icon;final String title;final String url;final String statusBarColor;final bool hideAppBar;CommonModel({this.icon, this.title, this.url, this.statusBarColor, this.hideAppBar});factory CommonModel.fromJson(Map<String, dynamic> json) {return CommonModel(icon: json['icon'],title: json['title'],url: json['url'],statusBarColor: json['statusBarColor'],hideAppBar: json['hideAppBar'],);} }

將 http.Response 轉換為 CommonModel 對象 : 需要使用 dart:convert 包 , 將 json 字符串轉為 Map<String, dynamic> 類型數據 ;

/// json 序列化 , 反序列化 包 import 'dart:convert';

然后將 Map<String, dynamic> 類型對象傳入 CommonModel 類工廠方法 ;





六、Future 異步調用



點擊按鈕后 , 調用 HTTP GET 方法 , 由于不知道什么時候返回 , 該方法肯定是一個異步方法 ;

返回值是 Future 類型的 ;

/// 調用 Http Get 方法 , 獲取服務器的 json 數據Future<CommonModel> httpGet() async {//var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');var url = Uri.parse('https://www.devio.org/io/flutter_app/json/test_common_model.json');final response = await http.get(url);Map<String, dynamic> jsonMap = json.decode(response.body);return CommonModel.fromJson(jsonMap);}

下面是按鈕設置的點擊方法 :

InkWell(child: Text("點擊按鈕進行 HTTP GET 請求"),onTap: (){/// httpGet() 方法返回 Future 類型返回值/// 調用 Future 的 then 方法 , 就會在網絡請求成功后 , 執行該方法/// 也就是網絡請求成功后 , 會自動調用該 then 方法/// 傳入 Future 的泛型 CommonModel 對象作為參數httpGet().then((CommonModel value) {// httpGet 異步返回時 , 回調該方法setState(() {httpGetResult ="HTTP GET 請求結果 :\nuserId : ${value.icon}\n" +"title : ${value.title}\nurl : ${value.url}";});});},),

在按鈕點擊的時候 , 調用 httpGet() 方法 , 返回值是一個 Future 對象 ;

調用 Future 的 then 方法 , 就會在網絡請求成功后 , 執行該方法 , 也就是網絡請求成功后 , 會自動調用該 then 方法 , 傳入 Future 的泛型 CommonModel 對象作為參數 ;

最后獲取到返回值后 , 將返回值設置到 httpGetResult 成員中 ;

調用 setState 方法 , 更新 UI ;





七、完整代碼



import 'package:flutter/material.dart'; import 'package:http/http.dart' as http;/// json 序列化 , 反序列化 包 import 'dart:convert';void main() {runApp(MyApp()); }class MyApp extends StatefulWidget {const MyApp({Key? key}) : super(key: key);@override_MyAppState createState() => _MyAppState(); }class _MyAppState extends State<MyApp> {/// HTTP GET 返回值String httpGetResult = "";/// 調用 Http Get 方法 , 獲取服務器的 json 數據Future<CommonModel> httpGet() async {//var url = Uri.parse('https://jsonplaceholder.typicode.com/posts/1');var url = Uri.parse('https://www.devio.org/io/flutter_app/json/test_common_model.json');final response = await http.get(url);Map<String, dynamic> jsonMap = json.decode(response.body);return CommonModel.fromJson(jsonMap);}@overrideWidget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text("HTTP Get 請求"),),// 線性布局 列body: Column(children: [// 按鈕InkWell(child: Text("點擊按鈕進行 HTTP GET 請求"),onTap: (){/// httpGet() 方法返回 Future 類型返回值/// 調用 Future 的 then 方法 , 就會在網絡請求成功后 , 執行該方法/// 也就是網絡請求成功后 , 會自動調用該 then 方法/// 傳入 Future 的泛型 CommonModel 對象作為參數httpGet().then((CommonModel value) {// httpGet 異步返回時 , 回調該方法setState(() {httpGetResult ="HTTP GET 請求結果 :\nuserId : ${value.icon}\n" +"title : ${value.title}\nurl : ${value.url}";});});},),// 在該 Text 組件顯示 HTTP GET 請求結果Text(httpGetResult),],),),);} }class CommonModel {final String? icon;final String? title;final String? url;final String? statusBarColor;final bool? hideAppBar;CommonModel({this.icon, this.title, this.url, this.statusBarColor, this.hideAppBar});factory CommonModel.fromJson(Map<String, dynamic> json) {return CommonModel(icon: json['icon'],title: json['title'],url: json['url'],statusBarColor: json['statusBarColor'],hideAppBar: json['hideAppBar'],);} }

運行結果 :





八、相關資源



參考資料 :

  • Flutter 官網 : https://flutter.dev/
  • Flutter 插件下載地址 : https://pub.dev/packages
  • Flutter 開發文檔 : https://flutter.cn/docs ( 強烈推薦 )
  • 官方 GitHub 地址 : https://github.com/flutter
  • Flutter 中文社區 : https://flutter.cn/
  • Flutter 實用教程 : https://flutter.cn/docs/cookbook
  • Flutter CodeLab : https://codelabs.flutter-io.cn/
  • Dart 中文文檔 : https://dart.cn/
  • Dart 開發者官網 : https://api.dart.dev/
  • Flutter 中文網 : https://flutterchina.club/ , http://flutter.axuer.com/docs/
  • Flutter 相關問題 : https://flutterchina.club/faq/ ( 入門階段推薦看一遍 )
  • GitHub 上的 Flutter 開源示例 : https://download.csdn.net/download/han1202012/15989510
  • Flutter 實戰電子書 : https://book.flutterchina.club/chapter1/

重要的專題 :

  • Flutter 動畫參考文檔 : https://flutterchina.club/animations/

博客源碼下載 :

  • GitHub 地址 : https://github.com/han1202012/flutter_http( 隨博客進度一直更新 , 有可能沒有本博客的源碼 )

  • 博客源碼快照 : https://download.csdn.net/download/han1202012/21528472 ( 本篇博客的源碼快照 , 可以找到本博客的源碼 )

總結

以上是生活随笔為你收集整理的【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。