Flutter中使用Dio庫封裝網絡請求服務工具類

在Flutter應用程序中,進行網絡請求是非常常見的任務。Dio是一個強大的、易于使用的Dart包,用于處理HTTP請求。本篇博客將介紹如何封裝Dio庫,以及如何在Flutter應用中進行網絡請求并取消請求。

什么是Dio?

Dio是一個基于Dart語言的強大的HTTP客戶端庫,用于與REST API進行通信。它提供了許多功能,包括異步請求、攔截器支持、取消請求、文件下載和上傳等。

封裝Dio網絡請求庫

為了更好地組織和管理網絡請求代碼,我們可以將Dio的實例和常見的HTTP請求操作封裝到一個類中。下面是一個簡單的示例:

import 'package:dio/dio.dart';class HttpManager {static Dio _dio;static Dio getInstance() {if (_dio == null) {_dio = Dio();// 配置 Dio 實例_dio.options.baseUrl = 'https://api.example.com/';_dio.interceptors.add(LogInterceptor());}return _dio;}// get 請求static Future<Response> get(String url, {Map<String, dynamic> params, CancelToken cancelToken}) async {return await _dio.get(url, queryParameters: params, cancelToken: cancelToken);}// post 請求static Future<Response> post(String url, {Map<String, dynamic> data, CancelToken cancelToken}) async {return await _dio.post(url, data: data, cancelToken: cancelToken);}// put 請求static Future<Response> put(String url, {Map<String, dynamic> data, CancelToken cancelToken}) async {return await _dio.put(url, data: data, cancelToken: cancelToken);}// delete 請求static Future<Response> delete(String url, {CancelToken cancelToken}) async {return await _dio.delete(url, cancelToken: cancelToken);}// 取消請求static void cancelRequests(CancelToken cancelToken) {cancelToken.cancel("請求已被取消");}
}

在上面的代碼中,我們創建了一個名為HttpManager的類,其中包含了一個getInstance方法用于獲取Dio的單例實例,以及封裝了常見的HTTP請求方法(GET、POST、PUT、DELETE)。

如何使用封裝的HttpManager類?

現在我們已經封裝了一個用于處理HTTP請求的類,我們可以在我們的Flutter應用程序中使用它。以下是一個簡單的示例:

import 'package:flutter/material.dart';
import 'package:dio/dio.dart';import 'http_manager.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(title: 'Flutter Dio Demo',home: HomePage(),);}
}class HomePage extends StatelessWidget {CancelToken _cancelToken = CancelToken();Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('Dio Demo'),),body: Center(child: ElevatedButton(onPressed: () {_fetchData();},child: Text('Fetch Data'),),),);}void _fetchData() async {try {Response response = await HttpManager.get('example_endpoint', cancelToken: _cancelToken);print(response.data);} catch (e) {print('Error: $e');}}void dispose() {// 頁面銷毀時取消請求HttpManager.cancelRequests(_cancelToken);super.dispose();}
}

在上面的示例中,我們在HomePage組件的dispose方法中調用了HttpManager.cancelRequests方法,以確保頁面銷毀時取消尚未完成的請求。

結論

在本篇博客中,我們學習了如何在Flutter應用中使用Dio庫進行網絡請求,并封裝了一個簡單的網絡請求庫。封裝網絡請求可以幫助我們更好地組織和管理代碼,使其更易于維護和擴展。希望這篇博客對你有所幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719123.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719123.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719123.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決android studio build Output中文亂碼

1.效果如下所示&#xff1a; 代碼運行報錯的時候&#xff0c;Build Output報的錯誤日志中中文部分出現亂碼&#xff0c;導致看不到到底報的什么錯。 2.解決辦法如下&#xff1a; 點擊Android studio開發工具欄的Help-Edit Custom VM Options....&#xff0c;Android studio會…

springboot微服務中集成了mybatis的服務引入了其他集成了mybatis的服務此時調用引入的服務中的某個mapper接口時報沒有注入

