标签: dio

无法在 Flutter 中为 dio 中的 post 方法添加标题

我正在使用dio: ^3.0.4。任何人请帮我找到添加标题的解决方案。这是我的代码:

FormData formData = 
    new FormData.fromMap({"files": await MultipartFile.fromFile(filePath.path, filename: 'photo')
          });
Run Code Online (Sandbox Code Playgroud)
  Response response = await dio.post("***********",
    data: formData,
    onSendProgress: (int sent, int total) {
      print("$sent $total");
    },
    options: Options(
      headers: {
        "authorization": "*************"
      },
      followRedirects: false,
      validateStatus: (status) {
        return status <= 500;
      }
    ),
  );
Run Code Online (Sandbox Code Playgroud)

当我打印标题时。

打印(响应。标题);

结果:

颤振:内容类型:文本/html;charset=UTF-8 连接:关闭缓存控制:无缓存,私有传输编码:分块日期:2019 年 11 月 7 日星期四 14:29:02 GMT 服务器:Apache/2.4.18

flutter dio

14
推荐指数
3
解决办法
3万
查看次数

Flutter Dio:如何上传图片?

我正在尝试邮递员。它有效

邮差 我想使用 Package DIO Package将一些图像上传到 rest-api ,我是这个包的新手(我将此包仅用于 CRUD 操作),并且在上传图像操作时遇到问题。
我已经在阅读文档,但没有看到上传图片。我正在尝试此代码(参考文档)并遇到一些错误:

error:FileSystemException
message :"Cannot retrieve length of file"
OSError (OS Error: No such file or directory, errno = 2)
"File: '/storage/emulated/0/Android/data/com.example.mosque/files/Pictures/scaled_IMG_20190815_183541.jpg'"
Type (FileSystemException)
message:FileSystemException: Cannot retrieve length of file, path = 'File: '/storage/emulated/0/Android/data/com.example.mosque/files/Pictures/scaled_IMG_20190815_183541.jpg'' (OS Error: No such file or directory, errno = 2)
DioErrorType (DioErrorType.DEFAULT)
name:"DioErrorType.DEFAULT"
Run Code Online (Sandbox Code Playgroud)

飞镖

Future uploadImage({dynamic data,Options options}) async{
      Response apiRespon =  await dio.post('$baseURL/mahasiswa/upload/',data: data,options: options);
      if(apiRespon.statusCode== 201){
        return apiRespon.statusCode==201;
      }else{
        print('errr');
        return null;
      }
}
Run Code Online (Sandbox Code Playgroud)

查看.dart …

dart flutter dio

13
推荐指数
4
解决办法
3万
查看次数

Flutter:如何在上传文件时增加 onSendProgress 对流畅进度条动画的调用?

我有以下代码来上传文件。

var client = new dio.Dio();
await client.put(
  url,
  data: formData,
  options: dio.Options(
    headers: headers,
  ),
  onSendProgress: (int sent, int total) {
    final progress = sent / total;
    print('progress: $progress ($sent/$total)');
  },
);
Run Code Online (Sandbox Code Playgroud)

上传文件工作正常。问题是,我有一个视图,它有一个圆形进度条,指示onSendProgress触发时的上传进度。当我上传一个 ~10MB 的文件时,进度条会在一秒钟内从 0% 跳到 100%,然后在继续执行其余代码之前等待几秒钟(取决于文件大小)。这对我来说似乎很奇怪,因为我希望进度条会逐渐增加进度。

您可以在下面找到我的示例中的打印输出,其中包含一个 ~10MB 的文件。

flutter: progress: 0.000003035281907563734 (29/9554302)
flutter: progress: 0.000013187776563897604 (126/9554302)
flutter: progress: 0.999996546058519 (9554269/9554302)
flutter: progress: 0.9999967553883057 (9554271/9554302)
flutter: progress: 1.0 (9554302/9554302)
Run Code Online (Sandbox Code Playgroud)

这是一个较小的文件,但具有相同数量的回调。

flutter: progress: 0.00001847214941293598 (29/1569931)
flutter: progress: 0.00008025830434585978 (126/1569931)
flutter: progress: 0.9999789799679094 (1569898/1569931)
flutter: progress: 0.9999802539092483 …
Run Code Online (Sandbox Code Playgroud)

file-upload flutter dio flutter-http

13
推荐指数
1
解决办法
2502
查看次数

如何用 Dio 发送 FormData?

