Skip to content

Commit 6c4afba

Browse files
committed
migrate to package:web and implement keyboard detection
1 parent 42ddef5 commit 6c4afba

File tree

2 files changed

+34
-12
lines changed

2 files changed

+34
-12
lines changed
Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
1-
import 'dart:html' as html show window, Navigator;
1+
import 'dart:async';
2+
import 'package:web/web.dart';
23
import 'package:flutter_keyboard_visibility_platform_interface/flutter_keyboard_visibility_platform_interface.dart';
34
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
45

56
/// The web implementation of the [FlutterKeyboardVisibilityPlatform] of the
67
/// FlutterKeyboardVisibility plugin.
7-
class FlutterKeyboardVisibilityPluginWeb
8-
extends FlutterKeyboardVisibilityPlatform {
8+
class FlutterKeyboardVisibilityPluginWeb extends FlutterKeyboardVisibilityPlatform {
99
/// Constructs a [FlutterKeyboardVisibilityPluginWeb].
10-
FlutterKeyboardVisibilityPluginWeb(html.Navigator navigator);
10+
FlutterKeyboardVisibilityPluginWeb(Navigator navigator);
11+
12+
static final _onChangeController = StreamController<bool>();
13+
static final _onChange = _onChangeController.stream.asBroadcastStream();
1114

1215
/// Factory method that initializes the FlutterKeyboardVisibility plugin
1316
/// platform with an instance of the plugin for the web.
1417
static void registerWith(Registrar registrar) {
15-
FlutterKeyboardVisibilityPlatform.instance =
16-
FlutterKeyboardVisibilityPluginWeb(html.window.navigator);
18+
FlutterKeyboardVisibilityPlatform.instance = FlutterKeyboardVisibilityPluginWeb(window.navigator);
19+
EventStreamProvider<Event>('resize').forTarget(window.visualViewport).listen((e) {
20+
final minKeyboardHeight = 200;
21+
22+
final screenHeight = window.screen.height;
23+
final viewportHeight = window.visualViewport?.height.toInt() ?? 0;
24+
final newState = (screenHeight - minKeyboardHeight) > viewportHeight;
25+
_updateValue(newState);
26+
});
27+
}
28+
29+
static bool get isVisible => _isVisible;
30+
static bool _isVisible = false;
31+
32+
static void _updateValue(bool newValue) {
33+
// Don't report the same value multiple times
34+
if (newValue == _isVisible) {
35+
return;
36+
}
37+
38+
_isVisible = newValue;
39+
_onChangeController.add(newValue);
1740
}
1841

1942
/// Emits changes to keyboard visibility from the platform. Web is not
2043
/// implemented yet so false is returned.
2144
@override
22-
Stream<bool> get onChange async* {
23-
yield false;
24-
}
45+
Stream<bool> get onChange => _onChange;
2546
}

flutter_keyboard_visibility_web/pubspec.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
name: flutter_keyboard_visibility_web
22
description: An implementation for the web platform of `flutter_keyboard_visibility'
3-
version: 2.0.0
3+
version: 2.0.1
44
homepage: https://github.com/MisterJimson/flutter_keyboard_visibility
55
repository: https://github.com/MisterJimson/flutter_keyboard_visibility
66

77
environment:
8-
sdk: '>=2.12.0 <4.0.0'
8+
sdk: ">=2.12.0 <4.0.0"
99
flutter: ">=1.20.0"
1010

1111
flutter:
@@ -17,6 +17,7 @@ flutter:
1717

1818
dependencies:
1919
flutter_keyboard_visibility_platform_interface: ^2.0.0
20+
web: ^0.5.0
2021
flutter_web_plugins:
2122
sdk: flutter
2223
flutter:
@@ -25,4 +26,4 @@ dependencies:
2526
dev_dependencies:
2627
pedantic: ^1.11.0
2728
flutter_test:
28-
sdk: flutter
29+
sdk: flutter

0 commit comments

Comments
 (0)