2
votes

import 'fléchette: io'; pas de support sur l'application Web

lorsque j'utilise la bibliothèque dart: io sur le Web Flutter, un avertissement apparaît lors du débogage. comme ça

[AVERTISSEMENT] build_web_compilers: entrypoint sur web / main.dart: Ignorer la compilation de retgoo_internal | web / main.dart avec ddc car certains de ses les bibliothèques transitives ont des dépendances sdk qui ne sont pas prises en charge sur ce plateforme:

retgoo_internal | lib / protocol / http_aiframework.dart

mais quand j'utilise import 'package: flutter_web / io.dart'; il y a un code d'erreur, dans le code .transform voici le http_aiframework.dart code

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;
  }
}


0 commentaires

4 Réponses :


0
votes

StreamTransformer a deux types génériques, spécifiques comme ceci

StreamTransformer , chaîne>

ps: Dart est un langage de type sécurisé et dynamique.


0 commentaires

5
votes

Je viens de rencontrer ce problème moi-même, il semble que la bibliothèque dart: io ne fonctionne pas avec les applications Web.

De: https://api.flutter.dev/ flutter / dart-io / dart-io-library.html

Important: les applications basées sur un navigateur ne peuvent pas utiliser cette bibliothèque. Seuls les serveurs, les scripts de ligne de commande et les applications mobiles Flutter peuvent importer et utiliser dart: io.


2 commentaires

Savons-nous ce que nous devrions utiliser à la place? Cela échoue également pour moi dans Flutter 1.9 du 17 septembre 2019.


Je recherche également une alternative à l'utilisation de dart: io pour me permettre d'imprimer des pages pdf réalisées avec flutter.



0
votes

Si ce que vous souhaitez utiliser depuis io.dart est WebSocket, vous pouvez utiliser HtmlWebSocketChannel depuis le package html (import 'package: web_socket_channel / html.dart';)


0 commentaires

4
votes

Vous pouvez utiliser le package universal_io . Il prend en charge le Web en plus d'Android et d'iOS.

import 'package:universal_io/io.dart';

Effectuez l'importation suivante au lieu de dart:io:

dependencies:
  universal_io: ^1.0.1


0 commentaires