Skip to content

Commit 0da7f8f

Browse files
author
Tiago Ribeiro
committed
Updated project to meet changed requirements by Futter, fixes #21 and #23
1 parent 5fe2b37 commit 0da7f8f

File tree

11 files changed

+121
-96
lines changed

11 files changed

+121
-96
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 1.0.7
2+
3+
- Updated project to meet changed requirements by Flutter
4+
- Updated third-party dependencies
5+
- Fixes issue #21, #23
6+
17
## 1.0.6
28

39
- Fixed issue in 1.0.5 on iOS that caused xcode build to fail
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
connection.project.dir=../example/android
1+
connection.project.dir=
22
eclipse.preferences.version=1

android/src/main/java/pt/tribeiro/flutter_plugin_pdf_viewer/FlutterPluginPdfViewerPlugin.java

+43-16
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,18 @@
1818
import io.flutter.plugin.common.PluginRegistry.Registrar;
1919
import android.graphics.ColorMatrix;
2020
import android.graphics.ColorMatrixColorFilter;
21+
import android.os.HandlerThread;
22+
import android.os.Process;
23+
import android.os.Handler;
2124

2225
/**
2326
* FlutterPluginPdfViewerPlugin
2427
*/
2528
public class FlutterPluginPdfViewerPlugin implements MethodCallHandler {
2629
private static Registrar instance;
30+
private HandlerThread handlerThread;
31+
private Handler backgroundHandler;
32+
private final Object pluginLocker = new Object();
2733

2834
/**
2935
* Plugin registration.
@@ -36,23 +42,44 @@ public static void registerWith(Registrar registrar) {
3642

3743
@Override
3844
public void onMethodCall(final MethodCall call, final Result result) {
39-
Thread thread = new Thread(new Runnable() {
40-
@Override
41-
public void run() {
42-
switch (call.method) {
43-
case "getNumberOfPages":
44-
result.success(getNumberOfPages((String) call.argument("filePath")));
45-
break;
46-
case "getPage":
47-
result.success(getPage((String) call.argument("filePath"), (int) call.argument("pageNumber")));
48-
break;
49-
default:
50-
result.notImplemented();
51-
break;
52-
}
45+
synchronized(pluginLocker){
46+
if (backgroundHandler == null) {
47+
handlerThread = new HandlerThread("flutterPdfViewer", Process.THREAD_PRIORITY_BACKGROUND);
48+
handlerThread.start();
49+
backgroundHandler = new Handler(handlerThread.getLooper());
5350
}
54-
});
55-
thread.start();
51+
}
52+
final Handler mainThreadHandler = new Handler();
53+
backgroundHandler.post(
54+
new Runnable() {
55+
@Override
56+
public void run() {
57+
switch (call.method) {
58+
case "getNumberOfPages":
59+
final String numResult = getNumberOfPages((String) call.argument("filePath"));
60+
mainThreadHandler.post(new Runnable(){
61+
@Override
62+
public void run() {
63+
result.success(numResult);
64+
}
65+
});
66+
break;
67+
case "getPage":
68+
final String pageResult = getPage((String) call.argument("filePath"), (int) call.argument("pageNumber"));
69+
mainThreadHandler.post(new Runnable(){
70+
@Override
71+
public void run() {
72+
result.success(pageResult);
73+
}
74+
});
75+
break;
76+
default:
77+
result.notImplemented();
78+
break;
79+
}
80+
}
81+
}
82+
);
5683
}
5784

5885
private String getNumberOfPages(String filePath) {
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,13 @@
1+
arguments=
2+
auto.sync=false
3+
build.scans.enabled=false
4+
connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(5.4))
15
connection.project.dir=
26
eclipse.preferences.version=1
7+
gradle.user.home=
8+
java.home=
9+
jvm.arguments=
10+
offline.mode=false
11+
override.workspace.settings=true
12+
show.console.view=true
13+
show.executions.view=true

example/lib/main.dart

+1-3
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,7 @@ class _MyAppState extends State<MyApp> {
7272
body: Center(
7373
child: _isLoading
7474
? Center(child: CircularProgressIndicator())
75-
: PDFViewer(
76-
document: document,
77-
tooltip: PDFViewerTooltip(first: "Batatas"))),
75+
: PDFViewer(document: document)),
7876
),
7977
);
8078
}

example/pubspec.lock

+17-31
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# Generated by pub
2-
# See https://www.dartlang.org/tools/pub/glossary#lockfile
2+
# See https://dart.dev/tools/pub/glossary#lockfile
33
packages:
44
async:
55
dependency: transitive
66
description:
77
name: async
88
url: "https://pub.dartlang.org"
99
source: hosted
10-
version: "2.0.8"
10+
version: "2.2.0"
1111
boolean_selector:
1212
dependency: transitive
1313
description:
@@ -61,28 +61,28 @@ packages:
6161
name: flutter_advanced_networkimage
6262
url: "https://pub.dartlang.org"
6363
source: hosted
64-
version: "0.4.15"
64+
version: "0.5.0"
6565
flutter_cache_manager:
6666
dependency: transitive
6767
description:
6868
name: flutter_cache_manager
6969
url: "https://pub.dartlang.org"
7070
source: hosted
71-
version: "0.3.2"
71+
version: "1.0.0"
7272
flutter_plugin_pdf_viewer:
7373
dependency: "direct dev"
7474
description:
7575
path: ".."
7676
relative: true
7777
source: path
78-
version: "1.0.6"
78+
version: "1.0.7"
7979
flutter_svg:
8080
dependency: transitive
8181
description:
8282
name: flutter_svg
8383
url: "https://pub.dartlang.org"
8484
source: hosted
85-
version: "0.12.4"
85+
version: "0.13.1"
8686
flutter_test:
8787
dependency: "direct dev"
8888
description: flutter
@@ -102,34 +102,20 @@ packages:
102102
url: "https://pub.dartlang.org"
103103
source: hosted
104104
version: "3.1.3"
105-
infinite_listview:
106-
dependency: transitive
107-
description:
108-
name: infinite_listview
109-
url: "https://pub.dartlang.org"
110-
source: hosted
111-
version: "1.0.0"
112105
matcher:
113106
dependency: transitive
114107
description:
115108
name: matcher
116109
url: "https://pub.dartlang.org"
117110
source: hosted
118-
version: "0.12.3+1"
111+
version: "0.12.5"
119112
meta:
120113
dependency: transitive
121114
description:
122115
name: meta
123116
url: "https://pub.dartlang.org"
124117
source: hosted
125118
version: "1.1.6"
126-
numberpicker:
127-
dependency: transitive
128-
description:
129-
name: numberpicker
130-
url: "https://pub.dartlang.org"
131-
source: hosted
132-
version: "1.0.0"
133119
path:
134120
dependency: transitive
135121
description:
@@ -143,28 +129,28 @@ packages:
143129
name: path_drawing
144130
url: "https://pub.dartlang.org"
145131
source: hosted
146-
version: "0.4.0"
132+
version: "0.4.1"
147133
path_parsing:
148134
dependency: transitive
149135
description:
150136
name: path_parsing
151137
url: "https://pub.dartlang.org"
152138
source: hosted
153-
version: "0.1.3"
139+
version: "0.1.4"
154140
path_provider:
155141
dependency: transitive
156142
description:
157143
name: path_provider
158144
url: "https://pub.dartlang.org"
159145
source: hosted
160-
version: "0.5.0+1"
146+
version: "1.1.2"
161147
pedantic:
162148
dependency: transitive
163149
description:
164150
name: pedantic
165151
url: "https://pub.dartlang.org"
166152
source: hosted
167-
version: "1.4.0"
153+
version: "1.7.0"
168154
petitparser:
169155
dependency: transitive
170156
description:
@@ -178,7 +164,7 @@ packages:
178164
name: quiver
179165
url: "https://pub.dartlang.org"
180166
source: hosted
181-
version: "2.0.1"
167+
version: "2.0.3"
182168
rxdart:
183169
dependency: transitive
184170
description:
@@ -197,7 +183,7 @@ packages:
197183
name: source_span
198184
url: "https://pub.dartlang.org"
199185
source: hosted
200-
version: "1.5.4"
186+
version: "1.5.5"
201187
sqflite:
202188
dependency: transitive
203189
description:
@@ -218,7 +204,7 @@ packages:
218204
name: stream_channel
219205
url: "https://pub.dartlang.org"
220206
source: hosted
221-
version: "1.6.8"
207+
version: "2.0.0"
222208
string_scanner:
223209
dependency: transitive
224210
description:
@@ -246,7 +232,7 @@ packages:
246232
name: test_api
247233
url: "https://pub.dartlang.org"
248234
source: hosted
249-
version: "0.2.2"
235+
version: "0.2.5"
250236
typed_data:
251237
dependency: transitive
252238
description:
@@ -276,5 +262,5 @@ packages:
276262
source: hosted
277263
version: "3.3.1"
278264
sdks:
279-
dart: ">=2.1.0 <3.0.0"
280-
flutter: ">=1.2.1 <2.0.0"
265+
dart: ">=2.2.2 <3.0.0"
266+
flutter: ">=1.6.0 <2.0.0"

lib/src/document.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,16 @@ class PDFDocument {
8282
assert(page > 0);
8383
var data = await _channel
8484
.invokeMethod('getPage', {'filePath': _filePath, 'pageNumber': page});
85-
return new PDFPage(data);
85+
return new PDFPage(data, page);
8686
}
8787

8888
// Stream all pages
8989
Observable<PDFPage> getAll() {
9090
return Future.forEach<PDFPage>(List(count), (i) async {
91+
print(i);
9192
final data = await _channel
9293
.invokeMethod('getPage', {'filePath': _filePath, 'pageNumber': i});
93-
return data;
94+
return new PDFPage(data, 1);
9495
}).asStream();
9596
}
9697
}

lib/src/page.dart

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import 'dart:io';
2+
import 'dart:ui';
23
import 'package:flutter/widgets.dart';
4+
import 'package:flutter/painting.dart';
35
import 'package:flutter_advanced_networkimage/zoomable.dart';
46

57
class PDFPage extends StatefulWidget {
68
final String imgPath;
7-
PDFPage(this.imgPath);
9+
final int num;
10+
PDFPage(this.imgPath, this.num);
811

912
@override
1013
_PDFPageState createState() => _PDFPageState();
@@ -30,9 +33,9 @@ class _PDFPageState extends State<PDFPage> {
3033
_repaint() {
3134
provider = FileImage(File(widget.imgPath));
3235
final resolver = provider.resolve(createLocalImageConfiguration(context));
33-
resolver.addListener((imgInfo, alreadyPainted) {
36+
resolver.addListener(ImageStreamListener((imgInfo, alreadyPainted) {
3437
if (!alreadyPainted) setState(() {});
35-
});
38+
}));
3639
}
3740

3841
@override

lib/src/viewer.dart

+6-5
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,15 @@ class _PDFViewerState extends State<PDFViewer> {
3535
int _pageNumber = 1;
3636
int _oldPage = 0;
3737
PDFPage _page;
38+
List<PDFPage> _pages = List();
3839

3940
@override
4041
void didChangeDependencies() {
4142
super.didChangeDependencies();
4243
_oldPage = 0;
4344
_pageNumber = 1;
4445
_isLoading = true;
46+
_pages.clear();
4547
_loadPage();
4648
}
4749

@@ -51,20 +53,19 @@ class _PDFViewerState extends State<PDFViewer> {
5153
_oldPage = 0;
5254
_pageNumber = 1;
5355
_isLoading = true;
56+
_pages.clear();
5457
_loadPage();
5558
}
5659

5760
_loadPage() async {
58-
setState(() {
59-
_isLoading = true;
60-
});
61+
setState(() => _isLoading = true);
6162
if (_oldPage == 0) {
6263
_page = await widget.document.get(page: _pageNumber);
63-
setState(() => _isLoading = false);
6464
} else if (_oldPage != _pageNumber) {
6565
_oldPage = _pageNumber;
66-
setState(() => _isLoading = true);
6766
_page = await widget.document.get(page: _pageNumber);
67+
}
68+
if (this.mounted) {
6869
setState(() => _isLoading = false);
6970
}
7071
}

0 commit comments

Comments
 (0)