// ๐Ÿ“„ [์›น ์ „์šฉ] file_picker์˜ ์›น ๊ตฌํ˜„์ฒด์— pickFile(s)๊ฐ€ ์•„์ง ์—†์–ด์„œ(UnimplementedError), // ์ˆจ๊ฒจ์ง„ ๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌํ•œ๋‹ค. import 'dart:async'; import 'dart:js_interop'; import 'dart:typed_data'; import 'package:web/web.dart' as web; /// ์‚ฌ์šฉ์ž๊ฐ€ ์—‘์…€(.xlsx) ํŒŒ์ผ์„ ๊ณ ๋ฅด๋ฉด ๋ฐ”์ดํŠธ๋ฅผ ๋Œ๋ ค์ค€๋‹ค. ์ทจ์†Œํ•˜๋ฉด null. Future pickExcelFileBytes() async { final completer = Completer(); final input = web.HTMLInputElement() ..type = 'file' ..accept = '.xlsx' ..style.display = 'none'; // ๋ฌธ์„œ์— ์‹ค์ œ๋กœ ๋ถ™์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €/์ž๋™ํ™” ํ™˜๊ฒฝ์—์„œ change ์ด๋ฒคํŠธ๊ฐ€ // ์•ˆ์ •์ ์œผ๋กœ ์•ˆ ์žกํžŒ๋‹ค โ€” ๊ทธ๋ž˜์„œ body์— ์ž ๊น ๋ถ™์˜€๋‹ค๊ฐ€ ๋๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ ์ œ๊ฑฐํ•œ๋‹ค. web.document.body!.append(input); input.onchange = (web.Event event) { final file = input.files?.item(0); input.remove(); completer.complete(file); }.toJS; input.click(); final file = await completer.future; if (file == null) return null; final buffer = await file.arrayBuffer().toDart; return buffer.toDart.asUint8List(); }