Flutter Mobile demo refresh
This commit is contained in:
parent
55ce74bf8c
commit
201f3d48fc
@ -40,6 +40,24 @@ pnpm install --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`
|
||||
yarn remove xlsx
|
||||
yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
:::caution pass
|
||||
|
||||
Newer releases of Yarn may throw an error:
|
||||
|
||||
```
|
||||
Usage Error: It seems you are trying to add a package using a https:... url; we now require package names to be explicitly specified.
|
||||
Try running the command again with the package name prefixed: yarn add my-package@https:...
|
||||
```
|
||||
|
||||
The workaround is to prepend the URL with `xlsx@`:
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
yarn add xlsx@https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
@ -67,7 +85,7 @@ Snyk security tooling may report errors involving "Prototype Pollution":
|
||||
Prototype Pollution [Medium Severity][https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926]
|
||||
```
|
||||
|
||||
As noted in the [Snyk report](https://web.archive.org/web/20231129100639/https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926):
|
||||
As noted in the [Snyk report](https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926):
|
||||
|
||||
> The issue is resolved in version 0.19.3
|
||||
|
||||
@ -176,6 +194,23 @@ pnpm install --save file:vendor/xlsx-${current}.tgz`}
|
||||
<CodeBlock language="bash">{`\
|
||||
yarn add file:vendor/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
:::caution pass
|
||||
|
||||
Newer releases of Yarn may throw an error:
|
||||
|
||||
```
|
||||
Usage Error: The file:vendor/xlsx-0.20.2.tgz string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?
|
||||
```
|
||||
|
||||
The workaround is to prepend the URI with `xlsx@`:
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
yarn add xlsx@file:vendor/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
@ -38,6 +38,24 @@ pnpm install --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`
|
||||
yarn remove xlsx
|
||||
yarn add https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
:::caution pass
|
||||
|
||||
Newer releases of Yarn may throw an error:
|
||||
|
||||
```
|
||||
Usage Error: It seems you are trying to add a package using a https:... url; we now require package names to be explicitly specified.
|
||||
Try running the command again with the package name prefixed: yarn add my-package@https:...
|
||||
```
|
||||
|
||||
The workaround is to prepend the URL with `xlsx@`:
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
yarn add xlsx@https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
@ -57,7 +75,7 @@ Snyk security tooling may report errors involving "Prototype Pollution":
|
||||
Prototype Pollution [Medium Severity][https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926]
|
||||
```
|
||||
|
||||
As noted in the [Snyk report](https://web.archive.org/web/20231129100639/https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926):
|
||||
As noted in the [Snyk report](https://security.snyk.io/vuln/SNYK-JS-XLSX-5457926):
|
||||
|
||||
> The issue is resolved in version 0.19.3
|
||||
|
||||
@ -165,6 +183,23 @@ pnpm install --save file:vendor/xlsx-${current}.tgz`}
|
||||
<CodeBlock language="bash">{`\
|
||||
yarn add file:vendor/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
:::caution pass
|
||||
|
||||
Newer releases of Yarn may throw an error:
|
||||
|
||||
```
|
||||
Usage Error: The file:vendor/xlsx-0.20.2.tgz string didn't match the required format (package-name@range). Did you perhaps forget to explicitly reference the package name?
|
||||
```
|
||||
|
||||
The workaround is to prepend the URI with `xlsx@`:
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
yarn add xlsx@file:vendor/xlsx-${current}.tgz`}
|
||||
</CodeBlock>
|
||||
|
||||
:::
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
|
@ -34,10 +34,10 @@ models and data flow strategies.
|
||||
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| Version | Date |
|
||||
|:------------------|:-----------|
|
||||
| `1.8.2` (latest) | 2023-12-04 |
|
||||
| `1.2.32` (legacy) | 2023-12-04 |
|
||||
| Browser | Version | Date |
|
||||
|:-------------|:------------------|:-----------|
|
||||
| Chromiun 125 | `1.8.2` (latest) | 2024-06-09 |
|
||||
| Chromium 125 | `1.2.32` (legacy) | 2024-06-09 |
|
||||
|
||||
:::
|
||||
|
||||
@ -238,7 +238,7 @@ $scope.exportSheetJS = function() {
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
<summary open><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
1) Save the following to `index.html`:
|
||||
|
||||
@ -291,6 +291,10 @@ app.controller('sheetjs', function($scope, $http) {
|
||||
2) Start a local web server with `npx http-server .` and access the displayed
|
||||
URL with a web browser (typically `http://localhost:8080`)
|
||||
|
||||
When the page loads, the app will fetch https://docs.sheetjs.com/pres.xlsx and
|
||||
store an array of objects in state. When the "Export Table" button is clicked,
|
||||
a worksheet is created and exported to XLSX.
|
||||
|
||||
</details>
|
||||
|
||||
### HTML
|
||||
@ -340,7 +344,7 @@ The HTML table can be directly exported with [`table_to_book`](/docs/api/utiliti
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary><b>Complete Example</b> (click to show)</summary>
|
||||
<summary open><b>How to run the example</b> (click to hide)</summary>
|
||||
|
||||
1) Save the following to `index.html`:
|
||||
|
||||
@ -386,6 +390,10 @@ app.controller('sheetjs', function($scope, $http) {
|
||||
2) Start a local web server with `npx http-server .` and access the displayed
|
||||
URL with a web browser (typically `http://localhost:8080`)
|
||||
|
||||
When the page loads, the app will fetch https://docs.sheetjs.com/pres.xlsx and
|
||||
store the HTML string in state. When the "Export Table" button is clicked, a
|
||||
worksheet is created and exported to XLSX.
|
||||
|
||||
</details>
|
||||
|
||||
[^1]: See [`$http`](https://docs.angularjs.org/api/ng/service/$http) in the AngularJS documentation.
|
||||
|
@ -26,7 +26,11 @@ user-supplied sheets and exports data to XLSX workbooks:
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
This demo was last tested on 2023 December 04 with Glide Data Grid 5.3.2
|
||||
This demo was tested in the following environments:
|
||||
|
||||
| Browser | Version | Date |
|
||||
|:-------------|:--------|:-----------|
|
||||
| Chromiun 125 | `5.3.2` | 2024-06-09 |
|
||||
|
||||
:::
|
||||
|
||||
@ -384,7 +388,8 @@ values should be 41, 42, 43, 44, and 45, as shown in the screenshot below:
|
||||
|
||||
![glide-data-grid after edits](pathname:///gdg/post.png)
|
||||
|
||||
7) Click on the "Export" button to create a XLSX file (`sheetjs-gdg.xlsx`).
|
||||
7) Click on the "Export" button. The browser should attempt to download a XLSX
|
||||
file (`sheetjs-gdg.xlsx`). Save the file.
|
||||
|
||||
Open the generated file and verify the contents match the grid.
|
||||
|
||||
|
@ -28,15 +28,15 @@ This demo was tested in the following environments:
|
||||
|
||||
| Version | Date | Notes |
|
||||
|:----------------|:-----------|:---------------------|
|
||||
| `7.0.0-beta.19` | 2023-12-04 | |
|
||||
| `7.0.0-beta.41` | 2023-12-04 | Editing did not work |
|
||||
| `7.0.0-beta.19` | 2024-06-09 | |
|
||||
| `7.0.0-beta.44` | 2024-06-09 | Editing did not work |
|
||||
|
||||
:::
|
||||
|
||||
:::danger pass
|
||||
|
||||
When this demo was last tested, the grid correctly displayed data but could not
|
||||
be edited by the user.
|
||||
When this demo was last tested against the latest version, the grid correctly
|
||||
displayed data but data could not be edited by the user.
|
||||
|
||||
The current recommendation is to use version `7.0.0-beta.19`.
|
||||
|
||||
@ -50,7 +50,7 @@ installation with Yarn and other package managers.
|
||||
Using the `npm` tool, this command installs SheetJS and React Data Grid:
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz react-data-grid@7.0.0-beta.41`}
|
||||
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz react-data-grid@7.0.0-beta.19`}
|
||||
</CodeBlock>
|
||||
|
||||
Methods and components in both libraries can be loaded in pages using `import`:
|
||||
@ -146,17 +146,17 @@ function rdg_to_ws(rows: Row[]): WorkSheet {
|
||||
|
||||
## Demo
|
||||
|
||||
1) Create a new TypeScript `create-react-app` app:
|
||||
1) Create a new ViteJS app using the `react-ts` template:
|
||||
|
||||
```bash
|
||||
npx create-react-app sheetjs-rdg --template typescript
|
||||
npm create vite@latest -- sheetjs-rdg --template react-ts
|
||||
cd sheetjs-rdg
|
||||
```
|
||||
|
||||
2) Install dependencies:
|
||||
|
||||
<CodeBlock language="bash">{`\
|
||||
npm i -S https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz react-data-grid@7.0.0-beta.41`}
|
||||
npm i -S https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz react-data-grid@7.0.0-beta.19`}
|
||||
</CodeBlock>
|
||||
|
||||
3) Download [`App.tsx`](pathname:///rdg/App.tsx) and replace `src/App.tsx`.
|
||||
@ -168,12 +168,24 @@ curl -L -o src/App.tsx https://docs.sheetjs.com/rdg/App.tsx
|
||||
4) Start the development server:
|
||||
|
||||
```bash
|
||||
npm start
|
||||
npm run dev
|
||||
```
|
||||
|
||||
The terminal window will display a URL (typically `http://localhost:5173`).
|
||||
Open the URL with a web browser and confirm that a page loads.
|
||||
|
||||
#### Testing
|
||||
|
||||
5) When the page loads, it will fetch https://docs.sheetjs.com/pres.numbers,
|
||||
parse with SheetJS, and load the data in the data grid.
|
||||
5) Confirm the table shows a list of Presidents.
|
||||
|
||||
6) Click one of the "export" buttons to export the grid data to file.
|
||||
When the page loads, it will fetch https://docs.sheetjs.com/pres.numbers, parse
|
||||
with SheetJS, and load the data in the data grid.
|
||||
|
||||
6) Click the "export [.xlsx]" button to export the grid data to XLSX. It should
|
||||
attempt to download `SheetJSRDG.xlsx`.
|
||||
|
||||
7) Open the generated file in a spreadsheet editor. Set cell A7 to "SheetJS Dev"
|
||||
and set cell B7 to 47. Save the file.
|
||||
|
||||
8) Use the file picker to select the modified file. The table will refresh and
|
||||
show the new data.
|
@ -10,6 +10,8 @@ sidebar_custom_props:
|
||||
---
|
||||
|
||||
import current from '/version.js';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
Dart[^1] + Flutter[^2] is a popular cross-platform app framework. JavaScript
|
||||
@ -45,15 +47,15 @@ This demo was tested in the following environments:
|
||||
|
||||
| OS | Device | Dart | Flutter | Date |
|
||||
|:-----------|:------------------|:--------|:---------|:-----------|
|
||||
| Android 29 | NVIDIA Shield | `3.2.2` | `3.16.2` | 2023-12-04 |
|
||||
| iOS 15.1 | iPad Pro | `3.2.2` | `3.16.2` | 2023-12-04 |
|
||||
| Android 30 | NVIDIA Shield | `3.4.3` | `3.22.2` | 2024-06-09 |
|
||||
| iOS 15.1 | iPad Pro | `3.4.3` | `3.22.2` | 2024-06-09 |
|
||||
|
||||
**Simulators**
|
||||
|
||||
| OS | Device | Dart | Flutter | Dev Platform | Date |
|
||||
|:-----------|:------------------|:--------|:---------|:-------------|:-----------|
|
||||
| Android 34 | Pixel 3a | `3.2.2` | `3.16.2` | `darwin-x64` | 2023-12-04 |
|
||||
| iOS 17.0.1 | iPhone 15 Pro Max | `3.2.2` | `3.16.2` | `darwin-x64` | 2023-12-04 |
|
||||
| Android 34 | Pixel 3a | `3.4.3` | `3.22.2` | `darwin-x64` | 2024-06-09 |
|
||||
| iOS 17.5 | iPhone 15 Pro Max | `3.4.3` | `3.22.2` | `darwin-x64` | 2024-06-09 |
|
||||
|
||||
:::
|
||||
|
||||
@ -219,12 +221,31 @@ class SheetJSFlutterState extends State<SheetJSFlutter> {
|
||||
|
||||
Run `flutter doctor` and confirm the following items are checked:
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="linux" label="Linux">
|
||||
|
||||
```
|
||||
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
|
||||
[✓] Xcode - develop for iOS and macOS (Xcode 15.0.1)
|
||||
[✓] Android Studio (version 2022.3)
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="macos" label="macOS" default>
|
||||
|
||||
```
|
||||
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
|
||||
[✓] Xcode - develop for iOS and macOS (Xcode 15.4)
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
```
|
||||
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
(the actual version numbers may differ)
|
||||
|
||||
<details open>
|
||||
@ -290,6 +311,22 @@ If Chromium is installed, the environment variable should be manually assigned:
|
||||
export CHROME_EXECUTABLE=/Applications/Chromium.app/Contents/MacOS/Chromium
|
||||
```
|
||||
|
||||
<Tabs groupId="os">
|
||||
<TabItem value="linux" label="Linux">
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="macos" label="macOS">
|
||||
|
||||
```bash
|
||||
export CHROME_EXECUTABLE=/Applications/Chromium.app/Contents/MacOS/Chromium
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="win" label="Windows">
|
||||
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
:::
|
||||
|
||||
</details>
|
||||
@ -297,17 +334,18 @@ export CHROME_EXECUTABLE=/Applications/Chromium.app/Contents/MacOS/Chromium
|
||||
Run `flutter emulators` and check for both `ios` and `android` emulators:
|
||||
|
||||
```
|
||||
apple_ios_simulator • iOS Simulator • Apple • ios
|
||||
Pixel_3a_API_34 • Pixel 3a API 34 • Google • android
|
||||
Id • Name • Manufacturer • Platform
|
||||
|
||||
apple_ios_simulator • iOS Simulator • Apple • ios
|
||||
Pixel_3a_API_34 • Pixel 3a API 34 • Google • android
|
||||
```
|
||||
|
||||
1) Disable telemetry.
|
||||
1) Disable telemetry. The following commands were confirmed to work:
|
||||
|
||||
```bash
|
||||
dart --disable-telemetry
|
||||
dart --disable-analytics
|
||||
flutter config --no-analytics
|
||||
flutter config --disable-telemetry
|
||||
```
|
||||
|
||||
### Base Project
|
||||
@ -453,9 +491,9 @@ flutter run
|
||||
The app fetches https://docs.sheetjs.com/pres.numbers, parses, converts data to
|
||||
an array of arrays, and presents the data in a Flutter `Table` widget.
|
||||
|
||||
:::caution pass
|
||||
:::info pass
|
||||
|
||||
When the demo was last run, there was a build error:
|
||||
In some demo runs, the build failed with an Android SDK error:
|
||||
|
||||
```
|
||||
│ The plugin flutter_js requires a higher Android SDK version. │
|
||||
@ -513,7 +551,7 @@ flutter devices
|
||||
The list should include the device:
|
||||
|
||||
```
|
||||
SheetJS (mobile) • 1234567890 • android-arm64 • Android 10 (API 29)
|
||||
SheetJS (mobile) • 726272627262726272 • android-arm64 • Android 11 (API 30)
|
||||
^^^^^^^--- the first column is the name
|
||||
```
|
||||
|
||||
@ -529,7 +567,9 @@ flutter build apk --release
|
||||
flutter install
|
||||
```
|
||||
|
||||
The script will ask for a device:
|
||||
:::note pass
|
||||
|
||||
The script may ask for a device:
|
||||
|
||||
```
|
||||
[1]: SheetJS (1234567890)
|
||||
@ -541,7 +581,9 @@ Please choose one (or "q" to quit):
|
||||
|
||||
Select the number corresponding to the device.
|
||||
|
||||
18) Launch the installed `sheetjs_flutter` app on the device
|
||||
:::
|
||||
|
||||
18) Launch the installed `sheetjs_flutter` app on the device.
|
||||
|
||||
:::caution pass
|
||||
|
||||
@ -564,7 +606,7 @@ flutter devices
|
||||
The list should include the device:
|
||||
|
||||
```
|
||||
SheetPad (mobile) • 00000000-0000000000000000 • ios • iOS 15.1 19B74
|
||||
SheetPad (mobile) • 00000000-0000000000000000 • ios • iOS 15.1 19B74
|
||||
^^^^^^^^--- the first column is the name
|
||||
```
|
||||
|
||||
@ -574,6 +616,55 @@ The list should include the device:
|
||||
flutter run -d SheetPad
|
||||
```
|
||||
|
||||
In debug mode, "Flutter tools" will attempt to connect to the running app. The
|
||||
device will ask for permission:
|
||||
|
||||
> "Sheetjs Flutter" would like to find and connect to devices on your local network.
|
||||
|
||||
Tap "OK" to continue.
|
||||
|
||||
:::caution pass
|
||||
|
||||
When this demo was last tested, the build failed with an error:
|
||||
|
||||
```text
|
||||
Could not build the precompiled application for the device.
|
||||
Error (Xcode): No profiles for 'com.example.sheetjsFlutter' were found: Xcode couldn't find any iOS App Development provisioning profiles matching 'com.example.sheetjsFlutter'. Automatic signing is disabled and unable to generate a profile. To enable automatic signing, pass -allowProvisioningUpdates to xcodebuild.
|
||||
```
|
||||
|
||||
The message includes a hint:
|
||||
|
||||
```
|
||||
Verify that the Bundle Identifier in your project is your signing id in Xcode
|
||||
open ios/Runner.xcworkspace
|
||||
```
|
||||
|
||||
Open the workspace and select the "Runner" project in the Navigator. In the main
|
||||
pane, select "Signing & Capabilities" and ensure a Team is selected. From
|
||||
the menu bar, select "Product" > "Run" to run the app.
|
||||
|
||||
:::
|
||||
|
||||
:::info pass
|
||||
|
||||
If there is an "Untrusted Developer" error, the certificate must be trusted on
|
||||
the device. The following steps were verified in iOS 15.1:
|
||||
|
||||
1) Open the "Settings" app on the device
|
||||
|
||||
In the "APPS FROM DEVELOPER" section of the new screen, "Sheetjs Flutter" should
|
||||
be displayed. If it is missing, tap the "<" button near the top of the screen
|
||||
and select a different certificate from the list.
|
||||
|
||||
2) Select "General" > "VPN & Device Management".
|
||||
|
||||
3) In the "DEVELOPER APP" section, tap the certificate that is "Not Trusted".
|
||||
|
||||
4) After confirming "Sheetjs Flutter" is in the list, tap the "Trust" button and
|
||||
tap "Trust" in the popup.
|
||||
|
||||
:::
|
||||
|
||||
[^1]: https://dart.dev/ is the official site for the Dart Programming Language.
|
||||
[^2]: https://flutter.dev/ is the official site for the Flutter Framework.
|
||||
[^3]: [The `flutter_js` package](https://pub.dev/packages/flutter_js) is hosted on the Dart package repository.
|
||||
|
@ -23,7 +23,12 @@ spreadsheets into simple XLSX files for MATLAB.
|
||||
|
||||
:::note Tested Deployments
|
||||
|
||||
This demo was last tested by SheetJS users on 2023 November 27 in MATLAB R2023a.
|
||||
This demo was tested by SheetJS users in the following deployments:
|
||||
|
||||
| Architecture | Version | Date |
|
||||
|:-------------|:--------|:-----------|
|
||||
| `darwin-x64` | R2024a | 2024-06-09 |
|
||||
| `win10-x64` | R2024a | 2024-06-09 |
|
||||
|
||||
:::
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 70 KiB |
Binary file not shown.
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 80 KiB |
Loading…
Reference in New Issue
Block a user