在啟動類上加引入的服務中的mapper路徑&#xff0c;在配置文件中將mapperLocations的值改為classpath*:mapper/.xml&#xff1a; MapperScan(basePackages {"com.ruoyi..mapper"}) 和 mapperLocations: classpath*:mapper/*.xml 是 MyBatis 在 Spring Boot 中配置 M…

AutoGPT實現原理

AutoGPT是一種利用GPT-4模型的自動化任務處理系統&#xff0c;其主要特點包括任務分配、多模型協作、互聯網訪問和文件讀寫能力以及上下文聯動記憶性。其核心思想是通過零樣本學習&#xff08;Zero Shot Learning&#xff09;讓GPT-4理解人類設定的角色和目標&#xff0c;并通過…

端口號被占用時的解決辦法

1、查看端口占用的進程號 netstat -ano |findstr 8080 2、 找到占用端口的程序 tasklist |findstr 2264 3、kill端口 taskkill /pid 2264 /f

文物預防性保護方案整體結構及軟件介紹

?文物預防性保護監測與調控系統整體是構架在商業級技術平臺上的多層綜合性應用,采用分布式部署的模塊化設計,以智能監測終端及高精傳感器為核心的感知系統。系統通過以下的層次結構協同工作完成全面的監控與調控功能&#xff1a; 1)系統依靠文物監測調控模型作為運行核心&…

基于springboot+vue的校園愛心捐贈互助管理系統(源碼+論文)

目錄 前言 一、功能設計 二、功能實現 三、庫表設計 四、論文 前言 隨著經濟水平和生活水平的提高在校大學生在校需要處理的物品也在不斷增加&#xff0c;同時校園內還存在很多貧困生&#xff0c;可以通過線上平臺實現資源的整合和二次利用&#xff0c;通過線上平臺求助信…

護眼燈有效果嗎怎么樣?推薦五款值得入手的護眼臺燈

隨著護眼臺燈被越來越多的人解鎖新的護眼攻略&#xff0c;它的產品熱度也越來越高&#xff0c;而且光線柔和&#xff0c;是一款非常不錯的照明用具。但是也有不少用戶反饋買到的護眼臺燈效果不好&#xff0c;有時候還會覺得刺眼&#xff0c;有些不合格的臺燈使用時間一久還會散…

動態IP代理技術在網絡爬蟲中的實際使用

目錄 一、動態IP代理技術概述 二、動態IP代理技術的優勢 三、動態IP代理技術的實際應用 四、注意事項 五、案例分析 六、結論 隨著互聯網的迅猛發展&#xff0c;網絡爬蟲成為了獲取信息、分析數據的重要工具。然而&#xff0c;在進行大規模爬取時&#xff0c;爬蟲常常面臨…

gin gorm學習筆記

代碼倉庫 https://gitee.com/zhupeng911/go-advanced.git https://gitee.com/zhupeng911/go-project.git 1. gin介紹 Gin 是使用純 Golang 語言實現的 HTTP Web框架&#xff0c;Gin接口設計簡潔&#xff0c;提供類似Martini的API&#xff0c;性能極高&#xff0c;現在被廣泛使用…

《C語言缺陷和陷阱》-筆記

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、pandas是什么&#xff1f;二、使用步驟 1.引入庫2.讀入數據總結 前言 在這一節中&#xff0c;我們將探索對記號的意義的普遍的誤解以及記號和組成它們的字…

指針習題二

使用函數指針實現轉移表 #include <stdio.h> int add(int a, int b) {return a b; } int sub(int a, int b) {return a - b; } int mul(int a, int b) {return a * b; } int div(int a, int b) {return a / b; } int main() {int x, y;int input 1;int ret 0;int(*p[…

學習python時一些筆記

