Skip to content

Commit

Permalink
migrate to package:web and implement keyboard detection
Browse files Browse the repository at this point in the history
  • Loading branch information
raldhafiri committed Apr 9, 2024
1 parent 42ddef5 commit ad25e70
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -1,25 +1,46 @@
import 'dart:html' as html show window, Navigator;
import 'dart:async';
import 'package:web/web.dart' as html;
import 'package:flutter_keyboard_visibility_platform_interface/flutter_keyboard_visibility_platform_interface.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';

/// The web implementation of the [FlutterKeyboardVisibilityPlatform] of the
/// FlutterKeyboardVisibility plugin.
class FlutterKeyboardVisibilityPluginWeb
extends FlutterKeyboardVisibilityPlatform {
class FlutterKeyboardVisibilityPluginWeb extends FlutterKeyboardVisibilityPlatform {
/// Constructs a [FlutterKeyboardVisibilityPluginWeb].
FlutterKeyboardVisibilityPluginWeb(html.Navigator navigator);

static final _onChangeController = StreamController<bool>();
static final _onChange = _onChangeController.stream.asBroadcastStream();

/// Factory method that initializes the FlutterKeyboardVisibility plugin
/// platform with an instance of the plugin for the web.
static void registerWith(Registrar registrar) {
FlutterKeyboardVisibilityPlatform.instance =
FlutterKeyboardVisibilityPluginWeb(html.window.navigator);
FlutterKeyboardVisibilityPlatform.instance = FlutterKeyboardVisibilityPluginWeb(html.window.navigator);
html.EventStreamProvider<html.Event>('resize').forTarget(html.window.visualViewport).listen((e) {
final minKeyboardHeight = 200;

final screenHeight = html.window.screen.height;
final viewportHeight = html.window.visualViewport?.height.toInt() ?? 0;
final newState = (screenHeight - minKeyboardHeight) > viewportHeight;
_updateValue(newState);
});
}

static bool get isVisible => _isVisible;
static bool _isVisible = false;

static void _updateValue(bool newValue) {
// Don't report the same value multiple times
if (newValue == _isVisible) {
return;
}

_isVisible = newValue;
_onChangeController.add(newValue);
}

/// Emits changes to keyboard visibility from the platform. Web is not
/// implemented yet so false is returned.
@override
Stream<bool> get onChange async* {
yield false;
}
Stream<bool> get onChange => _onChange;
}
7 changes: 4 additions & 3 deletions flutter_keyboard_visibility_web/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
name: flutter_keyboard_visibility_web
description: An implementation for the web platform of `flutter_keyboard_visibility'
version: 2.0.0
version: 2.0.1
homepage: https://github.com/MisterJimson/flutter_keyboard_visibility
repository: https://github.com/MisterJimson/flutter_keyboard_visibility

environment:
sdk: '>=2.12.0 <4.0.0'
sdk: ">=2.12.0 <4.0.0"
flutter: ">=1.20.0"

flutter:
Expand All @@ -17,6 +17,7 @@ flutter:

dependencies:
flutter_keyboard_visibility_platform_interface: ^2.0.0
web: ^0.5.0
flutter_web_plugins:
sdk: flutter
flutter:
Expand All @@ -25,4 +26,4 @@ dependencies:
dev_dependencies:
pedantic: ^1.11.0
flutter_test:
sdk: flutter
sdk: flutter

0 comments on commit ad25e70

Please sign in to comment.