// ๐ [์น ์ ์ฉ] 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();
}