首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Flutter之网络请求封装

    应用开发中,网络请求几乎是必不可少的功能,本文将介绍如何通过对 dio 进行二次封装一步一步实现网络请求封装,以便于在项目中方便快捷的使用网络请求。...数据解析 返回数据解析 在移动开发中,开发者习惯将返回数据解析成实体类使用,接下来将介绍如何结合 dio 完成数据解析的封装。...() { return jsonEncode(this); } } 因为返回的数据中 data 的数据类型是不定的,所以改造 request 支持泛型,然后在 request 方法中统一进行数据解析...,在 catch 中进行统一异常处理,当外部未处理异常时则在 handleException 中进行统一处理,如 401 则跳转登录页,其他错误统一弹出错误提示。...开发过程中常用的网络请求为 get 和 post,为了方便调用,在 RequestClient 中添加 get 和 post 方法,如下: Future<T?

    8K11

    Flutter 网络请求之Dio库

    :Flutter 状态管理之GetX库,创建了一个可观察的变量,然后写了一个请求网络的方法,使用了Dio库的Get请求,请求一个API地址,你可以将这个地址在浏览器中测试,确保它可以返回值。...三、封装   在对Dio库进行进行使用的时候,我们通常会进行封装而不是直接使用。...import 'interceptor/custom_interceptor.dart'; 首先导包,然后在_internal()方法中增加如下代码: //添加日志拦截器 dio.interceptors.add...④ 封装请求   接着我们封装请求方法,针对网络请求有get、post、put等等方式,在dio库中,最终实际上调用的都是request请求,在net包下新建一个method包,该包下新建一个bese_method.dart...对于dio的封装就到这里了,肯定不是完善了,因为还有很多东西没有考虑到,我们可以根据实际中的需要再去添加,我这里就不赘述了,下面我们结合GetX去使用。

    1K00

    【Dart 专题】Map 集合小结~

    Map 在日常生活中最常见的集合方式,而 Dart 中的 Map 相较于 Android 中的 Map 略有不同,使用会更加灵活;和尚今天尽可能系统的学习一下; Map Map 是一个 key-value...Map.castFrom() Map.castFrom() 创建一个类型与其他 Map key-value 类型一致的 Map; MapString, dynamic> map = {'name':..., dynamic, String, dynamic>(map); print('Map -> $map -> $map10 -> $map11'); // 异常,类型不匹配 Map map12 =...key-value,若不存在对应的 key-value 则无任何操作;removeWhere 用于通过条件进行批量删除,和尚尝试把 Map value 不是 String 类型的删除;clear 是通用的清空...('Map -> $map -> $map03'); // 异常 type '_InternalLinkedHashMapdynamic, dynamic>' is not a subtype of

    2K41

    Flutter基础之Dart语言入门:Future异步使用

    Future的所有API的返回值仍然是一个Future对象,所以可以很方便的进行链式调用。...03 — Stream Stream也是用于接收异步事件数据,和Future不同的是,它可以接收多个异步操作的结果(成功或失败),也就是说,在执行异步任务时,可以通过多次触发成功或失败事件来传递结果数据或错误异常...同样项目中引入改插件,直接在pubspec.yaml文件中添加依赖 在使用的地方引入: 下面是项目中封装的请求通用类BaseRepository /// 网络请求 class BaseRepository...{ Future get(String url, {MapString, dynamic> queryParams}) async { final nativeD = await...method, {String url, MapString, dynamic> queryParams, Map header}) { debugPrint(

    1.9K20

    Dart - 抽象类的实例化

    list = List(); final dict = MapString, dynamic>(); 我们来看一下 Map 的源码: ?...Map源码 Map 的确是抽象类,不过此时我们也注意到了,在 Map 这个抽象类中,定义了一个工厂构造方法,这就是使抽象类可实例化的关键所在,因为工厂方法可以返回一个实例对象,但这个对象的类型不一定就是当前类..._INITIAL_INDEX_SIZE); } 它们都是一个普通的类,没有工厂构造方法,也就是说 Map 中的 external factory Map(); 最终返回的最终实例类型为 _InternalLinkedHashMap...很遗憾不行,因为在抽象类中定义了工厂构造方法后,在子类中不能定义除工厂构造方法外的其它构造方法了,会报错~ 总结一下: 抽象类无法直接创建实例,但是可以通过实现工厂构造方法来间接实现抽象类的实例化!...这样做的好处就是: 复用同一套API的声明 可以针对不同的平台做不同的实现 而 针对不同的平台做不同的实现 这一点在下方给出的源码中可以看出 // flutter/bin/cache/dart-sdk

    3.2K41

    让工具更好用,我把混元塞进了笔记工具里

    我把“笔记软件”当成日常的工作台:左边写写画画,右边开一个 AI 侧栏。侧栏不是用来“炫技”的,它就是四个朴素的入口:图像生成、拍照解题、3D生成、对话。...二、图像生成:不是“海报一键出”,而是“素材长在该长的位置” 我的工作习惯是先有一个粗糙的页面草图,再把图像当“素材”往上叠。...我用 Riverpod 的 StateNotifier 做状态,Dio 走网络,示意代码如下(简化了异常与重试): // lib/features/ai/services/image_service.dart...MapString, dynamic>?...它更多是一组贴心的动作:在我需要素材的时候给我一张图,在我拿着纸面题目犹豫的时候给我一个拆解,在我只是想确认某段文字该不该删的时候给我一个简短的建议,在我考虑是否需要 3D 示意的时候先帮我把卡片放好。

    8400

    Flutter 网络请求封装之Dio(Cookie管理、添加拦截器、下载文件、异常处理、取消请求等)

    文章目录 Dio相关 封装开始 get请求 post请求 post Form表单 异常处理 Cookie管理 添加拦截器 下载文件 取消请求 Https证书校验 调用示例 完整代码 之所以封装,千言万语汇成一句话...Dio相关 dio是一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等… 添加依赖,注意3.0....,细心的同学可能会发现,baseUrl的参数是固定的,在实际开发中请求两个及以上的域名地址是有很大可能的,所以我们怎么动态更换baseUrl呢?...= await dio.post("/info", data: formData); 创建FormData,然后代替原来的data即可 异常处理 出现异常的时候,当然是知道的越清晰越仔细越好,也越容易处理...,证书格式是PEM格式,我们将证书的内容保存在本地字符串中,那么我们的校验逻辑如下: String PEM="XXXXX"; // certificate content (dio.httpClientAdapter

    9.4K21

    异步并发×编译性能:Dart爬虫的实战突围

    该爬虫抓取图书网站数据,展示Dart在I/O密集型任务中的性能优势:import 'dart:async';import 'dart:convert';import 'dart:io';import '...; Book({required this.title, required this.price, required this.rating}); MapString, dynamic>...API数据聚合:定期抓取多个API数据源2、电商价格监控:并发监控数百商品页面3、内容聚合应用:Flutter应用内嵌的爬虫模块4、中等规模数据采集:每日10万级以下数据量5、需要编译部署的任务:导出独立二进制文件到服务器运行效果...综上所述,Dart在爬虫领域展现出三大核心优势:异步并发模型可轻松处理I/O密集型任务,编译执行特性提供远超脚本语言的解析性能,类型系统则保障了数据处理可靠性。...开发者可基于dio+html+Isolate的技术栈,构建可处理日均十万级请求的高性能采集方案,在效率与工程化之间取得理想平衡。

    13010
    领券