不支持的操作:_Namespace 在 web 上使用 dart io 时

Sai*_*rma 9 io web dart

I am trying to use dart-io to read and write file. I am getting below exception.
Uncaught Error: Unsupported operation: _Namespace
    at Object.dart.throw (dart_sdk.js:4537)
    at Function.get _namespacePointer [as _namespacePointer] (dart_sdk.js:49364)
    at Function._namespacePointer (dart_sdk.js:47224)
    at Function._dispatchWithNamespace (dart_sdk.js:47227)
    at io._File.new.open (dart_sdk.js:47342)
    at new io._FileStreamConsumer.new (dart_sdk.js:47186)
    at io._File.new.openWrite (dart_sdk.js:47468)
    at refresh (main.dart:15)
    at refresh.next (<anonymous>)
    at runBody (dart_sdk.js:22264)
    at Object.async.async (dart_sdk.js:22292)
    at main.refresh (main.dart:13)
    at Object.dart._checkAndCall (dart_sdk.js:4731)
    at Object.dart.dcall (dart_sdk.js:4736)
Run Code Online (Sandbox Code Playgroud)

我使用的代码最终输出 = io.File('output.txt').openWrite(); output.write(output_data);

Could you please help me in fixing it.
Or any other way to read and write files using dart in a web application.
Run Code Online (Sandbox Code Playgroud)

小智 22

if (kIsWeb) {
  image = Image.network(pickedFile.path);
} else {
  image = Image.file(File(pickedFile.path));
}
Run Code Online (Sandbox Code Playgroud)

答案在文档中 https://pub.dev/packages/image_picker


Kev*_*ore 10

dart:io不能在 web 项目中使用。dart:html有一些有限的文件 API(仅限于浏览器允许的内容)。Dart 在浏览器中不能做任何浏览器没有提供的事情。

(不知道为什么君特没有把这个作为答案......)


Moh*_*odh 5

使用https://pub.dev/packages/image_picker库。

在 dart 文件中:-

import 'dart:io';
Run Code Online (Sandbox Code Playgroud)

要选择图像,请使用以下代码:-

_imgFromGallery() async {
   final temp = (await ImagePicker().
                 getImage(source:ImageSource.camera,imageQuality: 
                 80));
   imageForSendToAPI = await temp.readAsBytes();
   setState(() {});
  }
Run Code Online (Sandbox Code Playgroud)

此方法将从桌面获取图像。

这里 imageForSendToAPI 将为您提供 uint8list,您可以将其传递给 API。

要显示所选文件,请使用:

Image.memory(imageForSendToAPI)
Run Code Online (Sandbox Code Playgroud)

发送到 API 时不要使用多部分,只需像下面这样传递:-

data = {
"profile_image":imageForsendToAPI.toString();
}
Run Code Online (Sandbox Code Playgroud)