답변:
이 방법은 HTML
문서 조작을 기반으로 합니다. 일부 추가 패키지를 가져와야합니다.
import 'dart:convert';
import 'dart:html' as html; // or package:universal_html/prefer_universal/html.dart
코드 스 니펫 :
final text = 'this is the text file';
// prepare
final bytes = utf8.encode(text);
final blob = html.Blob([bytes]);
final url = html.Url.createObjectUrlFromBlob(blob);
final anchor = html.document.createElement('a') as html.AnchorElement
..href = url
..style.display = 'none'
..download = 'some_name.txt';
html.document.body.children.add(anchor);
// download
anchor.click();
// cleanup
html.document.body.children.remove(anchor);
html.Url.revokeObjectUrl(url);
여기 입니다 DartPad
데모.
FileSaver 라는 인기있는 JS 라이브러리를 통해 다른 방법을 사용하십시오.
먼저 ProjectFolder/web/index.html
라이브러리를 포함하도록 파일을 업데이트 하고 다음 webSaveAs
과 같이 함수를 정의하십시오 .
...
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js">
</script>
<script>
function webSaveAs(blob, name) {
saveAs(blob, name);
}
</script>
<script src="main.dart.js" type="application/javascript"></script>
...
그런 다음 다트 코드에서이 함수를 다음과 같이 호출 할 수 있습니다.
import 'dart:js' as js;
import 'dart:html' as html;
...
js.context.callMethod("webSaveAs", [html.Blob([bytes], "test.txt"])
이 솔루션은 FileSaver.js 라이브러리를 사용하며 "saveAs"대화창을 열어야합니다.
의도 한대로 작동하기를 바랍니다.
import 'dart:js' as js;
import 'dart:html' as html;
...
final text = 'this is the text file';
final bytes = utf8.encode(text);
final script = html.document.createElement('script') as html.ScriptElement;
script.src = "http://cdn.jsdelivr.net/g/filesaver.js";
html.document.body.nodes.add(script);
// calls the "saveAs" method from the FileSaver.js libray
js.context.callMethod("saveAs", [
html.Blob([bytes]),
"testText.txt", //File Name (optional) defaults to "download"
"text/plain;charset=utf-8" //File Type (optional)
]);
// cleanup
html.document.body.nodes.remove(script);