Skip to content

Commit 606235d

Browse files
committed
v2.5.0
1 parent e7ff142 commit 606235d

File tree

5 files changed

+88
-44
lines changed

5 files changed

+88
-44
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## 2.5.0
2+
3+
**2023-08-31**
4+
5+
- Upgrade webview_flutter to 4.2.4
6+
- Upgrade Echarts to 5.4.3
7+
- Upgrade SDK to >=2.12.0 <4.0.0
8+
19
## 2.4.0
210

311
**2022-08-13**

example/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ subprojects {
2626
project.evaluationDependsOn(':app')
2727
}
2828

29-
task clean(type: Delete) {
29+
tasks.register("clean", Delete) {
3030
delete rootProject.buildDir
3131
}

lib/echarts_script.dart

Lines changed: 46 additions & 2 deletions
Large diffs are not rendered by default.

lib/flutter_echarts.dart

Lines changed: 30 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
library flutter_echarts;
22

3+
import 'dart:convert';
4+
35
import 'package:flutter/widgets.dart';
46
import 'package:flutter/gestures.dart';
57
import 'package:flutter/foundation.dart';
6-
78
import 'package:webview_flutter/webview_flutter.dart';
89

910
import 'echarts_script.dart' show echartsScript;
1011

1112
/// <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0, target-densitydpi=device-dpi" /><style type="text/css">body,html,#chart{height: 100%;width: 100%;margin: 0px;}div {-webkit-tap-highlight-color:rgba(255,255,255,0);}</style></head><body><div id="chart" /></body></html>
1213
/// 'data:text/html;base64,' + base64Encode(const Utf8Encoder().convert( /* STRING ABOVE */ ))
1314
const htmlBase64 =
14-
'data:text/html;base64,PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgbWluaW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCwgdGFyZ2V0LWRlbnNpdHlkcGk9ZGV2aWNlLWRwaSIgLz48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmJvZHksaHRtbCwjY2hhcnR7aGVpZ2h0OiAxMDAlO3dpZHRoOiAxMDAlO21hcmdpbjogMHB4O31kaXYgey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDApO308L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGlkPSJjaGFydCIgLz48L2JvZHk+PC9odG1sPg==';
15+
'PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgbWluaW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9MCwgdGFyZ2V0LWRlbnNpdHlkcGk9ZGV2aWNlLWRwaSIgLz48c3R5bGUgdHlwZT0idGV4dC9jc3MiPmJvZHksaHRtbCwjY2hhcnR7aGVpZ2h0OiAxMDAlO3dpZHRoOiAxMDAlO21hcmdpbjogMHB4O31kaXYgey13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDApO308L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGlkPSJjaGFydCIgLz48L2JvZHk+PC9odG1sPg==';
1516

1617
class Echarts extends StatefulWidget {
1718
Echarts(
@@ -65,6 +66,26 @@ class _EchartsState extends State<Echarts> {
6566
super.initState();
6667
_currentOption = widget.option;
6768

69+
_controller = WebViewController()
70+
..setBackgroundColor(Color(0x00000000))
71+
..loadHtmlString(utf8.fuse(base64).decode(htmlBase64))
72+
..setJavaScriptMode(JavaScriptMode.unrestricted)
73+
..setNavigationDelegate(
74+
NavigationDelegate(
75+
onPageFinished: (url) => init(),
76+
onWebResourceError: (e) {
77+
if (widget.onWebResourceError != null) {
78+
widget.onWebResourceError!(_controller!, Exception(e));
79+
}
80+
},
81+
),
82+
)
83+
..addJavaScriptChannel('Messager', onMessageReceived: (JavaScriptMessage javascriptMessage) {
84+
if (widget.onMessage != null) {
85+
widget.onMessage!(javascriptMessage.message);
86+
}
87+
});
88+
6889
if (widget.reloadAfterInit) {
6990
new Future.delayed(const Duration(milliseconds: 100), () {
7091
_controller?.reload();
@@ -73,15 +94,9 @@ class _EchartsState extends State<Echarts> {
7394
}
7495

7596
void init() async {
76-
final extensionsStr = this.widget.extensions.length > 0
77-
? this
78-
.widget
79-
.extensions
80-
.reduce((value, element) => value + '\n' + element)
81-
: '';
82-
final themeStr =
83-
this.widget.theme != null ? '\'${this.widget.theme}\'' : 'null';
84-
await _controller?.runJavascript('''
97+
final extensionsStr = this.widget.extensions.length > 0 ? this.widget.extensions.reduce((value, element) => value + '\n' + element) : '';
98+
final themeStr = this.widget.theme != null ? '\'${this.widget.theme}\'' : 'null';
99+
await _controller?.runJavaScript('''
85100
$echartsScript
86101
$extensionsStr
87102
var chart = echarts.init(document.getElementById('chart'), $themeStr);
@@ -95,8 +110,7 @@ class _EchartsState extends State<Echarts> {
95110

96111
Set<Factory<OneSequenceGestureRecognizer>> getGestureRecognizers() {
97112
Set<Factory<OneSequenceGestureRecognizer>> set = Set();
98-
if (this.widget.captureAllGestures ||
99-
this.widget.captureHorizontalGestures) {
113+
if (this.widget.captureAllGestures || this.widget.captureHorizontalGestures) {
100114
set.add(Factory<HorizontalDragGestureRecognizer>(() {
101115
return HorizontalDragGestureRecognizer()
102116
..onStart = (DragStartDetails details) {}
@@ -122,7 +136,7 @@ class _EchartsState extends State<Echarts> {
122136
void update(String preOption) async {
123137
_currentOption = widget.option;
124138
if (_currentOption != preOption) {
125-
await _controller?.runJavascript('''
139+
await _controller?.runJavaScript('''
126140
try {
127141
chart.setOption($_currentOption, true);
128142
} catch(e) {
@@ -145,30 +159,8 @@ class _EchartsState extends State<Echarts> {
145159

146160
@override
147161
Widget build(BuildContext context) {
148-
return WebView(
149-
backgroundColor: Color(0x00000000),
150-
initialUrl: htmlBase64,
151-
javascriptMode: JavascriptMode.unrestricted,
152-
onWebViewCreated: (WebViewController webViewController) {
153-
_controller = webViewController;
154-
},
155-
onPageFinished: (String url) {
156-
init();
157-
},
158-
onWebResourceError: (e) {
159-
if (widget.onWebResourceError != null) {
160-
widget.onWebResourceError!(_controller!, Exception(e));
161-
}
162-
},
163-
javascriptChannels: <JavascriptChannel>[
164-
JavascriptChannel(
165-
name: 'Messager',
166-
onMessageReceived: (JavascriptMessage javascriptMessage) {
167-
if (widget.onMessage != null) {
168-
widget.onMessage!(javascriptMessage.message);
169-
}
170-
}),
171-
].toSet(),
162+
return WebViewWidget(
163+
controller: _controller!,
172164
gestureRecognizers: getGestureRecognizers());
173165
}
174166
}

pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
name: flutter_echarts
22
description: A data visualization charts library, based on Apache ECharts, able to build advanced charts like WebGL 3D, GIS map, etc.
3-
version: 2.4.0
3+
version: 2.5.0
44
homepage: https://github.com/entronad/flutter_echarts
55

66
environment:
7-
sdk: ">=2.12.0 <3.0.0"
7+
sdk: ">=2.12.0 <4.0.0"
88

99
dependencies:
1010
flutter:
1111
sdk: flutter
12-
webview_flutter: ^3.0.4
12+
webview_flutter: ^4.2.4
1313

1414
dev_dependencies:
1515
flutter_test:

0 commit comments

Comments
 (0)