【问题标题】:import 'dart:io'; not support on the web application导入“飞镖:io”;不支持网络应用程序
【发布时间】:2019-11-18 13:40:48
【问题描述】:

当我在flutter web上使用dart:io库时,调试.like时出现警告

[警告]build_web_compilers:web/main.dart 上的入口点:跳过使用 ddc 编译 retgoo_internal|web/main.dart,因为它的一些 传递库具有不支持的 sdk 依赖项 平台:

retgoo_internal|lib/protocol/http_aiframework.dart

但是当我使用import 'package: flutter_web / io.dart'; 时出现错误代码,代码为.transform 这是 http_aiframework.dart 代码

import 'dart:async';
import 'dart:convert';
import 'dart:io';
//import 'package:flutter_web/io.dart';

import '../main.dart';

typedef HttpProgressListener(int totalBytes, int receivedBytes, bool done);

class Http {
  static String baseURL;

  static bool loadAccessToken() {
    return accessToken != null;
  }

  static bool setAccessToken(String token) {
    accessToken = token;
    return accessToken != null;
  }

  static bool removeAccessToken() {
    accessToken = null;
    return accessToken == null;
  }

  static _processHeader(
      {HttpClientRequest request, Map<String, dynamic> headers}) {
    if (headers != null) {
      headers.forEach((key, value) {
        request.headers.add(key, value);
      });
    }

    if (accessToken != null) {
      request.headers.set("Authorization", "Bearer " + accessToken);
    }
  }

  static _processResponse(
      {HttpClientResponse response,
      HttpProgressListener progressListener}) async {
    final int totalBytes = response.contentLength;
    int receivedBytes = 0;

    String body = await response
        .transform( //this is the error code when I use import 'package: flutter_web / io.dart';
          StreamTransformer.fromHandlers(
            handleData: (data, sink) {
              sink.add(data);

              if (progressListener != null) {
                receivedBytes += data.length;
                progressListener(totalBytes, receivedBytes, false);
              }
            },
            handleDone: (sink) {
              sink.close();
              if (progressListener != null) {
                progressListener(totalBytes, receivedBytes, true);
              }
            },
          ),
        )
        .map((v) => utf8.decoder.convert(v))
        .join();

    return body;
  }

  static getData({
    String baseURL,
    String endpoint,
    Map<String, dynamic> headers,
    HttpProgressListener downloadProgressListener,
    dynamic data,
  }) async {
    final client = HttpClient();
    client.userAgent = "AIFramework/";
    client.connectionTimeout = Duration(seconds: 30);

    HttpClientRequest request;
    String mBaseURL = baseURL ?? Http.baseURL;

    var uri = Uri.parse("$mBaseURL$endpoint");

    if (data == null) {
      request = await client.getUrl(uri);
    } else {
      request = await client.postUrl(uri);
    }

    _processHeader(
      request: request,
      headers: headers,
    );

    if (data != null) {
      String payload = json.encode(data);
      request.write(payload);
    }

    final response = await request.close();
    if (response.statusCode == 200) {
      return json.decode(
        await _processResponse(
          response: response,
          progressListener: downloadProgressListener,
        ),
      );
    }

    return null;
  }
}

【问题讨论】:

    标签: flutter-dependencies flutter-web


    【解决方案1】:

    StreamTransformer 有两种泛型,具体如下

    StreamTransformer, String>

    ps:Dart 是一种类型安全和动态类型的语言。

    【讨论】:

      【解决方案2】:

      我自己也遇到了这个问题,看起来 dart:io 库不适用于 Web 应用程序。

      发件人:https://api.flutter.dev/flutter/dart-io/dart-io-library.html

      重要提示:基于浏览器的应用程序无法使用此库。只有服务器、命令行脚本和 Flutter 移动应用可以导入和使用 dart:io。

      【讨论】:

      • 我们知道应该改用什么吗?从 2019 年 9 月 17 日起,这对我来说在 Flutter 1.9 中也失败了。
      • 我也在寻找使用 dart:io 的替代方法,以允许我打印使用颤振制作的 pdf 页面。
      【解决方案3】:

      如果你想从 io.dart 使用 WebSocket,你可以使用 html 包中的 HtmlWebSocketChannel (import 'package:web_socket_channel/html.dart';)

      【讨论】:

        【解决方案4】:

        您可以使用universal_io 包。除了 Android 和 iOS,它还支持 Web。

        dependencies:
          universal_io: ^1.0.1
        

        执行以下导入而不是dart:io

        import 'package:universal_io/io.dart';
        

        它的工作方式相同。

        相关问题:Avoid using web-only libraries outside Flutter web plugin packages

        【讨论】:

          猜你喜欢
          • 2019-07-15
          • 2019-06-29
          • 2017-01-29
          • 1970-01-01
          • 1970-01-01
          • 2023-01-13
          • 2012-02-06
          • 2021-07-31
          • 2019-09-05
          相关资源
          最近更新 更多