From 9f33b77b6ee7297e62e561e40f6b1713b2f3928f Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 3 Feb 2026 14:10:34 +0900 Subject: [PATCH] Introduce flutter_keyboard_visibility plugin - Add flutter_keyboard_visibility_tizen plugin implementation - Implement keyboard visibility detection using Tizen's inputpanel event channel --- .github/recipe.yaml | 1 + README.md | 1 + .../flutter_keyboard_visibility/.gitignore | 75 ++++++++++++++ .../flutter_keyboard_visibility/CHANGELOG.md | 3 + packages/flutter_keyboard_visibility/LICENSE | 25 +++++ .../flutter_keyboard_visibility/README.md | 14 +++ .../example/.gitignore | 46 +++++++++ .../example/README.md | 7 ++ .../example/analysis_options.yaml | 1 + .../flutter_keyboard_visibility_test.dart | 9 ++ .../example/lib/keyboard_dismiss_demo.dart | 95 ++++++++++++++++++ .../example/lib/main.dart | 75 ++++++++++++++ .../example/lib/provider_demo.dart | 46 +++++++++ .../example/pubspec.yaml | 28 ++++++ .../example/test_driver/integration_test.dart | 3 + .../example/tizen/.gitignore | 12 +++ .../example/tizen/App.cs | 19 ++++ .../example/tizen/Runner.csproj | 19 ++++ .../example/tizen/shared/res/ic_launcher.png | Bin 0 -> 1443 bytes .../example/tizen/tizen-manifest.xml | 10 ++ .../flutter_keyboard_visibility_tizen.dart | 5 + .../flutter_keyboard_visibility_tizen.dart | 34 +++++++ .../flutter_keyboard_visibility/pubspec.yaml | 20 ++++ 23 files changed, 548 insertions(+) create mode 100644 packages/flutter_keyboard_visibility/.gitignore create mode 100644 packages/flutter_keyboard_visibility/CHANGELOG.md create mode 100644 packages/flutter_keyboard_visibility/LICENSE create mode 100644 packages/flutter_keyboard_visibility/README.md create mode 100644 packages/flutter_keyboard_visibility/example/.gitignore create mode 100644 packages/flutter_keyboard_visibility/example/README.md create mode 100644 packages/flutter_keyboard_visibility/example/analysis_options.yaml create mode 100644 packages/flutter_keyboard_visibility/example/integration_test/flutter_keyboard_visibility_test.dart create mode 100644 packages/flutter_keyboard_visibility/example/lib/keyboard_dismiss_demo.dart create mode 100644 packages/flutter_keyboard_visibility/example/lib/main.dart create mode 100644 packages/flutter_keyboard_visibility/example/lib/provider_demo.dart create mode 100644 packages/flutter_keyboard_visibility/example/pubspec.yaml create mode 100644 packages/flutter_keyboard_visibility/example/test_driver/integration_test.dart create mode 100644 packages/flutter_keyboard_visibility/example/tizen/.gitignore create mode 100644 packages/flutter_keyboard_visibility/example/tizen/App.cs create mode 100644 packages/flutter_keyboard_visibility/example/tizen/Runner.csproj create mode 100644 packages/flutter_keyboard_visibility/example/tizen/shared/res/ic_launcher.png create mode 100644 packages/flutter_keyboard_visibility/example/tizen/tizen-manifest.xml create mode 100644 packages/flutter_keyboard_visibility/lib/flutter_keyboard_visibility_tizen.dart create mode 100644 packages/flutter_keyboard_visibility/lib/src/flutter_keyboard_visibility_tizen.dart create mode 100644 packages/flutter_keyboard_visibility/pubspec.yaml diff --git a/.github/recipe.yaml b/.github/recipe.yaml index 681deab2b..3d13ded47 100644 --- a/.github/recipe.yaml +++ b/.github/recipe.yaml @@ -25,6 +25,7 @@ plugins: # No tests. google_sign_in: [] firebase_core: [] + flutter_keyboard_visibility: [] tizen_log: [] tizen_notification: [] diff --git a/README.md b/README.md index 7462e3a35..43e26c96f 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ The _"non-endorsed"_ status means that the plugin is not endorsed by the origina | [**device_info_plus_tizen**](packages/device_info_plus) | [device_info_plus](https://pub.dev/packages/device_info_plus) (1st-party) | [![pub package](https://img.shields.io/pub/v/device_info_plus_tizen.svg)](https://pub.dev/packages/device_info_plus_tizen) | No | | [**firebase_core_tizen**](packages/firebase_core) | [firebase_core](https://pub.dev/packages/firebase_core) | [![pub package](https://img.shields.io/pub/v/firebase_core_tizen.svg)](https://pub.dev/packages/firebase_core_tizen) | No | | [**flutter_secure_storage_tizen**](packages/flutter_secure_storage) | [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) (3rd-party) | [![pub package](https://img.shields.io/pub/v/flutter_secure_storage_tizen.svg)](https://pub.dev/packages/flutter_secure_storage_tizen) | No | +| [**flutter_keyboard_visibility_tizen**](packages/flutter_keyboard_visibility) | [flutter_keyboard_visibility](https://pub.dev/packages/flutter_keyboard_visibility) (3rd-party) | [![pub package](https://img.shields.io/pub/v/flutter_keyboard_visibility_tizen.svg)](https://pub.dev/packages/flutter_keyboard_visibility_tizen) | No | | [**flutter_tts_tizen**](packages/flutter_tts) | [flutter_tts](https://pub.dev/packages/flutter_tts) (3rd-party) | [![pub package](https://img.shields.io/pub/v/flutter_tts_tizen.svg)](https://pub.dev/packages/flutter_tts_tizen) | No | | [**flutter_webrtc_tizen**](packages/flutter_webrtc) | [flutter_webrtc](https://pub.dev/packages/flutter_webrtc) (3rd-party) | [![pub package](https://img.shields.io/pub/v/flutter_webrtc_tizen.svg)](https://pub.dev/packages/flutter_webrtc_tizen) | No | | [**geolocator_tizen**](packages/geolocator) | [geolocator](https://pub.dev/packages/geolocator) (3rd-party) | [![pub package](https://img.shields.io/pub/v/geolocator_tizen.svg)](https://pub.dev/packages/geolocator_tizen) | No | diff --git a/packages/flutter_keyboard_visibility/.gitignore b/packages/flutter_keyboard_visibility/.gitignore new file mode 100644 index 000000000..a247422ef --- /dev/null +++ b/packages/flutter_keyboard_visibility/.gitignore @@ -0,0 +1,75 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +build/ + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java + +# iOS/XCode related +**/ios/**/*.mode1v3 +**/ios/**/*.mode2v3 +**/ios/**/*.moved-aside +**/ios/**/*.pbxuser +**/ios/**/*.perspectivev3 +**/ios/**/*sync/ +**/ios/**/.sconsign.dblite +**/ios/**/.tags* +**/ios/**/.vagrant/ +**/ios/**/DerivedData/ +**/ios/**/Icon? +**/ios/**/Pods/ +**/ios/**/.symlinks/ +**/ios/**/profile +**/ios/**/xcuserdata +**/ios/.generated/ +**/ios/Flutter/App.framework +**/ios/Flutter/Flutter.framework +**/ios/Flutter/Flutter.podspec +**/ios/Flutter/Generated.xcconfig +**/ios/Flutter/ephemeral +**/ios/Flutter/app.flx +**/ios/Flutter/app.zip +**/ios/Flutter/flutter_assets/ +**/ios/Flutter/flutter_export_environment.sh +**/ios/ServiceDefinitions.json +**/ios/Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!**/ios/**/default.mode1v3 +!**/ios/**/default.mode2v3 +!**/ios/**/default.pbxuser +!**/ios/**/default.perspectivev3 diff --git a/packages/flutter_keyboard_visibility/CHANGELOG.md b/packages/flutter_keyboard_visibility/CHANGELOG.md new file mode 100644 index 000000000..607323422 --- /dev/null +++ b/packages/flutter_keyboard_visibility/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.1.0 + +* Initial release. diff --git a/packages/flutter_keyboard_visibility/LICENSE b/packages/flutter_keyboard_visibility/LICENSE new file mode 100644 index 000000000..9b10b19e9 --- /dev/null +++ b/packages/flutter_keyboard_visibility/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2025 Samsung Electronics Co., Ltd. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of the copyright holder nor the names of the + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/flutter_keyboard_visibility/README.md b/packages/flutter_keyboard_visibility/README.md new file mode 100644 index 000000000..e0447d975 --- /dev/null +++ b/packages/flutter_keyboard_visibility/README.md @@ -0,0 +1,14 @@ +# flutter_keyboard_visibility_tizen [![pub package](https://img.shields.io/pub/v/flutter_keyboard_visibility_tizen.svg)](https://pub.dev/packages/flutter_keyboard_visibility_tizen) + +The Tizen implementation of [`flutter_keyboard_visibility`](https://pub.dev/packages/flutter_keyboard_visibility). + +## Usage + +This package is not an _endorsed_ implementation of `flutter_keyboard_visibility`. Therefore, you have to include `flutter_keyboard_visibility_tizen` alongside `flutter_keyboard_visibility` as dependencies in your `pubspec.yaml` file. + + +```yaml +dependencies: + flutter_keyboard_visibility: ^6.0.0 + flutter_keyboard_visibility_tizen: ^0.1.0 +``` diff --git a/packages/flutter_keyboard_visibility/example/.gitignore b/packages/flutter_keyboard_visibility/example/.gitignore new file mode 100644 index 000000000..0fa6b675c --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/.gitignore @@ -0,0 +1,46 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/packages/flutter_keyboard_visibility/example/README.md b/packages/flutter_keyboard_visibility/example/README.md new file mode 100644 index 000000000..222dbb0f3 --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/README.md @@ -0,0 +1,7 @@ +# flutter_keyboard_visibility_example + +Demonstrates how to use the flutter_keyboard_visibility plugin. + +## Getting Started + +To run this app on your Tizen device, use [flutter-tizen](https://github.com/flutter-tizen/flutter-tizen). diff --git a/packages/flutter_keyboard_visibility/example/analysis_options.yaml b/packages/flutter_keyboard_visibility/example/analysis_options.yaml new file mode 100644 index 000000000..108d1058a --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/analysis_options.yaml @@ -0,0 +1 @@ +include: package:pedantic/analysis_options.yaml diff --git a/packages/flutter_keyboard_visibility/example/integration_test/flutter_keyboard_visibility_test.dart b/packages/flutter_keyboard_visibility/example/integration_test/flutter_keyboard_visibility_test.dart new file mode 100644 index 000000000..705f85a31 --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/integration_test/flutter_keyboard_visibility_test.dart @@ -0,0 +1,9 @@ +// Copyright 2025 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:integration_test/integration_test.dart'; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); +} diff --git a/packages/flutter_keyboard_visibility/example/lib/keyboard_dismiss_demo.dart b/packages/flutter_keyboard_visibility/example/lib/keyboard_dismiss_demo.dart new file mode 100644 index 000000000..acc77fd19 --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/lib/keyboard_dismiss_demo.dart @@ -0,0 +1,95 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; + +class KeyboardDismissDemo extends StatelessWidget { + const KeyboardDismissDemo({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Keyboard Dismiss Demo'), + ), + body: SafeArea( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + KeyboardDismissOnTap( + child: Container( + height: 80, + width: double.infinity, + color: Colors.red, + child: Center(child: Text('Red dismisses on tap')), + ), + ), + KeyboardDismissOnTap( + child: Container( + height: 80, + width: double.infinity, + color: Colors.blue, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('Button does not dismiss, blue does'), + ElevatedButton( + onPressed: () {}, + child: Text('Button'), + ), + ], + ), + ), + ), + KeyboardDismissOnTap( + dismissOnCapturedTaps: true, + child: Container( + height: 80, + width: double.infinity, + color: Colors.green, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('Button and green both dismiss'), + ElevatedButton( + onPressed: () {}, + child: Text('Button'), + ), + ], + ), + ), + ), + KeyboardDismissOnTap( + child: Container( + height: 80, + width: double.infinity, + color: Colors.orange, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('Orange dismisses, black does not'), + IgnoreKeyboardDismiss( + child: Container( + margin: EdgeInsets.only(top: 4), + height: 40, + width: 40, + color: Colors.black, + ), + ), + ], + ), + ), + ), + Spacer(), + TextField( + keyboardType: TextInputType.text, + decoration: InputDecoration( + labelText: 'Input box for keyboard test', + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/packages/flutter_keyboard_visibility/example/lib/main.dart b/packages/flutter_keyboard_visibility/example/lib/main.dart new file mode 100644 index 000000000..2429e1939 --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/lib/main.dart @@ -0,0 +1,75 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; +import 'package:flutter_keyboard_visibility_example/keyboard_dismiss_demo.dart'; +import 'package:flutter_keyboard_visibility_example/provider_demo.dart'; + +void main() { + runApp(App()); +} + +class App extends StatelessWidget { + const App({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Demo(), + ); + } +} + +class Demo extends StatelessWidget { + @override + Widget build(BuildContext context) { + return KeyboardDismissOnTap( + child: Scaffold( + appBar: AppBar( + title: Text('Keyboard Visibility Example'), + ), + body: Center( + child: Padding( + padding: EdgeInsets.all(24.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + ElevatedButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => ProviderDemo()), + ); + }, + child: Text('Provider Demo'), + ), + ElevatedButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => KeyboardDismissDemo()), + ); + }, + child: Text('KeyboardDismiss Demo'), + ), + Spacer(), + TextField( + keyboardType: TextInputType.text, + decoration: InputDecoration( + labelText: 'Input box for keyboard test', + ), + ), + Container(height: 60.0), + KeyboardVisibilityBuilder(builder: (context, visible) { + return Text( + 'The keyboard is: ${visible ? 'VISIBLE' : 'NOT VISIBLE'}', + ); + }), + Spacer(), + ], + ), + ), + ), + ), + ); + } +} diff --git a/packages/flutter_keyboard_visibility/example/lib/provider_demo.dart b/packages/flutter_keyboard_visibility/example/lib/provider_demo.dart new file mode 100644 index 000000000..0d7fb02ec --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/lib/provider_demo.dart @@ -0,0 +1,46 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; + +class ProviderDemo extends StatelessWidget { + ProviderDemo({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return KeyboardVisibilityProvider( + child: MyDemoPage(), + ); + } +} + +class MyDemoPage extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Keyboard Visibility Provider'), + ), + body: Center( + child: Padding( + padding: EdgeInsets.all(24.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('This demo uses KeyboardVisibilityProvider.'), + Container(height: 60.0), + TextField( + keyboardType: TextInputType.text, + decoration: InputDecoration( + labelText: 'Input box for keyboard test', + ), + ), + Container(height: 60.0), + Text( + 'The keyboard is: ${KeyboardVisibilityProvider.isKeyboardVisible(context) ? 'VISIBLE' : 'NOT VISIBLE'}', + ), + ], + ), + ), + ), + ); + } +} diff --git a/packages/flutter_keyboard_visibility/example/pubspec.yaml b/packages/flutter_keyboard_visibility/example/pubspec.yaml new file mode 100644 index 000000000..69e68d47a --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/pubspec.yaml @@ -0,0 +1,28 @@ +name: flutter_keyboard_visibility_example +description: Demonstrates how to use the flutter_keyboard_visibility plugin. +publish_to: "none" + +environment: + sdk: ">=3.1.0 <4.0.0" + flutter: ">=3.13.0" + +dependencies: + flutter: + sdk: flutter + flutter_keyboard_visibility: ^6.0.0 + flutter_keyboard_visibility_tizen: + path: ../ + +dev_dependencies: + flutter_driver: + sdk: flutter + flutter_test: + sdk: flutter + integration_test: + sdk: flutter + integration_test_tizen: + path: ../../integration_test/ + pedantic: ^1.11.0 + +flutter: + uses-material-design: true diff --git a/packages/flutter_keyboard_visibility/example/test_driver/integration_test.dart b/packages/flutter_keyboard_visibility/example/test_driver/integration_test.dart new file mode 100644 index 000000000..b38629cca --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/test_driver/integration_test.dart @@ -0,0 +1,3 @@ +import 'package:integration_test/integration_test_driver.dart'; + +Future main() => integrationDriver(); diff --git a/packages/flutter_keyboard_visibility/example/tizen/.gitignore b/packages/flutter_keyboard_visibility/example/tizen/.gitignore new file mode 100644 index 000000000..ac0738be2 --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/tizen/.gitignore @@ -0,0 +1,12 @@ +flutter/ +.vs/ +*.user +bin/ +obj/ + +# Tizen Core CLI (tz) related files +tizen_dotnet_project.yaml +*.csproj.backup + +# Flutter-tizen dependency information file +.app.deps.json diff --git a/packages/flutter_keyboard_visibility/example/tizen/App.cs b/packages/flutter_keyboard_visibility/example/tizen/App.cs new file mode 100644 index 000000000..eafb993d1 --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/tizen/App.cs @@ -0,0 +1,19 @@ +using Tizen.Flutter.Embedding; + +namespace Runner +{ + public class App : FlutterApplication + { + protected override void OnCreate() + { + base.OnCreate(); + GeneratedPluginRegistrant.RegisterPlugins(this); + } + + static void Main(string[] args) + { + var app = new App(); + app.Run(args); + } + } +} diff --git a/packages/flutter_keyboard_visibility/example/tizen/Runner.csproj b/packages/flutter_keyboard_visibility/example/tizen/Runner.csproj new file mode 100644 index 000000000..da93051cc --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/tizen/Runner.csproj @@ -0,0 +1,19 @@ + + + + Exe + tizen80 + + + + + + + + + + %(RecursiveDir) + + + + diff --git a/packages/flutter_keyboard_visibility/example/tizen/shared/res/ic_launcher.png b/packages/flutter_keyboard_visibility/example/tizen/shared/res/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/packages/flutter_keyboard_visibility/example/tizen/tizen-manifest.xml b/packages/flutter_keyboard_visibility/example/tizen/tizen-manifest.xml new file mode 100644 index 000000000..a43e87c2b --- /dev/null +++ b/packages/flutter_keyboard_visibility/example/tizen/tizen-manifest.xml @@ -0,0 +1,10 @@ + + + + + + ic_launcher.png + + + + diff --git a/packages/flutter_keyboard_visibility/lib/flutter_keyboard_visibility_tizen.dart b/packages/flutter_keyboard_visibility/lib/flutter_keyboard_visibility_tizen.dart new file mode 100644 index 000000000..8e3817984 --- /dev/null +++ b/packages/flutter_keyboard_visibility/lib/flutter_keyboard_visibility_tizen.dart @@ -0,0 +1,5 @@ +// Copyright 2025 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +export 'src/flutter_keyboard_visibility_tizen.dart'; diff --git a/packages/flutter_keyboard_visibility/lib/src/flutter_keyboard_visibility_tizen.dart b/packages/flutter_keyboard_visibility/lib/src/flutter_keyboard_visibility_tizen.dart new file mode 100644 index 000000000..6dca7aa19 --- /dev/null +++ b/packages/flutter_keyboard_visibility/lib/src/flutter_keyboard_visibility_tizen.dart @@ -0,0 +1,34 @@ +// Copyright 2025 Samsung Electronics Co., Ltd. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; +import 'package:flutter/services.dart'; +import 'package:flutter_keyboard_visibility_platform_interface/flutter_keyboard_visibility_platform_interface.dart'; + +/// The Tizen implementation of [FlutterKeyboardVisibilityPlugin]. +class FlutterKeyboardVisibilityPlugin + extends FlutterKeyboardVisibilityPlatform { + /// Registers this class as the default instance of [FlutterKeyboardVisibilityPlatform]. + static void register() { + FlutterKeyboardVisibilityPlatform.instance = + FlutterKeyboardVisibilityPlugin(); + } + + static const EventChannel _internalChannel = + EventChannel('tizen/internal/inputpanel'); + + @override + Stream get onChange => + _internalChannel.receiveBroadcastStream().map((dynamic event) { + final String? state = + (event as Map)['state'] as String?; + if (state == 'show' || state == 'will_show') { + return true; + } else if (state == 'hide') { + return false; + } else { + return false; + } + }); +} diff --git a/packages/flutter_keyboard_visibility/pubspec.yaml b/packages/flutter_keyboard_visibility/pubspec.yaml new file mode 100644 index 000000000..6b87ed7a6 --- /dev/null +++ b/packages/flutter_keyboard_visibility/pubspec.yaml @@ -0,0 +1,20 @@ +name: flutter_keyboard_visibility_tizen +description: Tizen implementation of flutter_keyboard_visibility plugin. +homepage: https://github.com/flutter-tizen/plugins +repository: https://github.com/flutter-tizen/plugins/tree/master/packages/flutter_keyboard_visibility_tizen +version: 0.1.0 + +environment: + sdk: ">=3.1.0 <4.0.0" + flutter: ">=3.13.0" + +dependencies: + flutter: + sdk: flutter + flutter_keyboard_visibility_platform_interface: ^2.0.0 + +flutter: + plugin: + platforms: + tizen: + dartPluginClass: FlutterKeyboardVisibilityPlugin