您好,我正在使用 Dio 发送 FormData,但是发送时,网站返回错误

    var formData = FormData.fromMap({
      "ctl00\$ScriptManager1": "ctl00\$UpdatePanel1",
      "__EVENTTARGET" :"ctl00\$cphPage\$productsControl",
      "__EVENTARGUMENT" : "",
      "__LASTFOCUS" : "",
      "PageLoadedHiddenTxtBox" : "Set",
      "Language" : "es-MX",
      "CurrentLanguage" : "es-MX",
      "Currency" : "",
      "__VIEWSTATE" :"/sadasd.....",
      "__VIEWSTATEGENERATOR" : "C0E71A90",
      "ctl00\$txtSearch" : "",
      "ctl00\$cphPage\$productsControl\$TopTools\$cbxSortType" : "",
      "ctl00\$cphPage\$productsControl\$TopTools\$cbxPageSize" : "-1",
      "ctl00\$taxes\$listCountries" : "54",
      "__ASYNCPOST" : "true",
      " " : ""
    });
var dio = Dio();
    dio.interceptors.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
      var customHeaders = {
        'content-type': 'text/html; charset=utf-8',
        'application':'x-www-form-urlencoded',
        'Cookie': 'uid=rBQBc2CisZdxWU5XBBmMAg==; ASP.NET_SessionId=tedc4xrih1hk1ykbdzlakuvb; ASPNET_Session=client=BLUR; ShopMSAuth=0102A9A3B88FC919D908FEA90B7DF1D119D908000442004C005500520000012F00FF'
        // other headers …
Run Code Online (Sandbox Code Playgroud)

flutter dio flutter-android

12
推荐指数
1
解决办法
2万
查看次数

正文可能正常完成,导致返回“null”,但返回类型可能是不可为 null 的类型

我正在使用新的 dart 版本 >=2.12.0 <3.0.0 并启用空安全。

我已经添加了我的代码以供参考。

比赛服务

import 'package:cric_app/AppUrls.dart';
import 'package:cric_app/features/home/match_model.dart';
import 'package:dio/dio.dart';
import 'package:rxdart/rxdart.dart';

class MatchesService {
  // ignore: close_sinks
  BehaviorSubject<List<MatchModel>> list = BehaviorSubject<List<MatchModel>>();

  Future<List<MatchModel>> getMatches() async {
    try {
      var matchList = await fetchMatches();
      list.add(matchList);
      return matchList;
    } catch (Exc) {
      print(Exc);
    }
  }

  Future<List<MatchModel>> fetchMatches() async {
    var dio = Dio();
    final response = await dio.post(AppUrls.getMatches);
    print(response.data);
    final body = response.data['matches'] as List;
    return body.map((dynamic json) {
      return MatchModel(
        id: json['id'] as int,
        date: json['date'] as …
Run Code Online (Sandbox Code Playgroud)

dart flutter rxdart dio

12
推荐指数
1
解决办法
8万
查看次数

Flutter DIO 库 XMLHttpRequest 错误 Web

我正在使用 Flutter DIO 库。它在我的 Android 应用程序上运行良好,但在 Web 上出现错误。 Error: DioError [DioErrorType.response]: XMLHttpRequest error.

如果我尝试使用 http 相同的 url,它在 Web 上工作正常。我的 Dio 库代码

Dio dio = Dio();
dio.options.method = "POST";
dio.options.headers["Access-Control-Allow-Origin"] = "*";
    dio.options.headers["Access-Control-Allow-Credentials"] = true;
    dio.options.headers["Access-Control-Allow-Headers"] =
        "Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale";
    dio.options.headers["Access-Control-Allow-Methods"] =
        "GET, HEAD, POST, OPTIONS";
var response = await dio
        .post('http://45.79.124.182/app_php/PagarGuru_test/requestAdd.php');
Run Code Online (Sandbox Code Playgroud)

错误日志

C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 908:28   get current
packages/dio/src/dio_mixin.dart 819:20                                                                            assureDioError
packages/dio/src/dio_mixin.dart 678:13                                                                            _dispatchRequest
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 60:31   <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1692:54                                 runBinary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 175:22                           handleError
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 779:46                           handleError
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 800:13                           _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 610:5                            [_completeError]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 666:7 …
Run Code Online (Sandbox Code Playgroud)

web-applications http xmlhttprequest flutter dio

12
推荐指数
1
解决办法
2万
查看次数

用于刷新访问令牌的 Dio 拦截器

我正在尝试使用 Dio 拦截器实现访问令牌刷新。我查看了我能找到的示例,但似乎都不起作用。

这是我的尝试:

class AuthInterceptor extends QueuedInterceptor {
  final Dio dio;
  final AuthService authService;

  AuthInterceptor(this.dio, this.authService);

  @override
  void onRequest(
      RequestOptions options, RequestInterceptorHandler handler) async {
    var accessToken = await TokenRepository.getAccessToken();

    if (accessToken != null) {
      logDebug('Access-Token: $accessToken');
      options.headers['Authorization'] = 'Bearer $accessToken';
    }
    return handler.next(options);
  }

  @override
  void onError(DioError err, ErrorInterceptorHandler handler) async {
    if (err.type == DioErrorType.response && err.response?.statusCode == 401) {
      var accessToken = await TokenRepository.getAccessToken();

      if (accessToken != null) {
        final refreshToken = await TokenRepository.getRefreshToken();
        final refreshResult …
Run Code Online (Sandbox Code Playgroud)

flutter dio

11
推荐指数
2
解决办法
1万
查看次数

Flutter DIO:使用 Dio 包的二进制主体上传图像

使用 http 包,我可以通过将二进制数据放入 post 调用的正文中来将图像发送到服务器,如以下代码片段所示:

var response = await http.post('My_url', body: File(path).readAsBytesSync(),  headers: {
                    'apikey': 'myAPIKEY',
                    'Content-Type': 'image/*', // set content-length
                  });
Run Code Online (Sandbox Code Playgroud)

我不能使用 Dio 做同样的事情,我不知道如何直接将二进制数据放入正文中(就像我可以用邮递员做的那样)

邮差

api post dart flutter dio

10
推荐指数
3
解决办法
2万
查看次数

Flutter - 平台不允许不安全的套接字连接:10.0.2.2

从今天起,每当我尝试登录我的应用程序时,我都会收到 Dio 包抛出的以下错误:SocketException: Insecure socket connections are disallowed by platform: 10.0.2.2

我使用以下设置进行连接:

static BaseOptions options = new BaseOptions(
    baseUrl: "http://10.0.2.2:3000", // on android emulator
    connectTimeout: 5000,
    receiveTimeout: 3000)
Run Code Online (Sandbox Code Playgroud)

因此,类似于(我在 /user/login 处设置了身份验证并正常运行):

var apiLogin = api.dio;
try {
Response response = await apiLogin.post("/user/login",
          options: Options(contentType: "application/json"),
          data: {"email": email, "password": password});
} on DioError catch (e) {
throw Exception([e]);
} 
Run Code Online (Sandbox Code Playgroud)

我有一个在端口 3000 上运行的节点服务器,它连接到(容器化的)mongodb。尝试身份验证时,它立即出现 DioError,我无法在网上的任何地方找到原因。

有谁知道这个错误与什么有关?

编辑[答案]

感谢@lyrics为我指明了正确的方向:从 API 级别 27 及更高级别开始,usesCleartextTraffic 默认为 false,因此阻止传出的 http 请求,需要 HTTPS。

解决方案是将以下内容添加到 AndroidManifest.xml: …

socketexception android-emulator flutter dio

9
推荐指数
1
解决办法
3549
查看次数

使用 Flutter 向 Flask API 发送 http Post-Request(包含图像)

我已经在 CIFAR10 数据集上训练了一个 CNN(占位符,稍后将替换为不同的模型)并将模型集成到烧瓶 API 中。API 托管在 Heroku 上,我现在想使用 Flutter / Dart 在我的手机上拍照,将它们发送到 Flask API,在它们上运行我的训练模型并返回预测。

使用 python,我可以轻松地向我的 API 发出发布请求并返回预测。这是我的简单python代码:

import requests
import json

img = open('some-picture.jpg', 'rb')

files = {'image': img}
response = requests.post("url_to_api", files=files)

print(response.text)
Run Code Online (Sandbox Code Playgroud)

我使用 Flutter / Dart 的时间并不长,我认为发出 htpp 请求的过程比在 python 中复杂一些。有人能给我一些指示或代码,让我可以用我的相机拍照,将它上传到我的 API,并将响应存储在一个变量中吗?这是我的烧瓶 API 的(简化的)python 代码:

from flask import Flask, request
import os
import numpy as np
from PIL import Image
from tensorflow import keras

app = Flask(__name__)
app.config["DEBUG"] = True

model = keras.models.load_model('cifar10_cnn.h5')
labels = ["Airplane", …
Run Code Online (Sandbox Code Playgroud)

api http-post dart flutter dio

9
推荐指数
1
解决办法
1527
查看次数