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; } }
4 Réponses :
StreamTransformer a deux types génériques, spécifiques comme ceci
StreamTransformer
ps: Dart est un langage de type sécurisé et dynamique.
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.
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.
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';)
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