From aa59cc10ad0b84280bd7c7e182b792ba8a8302ea Mon Sep 17 00:00:00 2001 From: SheetJS Date: Thu, 1 Jun 2023 00:41:12 -0400 Subject: [PATCH] flutter --- docz/docs/03-demos/05-mobile/06-flutter.md | 231 +++++++++++++++++++++ docz/docusaurus.config.js | 2 +- docz/static/flutter/ios.png | Bin 0 -> 83999 bytes docz/static/flutter/main.dart | 100 +++++++++ 4 files changed, 332 insertions(+), 1 deletion(-) create mode 100644 docz/docs/03-demos/05-mobile/06-flutter.md create mode 100644 docz/static/flutter/ios.png create mode 100644 docz/static/flutter/main.dart diff --git a/docz/docs/03-demos/05-mobile/06-flutter.md b/docz/docs/03-demos/05-mobile/06-flutter.md new file mode 100644 index 0000000..7b7adcb --- /dev/null +++ b/docz/docs/03-demos/05-mobile/06-flutter.md @@ -0,0 +1,231 @@ +--- +title: Flutter +pagination_prev: demos/static/index +pagination_next: demos/desktop/index +sidebar_position: 5 +sidebar_custom_props: + summary: Dart + JS Interop +--- + +import current from '/version.js'; +import CodeBlock from '@theme/CodeBlock'; + +Dart + Flutter is a cross-platform alternative to [JS + React Native](/docs/demos/mobile/reactnative). + +For the iOS and Android targets, the `flutter_js` package wraps JavaScriptCore +and QuickJS engines respectively. + +The [Standalone scripts](/docs/getting-started/installation/standalone) can be +parsed and evaluated in the wrapped engines. + +The "Complete Example" creates an app that looks like the screenshots below: + + + +
iOS
+ +![iOS screenshot](pathname:///flutter/ios.png) + +
+ +:::warning Telemetry + +Before starting this demo, manually disable telemetry. On MacOS: + +```bash +dart --disable-telemetry +dart --disable-analytics +flutter config --no-analytics +flutter config --disable-telemetry +``` + +::: + +## Integration Details + +This demo assumes familiarity with Dart and Flutter. + +### Loading SheetJS + +#### Adding the scripts + +The `flutter.assets` property in `pubspec.yaml` specifies assets. Assuming the +standalone script and shim are placed in the `scripts` folder, the following +snippet loads the scripts as assets: + +```yaml title="pubspec.yaml" +flutter: + assets: + - scripts/xlsx.full.min.js + - scripts/shim.min.js +``` + +Once loaded, the contents can be loaded with `rootBundle.loadString`: + +```dart +import 'package:flutter/services.dart' show rootBundle; + +String shim = await rootBundle.loadString("scripts/shim.min.js"); +String sheetjs = await rootBundle.loadString("scripts/xlsx.full.min.js"); +``` + +#### Initialization + +It is strongly recommended to add the engine to the state of a `StatefulWidget`: + +```dart +import 'package:flutter_js/flutter_js.dart'; + +class SheetJSFlutterState extends State { + // highlight-next-line + late JavascriptRuntime _engine; + + @override void initState() { + // highlight-next-line + _engine = getJavascriptRuntime(); + } +} +``` + +#### Running SheetJS Scripts + +Since fetching assets is asychronous, it is recommended to create a wrapper +`async` function and sequentially await each script: + +```dart +class SheetJSFlutterState extends State { + String _version = '0.0.0'; + + @override void initState() { + _engine = getJavascriptRuntime(); + _initEngine(); // note: this is not `await`-ed + } + + Future _initEngine() async { + /* fetch and evaluate the shim */ + String shim = await rootBundle.loadString("scripts/shim.min.js"); + _engine.evaluate(shim); + // highlight-start + /* fetch and evaluate the main script */ + String sheetjs = await rootBundle.loadString("scripts/xlsx.full.min.js"); + _engine.evaluate(sheetjs); + // highlight-end + /* capture the version string */ + JsEvalResult vers = _engine.evaluate("XLSX.version"); + setState(() => _version = vers.stringResult); + } +} +``` + +### Reading data + +The most common binary data type in Dart is `Uint8List`. It is the data type +for `http.Response#bodyBytes` and the return type of `File#readAsBytes()`. + +The Flutter JS connector offers no simple interop for `Uint8List` data. The data +should be converted to Base64 before parsing. + +The `csv` package provides a special `CsvToListConverter` converter to generate +`List>` (Dart's spiritual equivalent of the array of arrays): + +```dart +import 'dart:convert'; +import 'package:http/http.dart' as http; +import 'package:csv/csv.dart'; + +class SheetJSFlutterState extends State { + List> _data = []; + + void _processBytes(Uint8List bytes) { + String base64 = base64Encode(bytes); + JsEvalResult func = _engine.evaluate(""" + var wb = XLSX.read('$base64'); + XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]]); + """); + String csv = func.stringResult; + setState(() { _data = CsvToListConverter(eol: "\n").convert(csv); }); + } +``` + +## Demo + +:::note + +This demo was tested on an Intel Mac on 2023 May 31 with Flutter 3.10.2, +Dart 3.0.2, and `flutter_js` 0.7.0 + +The iOS simulator runs iOS 16.2 on an iPhone 14 Pro Max. + +::: + +### Base Project + +1) Disable telemetry. + +```bash +dart --disable-telemetry +dart --disable-analytics +flutter config --no-analytics +flutter config --disable-telemetry +``` + +2) Create a new Flutter project: + +```bash +flutter create sheetjs_flutter +cd sheetjs_flutter +``` + +3) Open the iOS simulator + +4) While the iOS simulator is open, start the application: + +```bash +flutter run +``` + +Once the app loads in the simulator, stop the terminal process. + +5) Install Flutter / Dart dependencies: + +```bash +flutter pub add http csv flutter_js +``` + +6) Open `pubspec.yaml` with a text editor. Search for the line that starts with +`flutter:` (no whitespace) and add the highlighted lines: + +```yaml title="pubspec.yaml" +# The following section is specific to Flutter packages. +flutter: +// highlight-start + assets: + - scripts/xlsx.full.min.js + - scripts/shim.min.js +// highlight-end +``` + +7) Download dependencies to the `scripts` folder: + +{`\ +mkdir -p scripts +cd scripts +curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js +curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js +cd ..`} + + +8) Download [`main.dart`](pathname:///flutter/main.dart) to `lib/main.dart`: + +```bash +curl -L -o lib/main.dart https://docs.sheetjs.com/flutter/main.dart +``` + +9) Launch the app: + +```bash +flutter run +``` + +The app fetches , parses, converts data to an +array of arrays, and presents the data in a Flutter `Table` widget. diff --git a/docz/docusaurus.config.js b/docz/docusaurus.config.js index b3e9df2..d651c23 100644 --- a/docz/docusaurus.config.js +++ b/docz/docusaurus.config.js @@ -145,7 +145,7 @@ const config = { prism: { theme: lightCodeTheme, darkTheme: darkCodeTheme, - additionalLanguages: [ "visual-basic", "swift", "java", "csharp", "perl", "ruby", "cpp", "applescript", "liquid", "rust" ], + additionalLanguages: [ "visual-basic", "swift", "java", "csharp", "perl", "ruby", "cpp", "applescript", "liquid", "rust", "dart" ], }, liveCodeBlock: { playgroundPosition: 'top' diff --git a/docz/static/flutter/ios.png b/docz/static/flutter/ios.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ba8b788388610e6c54e862618939d8c5126f0b GIT binary patch literal 83999 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 z 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 Lu6{1-oD!M createState() => SheetJSFlutterState(); +} + +class SheetJSFlutterState extends State { + String _version = '0.0.0'; + List> _data = []; + late JavascriptRuntime _engine; + + @override + void initState() { + super.initState(); + _async(); + } + + void _async() async { + await _initEngine(); + await _fetch(); + } + + Future _initEngine() async { + /* load scripts */ + _engine = getJavascriptRuntime(); + String shim = await rootBundle.loadString("scripts/shim.min.js"); + _engine.evaluate(shim); + String sheetjs = await rootBundle.loadString("scripts/xlsx.full.min.js"); + _engine.evaluate(sheetjs); + JsEvalResult vers = _engine.evaluate("XLSX.version"); + setState(() => _version = vers.stringResult); + } + + Future _fetch() async { + final res = await http.get(Uri.parse("https://sheetjs.com/pres.numbers")); + if (res.statusCode == 200) + _processBytes(res.bodyBytes); + else + throw Exception("Failed to fetch file"); + } + + void _processBytes(Uint8List bytes) { + String base64 = base64Encode(bytes); + JsEvalResult func = _engine.evaluate(""" + var wb = XLSX.read('$base64'); + XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]]); + """); + setState(() { + _data = CsvToListConverter(eol: "\n").convert(func.stringResult); + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + backgroundColor: Theme.of(context).colorScheme.inversePrimary, + title: Text('SheetJS x Flutter $_version'), + ), + body: Table( + children: _data.mapIndexed((R, row) => TableRow( + decoration: BoxDecoration(color: R == 0 ? Colors.blue[50] : null), + children: row.mapIndexed((C, cell) => Text(cell.toString())).toList() + )).toList() + ), + ); + } +} +