This guide describes how to integrate WebDataRocks with Flutter.
This tutorial is split into the following sections:
Step 1. Download or clone the sample project from GitHub with the following commands:
git clone https://github.com/webdatarocks/pivot-flutter cd pivot-flutter
Step 2. Install dependencies described in the pubspec.yaml
file:
dart pub get
If you get an error on this step, add the Flutter SDK location to the PATH
environment variable. Learn more in the Flutter docs.
Step 3. Connect a mobile device. Learn how to configure Android and iOS devices.
Step 4. Run the project:
flutter run
You can see the result on your mobile device.
To stop the project, press Ctrl + C
(Control + C
on macOS) in the console.
The sample project contains the following examples:
To integrate WebDataRocks into a Flutter app, take the following steps:
If you don’t have an existing Flutter project, create one with the following command:
flutter create wdr_project && cd wdr_project
If you get an error on this step, add the Flutter SDK location to the PATH
environment variable. Learn more in the Flutter docs.
Get WebDataRocks package for Flutter by running the following command from your project’s root folder:
flutter pub add flutter_webdatarocks
Note. Our flutter_webdatarocks wrapper loads WebDataRocks files from CDN.
Ensure the required Android and iOS versions are used in your Flutter project.
Android
compileSdkVersion
≥ 32.targetSdkVersion
≥ 32.minSdkVersion
≥ 19.iOS
iOS Deployment Target
≥ 9.MinimumOSVersion
≥ 9.Learn how to configure Android and iOS build settings in Flutter.
Step 4.1. Create a .dart
file (e.g., WDR.dart
) in the lib/
folder of your project:
import 'package:flutter/material.dart'; class WDR extends StatelessWidget { const WDR({super.key}); @override Widget build(BuildContext context) { } }
Step 4.2. Import flutter_webdatarocks into the WDR.dart
file:
import 'package:flutter/material.dart'; import 'package:flutter_webdatarocks/flutter_webdatarocks.dart'; class WDR extends StatelessWidget { const WDR({super.key}); @override Widget build(BuildContext context) { } }
Step 4.3. Create a WebDataRocks instance and return it from the build() method:
import 'package:flutter/material.dart'; import 'package:flutter_webdatarocks/flutter_webdatarocks.dart'; class WDR extends StatelessWidget { const WDR({super.key}); @override Widget build(BuildContext context) { WebDataRocks pivot = WebDataRocks( toolbar: true, report: const { "dataSource": { "dataSourceType": "csv", "filename": "https://cdn.webdatarocks.com/data/data.csv" } } ); return pivot; } }
The toolbar
and the report
are WebDataRocks initialization parameters. See the list of supported parameters.
Step 4.4. Add the WebDataRocks instance to a Flutter widget where the pivot table should appear. For example, copy and paste the code below into your main.dart
file:
import 'package:flutter/material.dart'; import 'WDR.dart'; void main() { runApp(MaterialApp( title: 'WebDataRocks Demo', home: Scaffold( appBar: AppBar( backgroundColor: const Color.fromARGB(255, 5, 152, 223), foregroundColor: const Color.fromARGB(255, 233, 233, 233), title: const Text('WebDataRocks Demo')), // The WebDataRocks instance body: const WDR())) ); }
Step 5.1. Run the following command to make sure a mobile device is connected:
flutter devices
If the device is not shown, check out Flutter setup guides for Android and iOS.
Step 5.2. Launch your app with the following command:
flutter run
See the results on the mobile device.
To stop the project, press Ctrl + C
(Control + C
on macOS) in the console.
In Flutter, most WebDataRocks initialization parameters are supported, except for the following:
container
customizeCell
You can invoke WebDataRocks methods via the variable with the WebDataRocks instance (e.g., pivot
):
pivot.openFieldsList();
Check out an example on GitHub.
Note. In Flutter, all WebDataRocks API calls are asynchronous, except for on() and off().
Most WebDataRocks methods are supported in Flutter, apart from the following:
Note. Unsupported methods can be accessed via JavaScript.
Attach a handler to a WebDataRocks event using the on() API call:
void updateHandler() { // Event handler }
pivot.on("update", updateHandler);
An event handler can also be defined as an anonymous function:
pivot.on("update", () { // Event handler });
To get data from an event, add the data
input parameter to the handler:
pivot.on("cellclick", (data) { // Event handler });
Check out an example on GitHub.
See the full list of WebDataRocks events.
Event handlers can be removed via the off() API call:
pivot.off("cellclick");
pivot.off("cellclick", cellclickHandler);
Using JavaScript, you can access WebDataRocks methods that are not directly supported in Flutter.
For instance, let’s highlight cells you click using customizeCell:
Step 1. Import webview_flutter in the .dart
file with WebDataRocks (e.g., WDR.dart
):
import 'package:flutter/material.dart'; import 'package:flutter_webdatarocks/flutter_webdatarocks.dart'; import 'package:webview_flutter/webview_flutter.dart'; class WDR extends StatelessWidget { const WDR ({super.key}); @override Widget build(BuildContext context) { WebDataRocks pivot = WebDataRocks( toolbar: true, report: const { "dataSource": { "dataSourceType": "csv", "filename": "https://cdn.webdatarocks.com/data/data.csv" } } ); return pivot; } }
Step 2. Create an anonymous async
handler for the cellclick event. JavaScript code will be run in the handler:
@override Widget build(BuildContext context) { WebDataRocks pivot = WebDataRocks( toolbar: true, report: const { "dataSource": { "dataSourceType": "csv", "filename": "https://cdn.webdatarocks.com/data/data.csv" } } ); pivot.on("cellclick", (data) async { // Your JavaScript code will be run here }); return pivot; }
Step 3. Create a WebViewController instance (e.g., controller
) in the handler:
pivot.on("cellclick", (data) async { // Your JavaScript code will be run here WebViewController controller = await pivot.controller.future; });
Step 4. Call the runJavascript() method on the controller
and specify JavaScript code as a parameter:
pivot.on("cellclick", (data) async { // Your JavaScript code will be run here WebViewController controller = await pivot.controller.future; controller.runJavascript(''' webdatarocks.customizeCell((cellBuilder, cellData) => { if(cellData.label === "${data['label']}") { cellBuilder.style.background = "rgba(5, 152, 223, 0.5)"; } }); '''); });
Note. runJavascript() does not return the result of your JavaScript code. To return the result, use the runJavascriptReturningResult() method instead.
Now every time you click a grid cell, it is highlighted with a blue color.
Check out another example of using JavaScript in our sample GitHub project.