Skip to content

Commit 0d2c271

Browse files
seungsoo47bwikbs
authored andcommitted
[webview_flutter] Update webview to be focused (flutter-tizen#19)
* A webview has to act like a FocusNode. So, when it is clicked or released, a FocusCallback function should be called. Signed-off-by: Seungsoo Lee <[email protected]>
1 parent b02b245 commit 0d2c271

File tree

2 files changed

+28
-23
lines changed

2 files changed

+28
-23
lines changed

packages/webview_flutter/example/tizen/shared/res/input.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
</head>
55

6-
<body>
6+
<body style="background-color: blue">
77
<input id="ip1" type="text" ></input>
88
<button onclick="a()">Click</button>
99
<input id="ip2" type="text" ></input>

packages/webview_flutter/lib/webview_flutter_tizen.dart

+27-22
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,11 @@ import 'package:flutter/gestures.dart';
66
import 'package:flutter/services.dart';
77
import 'package:flutter/widgets.dart';
88
import 'package:flutter/semantics.dart';
9+
import 'package:flutter/rendering.dart';
910

1011
import 'package:webview_flutter/platform_interface.dart';
1112
import 'package:webview_flutter/src/webview_method_channel.dart';
1213

13-
import 'package:flutter/src/rendering/binding.dart';
14-
import 'package:flutter/src/rendering/box.dart';
15-
import 'package:flutter/src/rendering/layer.dart';
16-
import 'package:flutter/src/rendering/mouse_cursor.dart';
17-
import 'package:flutter/src/rendering/mouse_tracking.dart';
18-
import 'package:flutter/src/rendering/object.dart';
19-
2014
enum _TizenViewState {
2115
waitingForSize,
2216
creating,
@@ -110,7 +104,7 @@ class TizenViewController extends PlatformViewController {
110104
'viewType': _viewType,
111105
'width': _size.width,
112106
'height': _size.height,
113-
// 'direction': _layoutDirection,
107+
'direction': _layoutDirection == TextDirection.ltr ? 0 : 1,
114108
};
115109
if (_creationParams != null) {
116110
final ByteData paramsByteData =
@@ -151,6 +145,7 @@ class TizenViewController extends PlatformViewController {
151145

152146
set pointTransformer(PointTransformer transformer) {
153147
assert(transformer != null);
148+
// _motionEventConverter._pointTransformer = transformer;
154149
}
155150

156151
bool get isCreated => _state == _TizenViewState.created;
@@ -182,7 +177,7 @@ class TizenViewController extends PlatformViewController {
182177
await SystemChannels.platform_views
183178
.invokeMethod<void>('setDirection', <String, dynamic>{
184179
'id': viewId,
185-
// 'direction': layoutDirection,
180+
'direction': layoutDirection == TextDirection.ltr ? 0 : 1,
186181
});
187182
}
188183

@@ -218,13 +213,14 @@ class TizenViewController extends PlatformViewController {
218213
if (_state != _TizenViewState.created) {
219214
return Future<void>.value();
220215
}
221-
// print('clearFocus : $viewId');
216+
print('TizenViewController::clearFocus() : $viewId');
222217
return SystemChannels.platform_views
223218
.invokeMethod<void>('clearFocus', viewId);
224219
}
225220

226221
@override
227222
Future<void> dispose() async {
223+
print('TizenViewController::dispose()');
228224
if (_state == _TizenViewState.creating || _state == _TizenViewState.created)
229225
await _sendDisposeMessage();
230226
_platformViewCreatedCallbacks.clear();
@@ -233,8 +229,8 @@ class TizenViewController extends PlatformViewController {
233229
}
234230
}
235231

236-
class TizenWebView_ extends StatefulWidget {
237-
const TizenWebView_({
232+
class TizenView extends StatefulWidget {
233+
const TizenView({
238234
Key key,
239235
@required this.viewType,
240236
this.onPlatformViewCreated,
@@ -257,7 +253,7 @@ class TizenWebView_ extends StatefulWidget {
257253
final MessageCodec<dynamic> creationParamsCodec;
258254

259255
@override
260-
State<TizenWebView_> createState() => _TizenWebViewState();
256+
State<TizenView> createState() => _TizenWebViewState();
261257
}
262258

263259
class PlatformViewsServiceTizen {
@@ -268,9 +264,11 @@ class PlatformViewsServiceTizen {
268264
PlatformViewsServiceTizen._();
269265

270266
Future<void> _onMethodCall(MethodCall call) {
267+
print('TizenView::_onMethodCall() - ${call.method}');
271268
switch (call.method) {
272269
case 'viewFocused':
273270
final int id = call.arguments as int;
271+
print('viewFocused: id - $id');
274272
if (_focusCallbacks.containsKey(id)) {
275273
if (_focusCallbacks[id] != null) {
276274
_focusCallbacks[id]();
@@ -301,6 +299,9 @@ class PlatformViewsServiceTizen {
301299
assert(layoutDirection != null);
302300
assert(creationParams == null || creationParamsCodec != null);
303301

302+
print(
303+
'PlatformViewsServiceTizen::initTizenView [id:$id] [onFocus:$onFocus]');
304+
304305
final TizenViewController controller = TizenViewController._(
305306
viewId: id,
306307
viewType: viewType,
@@ -444,12 +445,12 @@ class RenderTizenView extends RenderBox with _PlatformViewGestureMixin {
444445
_viewController.pointTransformer = (Offset offset) => globalToLocal(offset);
445446
updateGestureRecognizers(gestureRecognizers);
446447
_viewController.addOnPlatformViewCreatedListener(_onPlatformViewCreated);
447-
// this.hitTestBehavior = hitTestBehavior;
448+
this.hitTestBehavior = hitTestBehavior;
448449
}
449450

450451
_PlatformViewState _state = _PlatformViewState.uninitialized;
451452

452-
get viewcontroller => _viewController;
453+
TizenViewController get viewcontroller => _viewController;
453454
TizenViewController _viewController;
454455

455456
set viewController(TizenViewController viewController) {
@@ -570,12 +571,12 @@ class _TizenPlatformTextureView extends LeafRenderObjectWidget {
570571
@override
571572
void updateRenderObject(BuildContext context, RenderTizenView renderObject) {
572573
renderObject.viewController = controller;
573-
// renderObject.hitTestBehavior = hitTestBehavior;
574+
renderObject.hitTestBehavior = hitTestBehavior;
574575
renderObject.updateGestureRecognizers(gestureRecognizers);
575576
}
576577
}
577578

578-
class _TizenWebViewState extends State<TizenWebView_> {
579+
class _TizenWebViewState extends State<TizenView> {
579580
int _id;
580581
TizenViewController _controller;
581582
TextDirection _layoutDirection;
@@ -611,6 +612,7 @@ class _TizenWebViewState extends State<TizenWebView_> {
611612

612613
@override
613614
void didChangeDependencies() {
615+
print('_TizenWebViewState::didChangeDependencies()');
614616
super.didChangeDependencies();
615617
final TextDirection newLayoutDirection = _findLayoutDirection();
616618
final bool didChangeLayoutDirection =
@@ -624,8 +626,8 @@ class _TizenWebViewState extends State<TizenWebView_> {
624626
}
625627

626628
@override
627-
void didUpdateWidget(TizenWebView_ oldWidget) {
628-
// print('webview: didUpdateWidget()');
629+
void didUpdateWidget(TizenView oldWidget) {
630+
print('_TizenWebViewState::didUpdateWidget()');
629631
super.didUpdateWidget(oldWidget);
630632

631633
final TextDirection newLayoutDirection = _findLayoutDirection();
@@ -652,6 +654,7 @@ class _TizenWebViewState extends State<TizenWebView_> {
652654

653655
@override
654656
void dispose() {
657+
print('_TizenWebViewState::dispose()');
655658
_controller.dispose();
656659
super.dispose();
657660
}
@@ -665,6 +668,7 @@ class _TizenWebViewState extends State<TizenWebView_> {
665668
creationParams: widget.creationParams,
666669
creationParamsCodec: widget.creationParamsCodec,
667670
onFocus: () {
671+
print('_TizenWebViewState::_createNewTizenWebView() - onFocus()');
668672
_focusNode.requestFocus();
669673
},
670674
);
@@ -675,9 +679,11 @@ class _TizenWebViewState extends State<TizenWebView_> {
675679
}
676680

677681
void _onFocusChange(bool isFocused) {
682+
print('_TizenWebViewState::_onFocusChange(isFocused:$isFocused)');
678683
if (!_controller.isCreated) {
679684
return;
680685
}
686+
681687
if (!isFocused) {
682688
_controller.clearFocus().catchError((dynamic e) {
683689
if (e is MissingPluginException) {
@@ -686,7 +692,6 @@ class _TizenWebViewState extends State<TizenWebView_> {
686692
});
687693
return;
688694
}
689-
// print('_onFocusChange - viewId : $_id');
690695
SystemChannels.textInput
691696
.invokeMethod<void>(
692697
'TextInput.setPlatformViewClient',
@@ -725,7 +730,7 @@ class TizenWebView implements WebViewPlatform {
725730
return GestureDetector(
726731
onLongPress: () {},
727732
excludeFromSemantics: true,
728-
child: TizenWebView_(
733+
child: TizenView(
729734
viewType: 'plugins.flutter.io/webview',
730735
onPlatformViewCreated: (int id) {
731736
if (onWebViewPlatformCreated == null) {
@@ -769,7 +774,7 @@ mixin _PlatformViewGestureMixin on RenderBox implements MouseTrackerAnnotation {
769774
if (value != _hitTestBehavior) {
770775
_hitTestBehavior = value;
771776
if (owner != null) {
772-
//RendererBinding.instance.mouseTracker.schedulePostFrameCheck();
777+
markNeedsPaint();
773778
}
774779
}
775780
}

0 commit comments

Comments
 (0)