1、winr 命令提示符的快捷鍵 輸入cmd進入終端 2、在終端運行桌面上的python文件 cd desktop(桌面) cd是進入該文件夾的意思。 cd .. 回到上一級 運行python時一定要找到文件的所在地 輸入python進入&#xff0c;exit()退出%s字符串占位符%d數字占位符%f浮點數占位符input輸…

Linux速覽(1)——基礎指令篇

在上一章對Linux有了一些基礎了解之后&#xff0c;本章我們來學習一下Linux系統下一些基本操作的常用的基礎指令。 目錄 1. ls 指令 2. pwd&&whoami命令 3. cd 指令 4. touch指令 5.mkdir指令&#xff08;重要&#xff09;&#xff1a; 6.rmdir指令 && …

vue面試題:如何保存頁面的當前的狀態?

如何保存頁面的當前的狀態&#xff1f; 既然是要保持頁面的狀態&#xff08;其實也就是組件的狀態&#xff09;&#xff0c;那么會出現以下兩種情況&#xff1a;組件會被卸載&#xff1a;&#xff08;1&#xff09;將狀態存儲在LocalStorage / SessionStorage優點&#xff1a;缺…

帶大家做一個,易上手的水煮牛肉

今天帶大家做川菜系中的 水煮牛肉 這個菜是比較費辣椒的 制作成本相對一般菜來說 會高一些 一塊牛肉 泡水劃冰 從超時買的干腐竹 切成小片 溫水浸泡五分鐘 泡軟它 然后撈出來 去干水分 牛肉切片 盡量切薄一點 三瓣左右蒜 一塊生姜 去皮切末 牛肉中下入 一個雞蛋 小半勺…

python實現視頻或音頻轉文本

python實現視頻或音頻轉文本 當然可以,以下是您的Python語音視頻轉文本代碼的描述: 內容概要: 這段Python代碼利用強大的語音識別庫,能夠自動將本地存儲的語音視頻文件轉換成文本。它通過分析音頻軌道中的語音數據,識別并轉錄為可編輯和可搜索的文本格式。 適用人群: …

裝修必看干貨|入戶玄關設計進門就是客廳應該怎么設計?福州中宅裝飾,福州裝修

入戶玄關設計在進門就是客廳的情況下&#xff0c;想要擁有單獨的玄關空間&#xff0c;以下是五點設計建議&#xff1a; ①隔斷屏風 使用隔斷屏風是傳統而常見的一種空間分割方法。可以選用木制、金屬或玻璃等材質的屏風&#xff0c;根據需要進行靈活搭配和定制。 屏風的款式和…

Python爬蟲——Urllib庫-1

這幾天都在為了藍橋杯做準備&#xff0c;一直在刷算法題&#xff0c;確實刷算法題的過程是及其的枯燥且枯燥的。于是我還是決定給自己找點成就感出來&#xff0c;那么Python的爬蟲就這樣開始學習了。 注&#xff1a;文章源于觀看尚硅谷爬蟲視頻后筆記 目錄 Urllib庫 基本使…

【C++】字符串 1478 - 出現次數最多的小寫字母 1475 - 字符串對比 1098 - 判斷是否構成回文 1102 - 字符串中的空格移位

文章目錄 問題一&#xff1a;1478 - 出現次數最多的小寫字母問題二&#xff1a;1475 - 字符串對比問題三&#xff1a;1098 - 判斷是否構成回文問題四&#xff1a;1102 - 字符串中的空格移位五、感謝 問題一&#xff1a;1478 - 出現次數最多的小寫字母 類型&#xff1a;字符串 …

oracle基礎體系

一、 Oracle數據庫服務器 數據庫在各個行業都會有使用到&#xff1b;其實&#xff0c;我們平時無論是在與客戶溝通或者交流中&#xff0c;所說的Oracle數據庫是指Oracle數據庫服務器&#xff08;Oracle Server&#xff09;&#xff0c;它由Oracle實例&#xff08;Oracle Instan…