首页 > 其他分享 >flutter 监听网络HTTP数据流处理

flutter 监听网络HTTP数据流处理

时间:2024-06-01 10:21:54浏览次数:25  
标签:dio HTTP utf8 StreamTransformer decoder 数据流 data flutter

flutter 网络用于HTTP的交互中, 有Http和Dio两种方式,本次侧重介绍dio的简单使用

1. flutter安装dio插件

https://pub-web.flutter-io.cn/ 中搜索dio插件使用,详细安装如下:

2. 使用

(1) 创建CancelToken对象, 可 然后采用异步的方式进行数据post(本次交互使用post数据的方式), 核心代码如下

// 自定义转换器,将 Uint8List 转换为 List<int>   【关键, 取代utf8.decoder】 // 在 Dart 中,utf8.decoder 的确是一个 StreamTransformer,但它的类型是 StreamTransformer<List<int>, String>,而不是 StreamTransformer<Uint8List, String>。因此,直接使用 utf8.decoder 会导致类型不匹配的错误。 // 要解决这个问题,可以使用 StreamTransformer<Uint8List, String> 进行自定义转换,或者使用现有的转换器进行类型转换。 var transformer = StreamTransformer<Uint8List, String>.fromHandlers(   handleData: (Uint8List data, EventSink<String> sink) {     sink.add(utf8.decode(data));   }, );
 

  // 重新请求问答 Future<void> sendRegenerateQuest() async { cancelToken = CancelToken(); try { final response = await dio.value.post( 'http://192.168.31.115:8777/api/local_doc_qa/change_generate', data: { 'user_id':'zzp', 'generate': false }, options: Options(responseType: ResponseType.stream), // 数据接收模式,采用流模式 cancelToken: cancelToken ); // 流处理 response.data!.stream.transform(transformer).listen((String data) {
         // 流开始接收处理 print('Revc RegenerateQuest Msg - data: $data'); }, onDone: () {
        // 接收完成处理 print('RegenerateQuest······Done'); }, one rror: (error) {
        // 异常报错处理 print('RegenerateQuest·······>onError'); }); } on DioException catch (error) {
       // 网络异常处理 print('RegenerateQuest······POST Error: $error'); }finally {
       //发送完成
          }
    }

 上面就是简单的dio的处理的一个流程,其中transformer为

自定义转换器,将 Uint8List 转换为 List<int>   【关键, 取代utf8.decoder】 在 Dart 中,utf8.decoder 的确是一个 StreamTransformer,但它的类型是 StreamTransformer<List<int>, String>,而不是 StreamTransformer<Uint8List, String>。因此,直接使用 utf8.decoder 会导致类型不匹配的错误。 要解决这个问题,可以使用 StreamTransformer<Uint8List, String> 进行自定义转换,或者使用现有的转换器进行类型转换。

标签:dio,HTTP,utf8,StreamTransformer,decoder,数据流,data,flutter
From: https://www.cnblogs.com/weijian168/p/18225610

相关文章

  • JAVAEE之文件IO_数据流概念,字节流:InputStream、OutputStream,字符流:reader、writer,及实
    什么是数据流 顾名思义,I表示input,O表示output,也就是输入输出流,主要是在程序与文件之间,用于传输数据的通道。既然要传输数据,那么我们需要理解文件和程序之间哪种方向的传输是输入流,哪种传输作为输出流?我们可以举一个例子,如下图所示: IO流是JavaIO中的核心概念。流......
  • 在我的 Flutter 应用程序中尝试通过 sso 登录时,我看到了一个黑屏
    我正在调用android上flutter_appAuth软件包的authorize方法。下面是该方法的外观:finalresult=awaitFlutterAppAuth(.authorize())finalresult=awaitFlutterAppAuth().authorize(授权请求SSOConstants.clientId、SSOConstants.redirec......
  • Flutter 中的 Opacity 小部件:全面指南
    Flutter中的Opacity小部件:全面指南在Flutter中,动画和视觉效果是提升用户体验的重要手段。Opacity小部件允许你改变子组件的透明度,从而实现淡入、淡出或其它透明度相关的动画效果。本文将提供Opacity的全面指南,帮助你了解如何使用这个小部件来增强你的Flutter应用的视觉......
  • Flutter 中的 LimitedBox 小部件:全面指南
    Flutter中的LimitedBox小部件:全面指南Flutter是一个功能强大的UI框架,它提供了大量的小部件来帮助开发者构建美观且响应式的用户界面。在Flutter的布局小部件中,LimitedBox是一个不太常见但非常有用的组件,它可以用来限制其子组件的最大尺寸。本文将详细介绍Limited......
  • 小白也能听懂的Flutter
    import'package:flutter/material.dart';voidmain(){runApp(MyApp());}classMyAppextendsStatelessWidget{@overrideWidgetbuild(BuildContextcontext){returnconstMaterialApp(home:Scaffold(appBar:null,......
  • Web基础与HTTP协议
    一、HTTP协议1.http相关概念互联网:是网络的网络,是所有类型网络的母集因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。万维网:WWW(worldwideweb)万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信......
  • telnet HTTP测试步骤、遇到的问题和解决方法(cmd窗口)
    **本篇文章食用的简单说明**本篇文章为使用cmd窗口进行telnetHTTP测试步骤以及遇到的问题和解决方法。其中在解决方法中有文字版和图片版,文字版图片版自己选择一种查看就好(有标注)。目录点击想要查看的部分即可跳转到对应位置。目录**本篇文章食用的简单说明**---------......
  • C# HTTP请求 get post
    C#HTTP请求getpostpublicclassHttpRequestHelper{publicstaticboolCheckValidationResult(objectsender,X509Certificatecertificate,X509Chainchain,SslPolicyErrorserrors){returntrue;}///&l......
  • Fiddler设置抓取https包
    fiddler下载地址:Fiddler4(telerik.com)安装成功: 配置可抓取HTTPS:导入证书后即可抓取:  ......
  • HLS、HTTP+FLV、DASH
    HLS、HTTP+FLV和DASH是三种常见的流媒体传输协议,它们在技术实现、使用场景和优缺点方面都有显著的区别。以下是对它们的关系和区别的详细解释,以及当前最流行的流媒体传输协议的讨论。HLS(HTTPLiveStreaming)开发者:由Apple开发。工作原理:将视频切片成小的TS文件......