diff --git a/example/lib/l10n/app_en.arb b/example/lib/l10n/app_en.arb index 40578df..ad626a2 100644 --- a/example/lib/l10n/app_en.arb +++ b/example/lib/l10n/app_en.arb @@ -9,9 +9,13 @@ "batteryPlusTitleBatteryStateLive": "Battery State 'Live'", "batteryPlusDescBatteryStateLive": "Battery change state stream.", - "@_CACHED_NETWORK_IMAGE": {}, - "cachedNetworkImageTitle": "Title", - "cachedNetworkImageDesc": "Desc", + "@_FLUTTER_KEYBOARD_VISIBILITY": {}, + "flutterKeyboardVisibilityTitle": "Keyboard", + "flutterKeyboardVisibilityDesc": "Stream state keyboard open/close", + "flutterKeyboardVisibilityTitleHeight": "Keyboard height", + "flutterKeyboardVisibilityDescHeight": "Stream state keyboard height", + "flutterKeyboardVisibilityField": "Click for focus", + "flutterKeyboardVisibilityButton": "Clear focus", "@_DEVICE_INFO_PLUS": {}, "deviceInfoPlusTitleID": "ID", @@ -51,10 +55,6 @@ "deviceInfoPlusTitleDeviceModel": "Device", "deviceInfoPlusDescDeviceModel": "Device name model.", - "@_FLUTTER_CACHE_MANAGER": {}, - "flutterCacheManagerTitle": "Title", - "flutterCacheManagerDesc": "Desc", - "@_FLUTTER_LOCAL_NOTIFICATIONS": {}, "flutterLocalNotificationsHintTitle": "Notification title", "flutterLocalNotificationsHintBody": "Notification body", diff --git a/example/lib/l10n/app_ru.arb b/example/lib/l10n/app_ru.arb index fee4a6e..728a957 100644 --- a/example/lib/l10n/app_ru.arb +++ b/example/lib/l10n/app_ru.arb @@ -9,7 +9,15 @@ "batteryPlusTitleBatteryStateLive": "Состояние батареи 'Live'", "batteryPlusDescBatteryStateLive": "Изменение состояния батареи.", - "@_CACHED_NETWORK_IMAGE": {}, + "@_FLUTTER_KEYBOARD_VISIBILITY": {}, + "flutterKeyboardVisibilityTitle": "Клавиатура", + "flutterKeyboardVisibilityDesc": "Сигнал при изменении состояния клавиатуры открыта/закрыта", + "flutterKeyboardVisibilityTitleHeight": "Высота клавиатуры", + "flutterKeyboardVisibilityDescHeight": "Сигнал при изменении высоты клавиатуры", + "flutterKeyboardVisibilityField": "Нажмите, чтобы сфокусироваться", + "flutterKeyboardVisibilityButton": "Снять фокус", + + "@_DEVICE_INFO_PLUS": {}, "deviceInfoPlusTitleID": "ID", "deviceInfoPlusDescID": "Идентификатор устройства.", "deviceInfoPlusTitleName": "Имя", @@ -47,14 +55,6 @@ "deviceInfoPlusTitleDeviceModel": "Устройство", "deviceInfoPlusDescDeviceModel": "Имя модели устройства.", - "@_DEVICE_INFO_PLUS": {}, - "deviceInfoPlusTitle": "Заголовок", - "deviceInfoPlusDesc": "Описание", - - "@_FLUTTER_CACHE_MANAGER": {}, - "flutterCacheManagerTitle": "Заголовок", - "flutterCacheManagerDesc": "Описание", - "@_FLUTTER_LOCAL_NOTIFICATIONS": {}, "flutterLocalNotificationsHintTitle": "Заголовок уведомления", "flutterLocalNotificationsHintBody": "Текст уведомления", diff --git a/example/lib/packages/flutter_keyboard_visibility/model.dart b/example/lib/packages/flutter_keyboard_visibility/model.dart new file mode 100644 index 0000000..7ea60e5 --- /dev/null +++ b/example/lib/packages/flutter_keyboard_visibility/model.dart @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:flutter/widgets.dart'; +import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart'; +import 'package:flutter_keyboard_visibility_aurora/flutter_keyboard_visibility_aurora.dart'; +import 'package:scoped_model/scoped_model.dart'; + +/// Model for [FlutterKeyboardVisibilityPage] +class FlutterKeyboardVisibilityModel extends Model { + /// Get [ScopedModel] + static FlutterKeyboardVisibilityModel of(BuildContext context) => + ScopedModel.of(context); + + final _controller = KeyboardVisibilityController(); + final _controllerAurora = FlutterKeyboardVisibilityAurora(); + + /// Error + String? _error; + + /// Public error + String? get error => _error; + + /// Public is error + bool get isError => _error != null; + + /// Stream change visibility + Stream onChangeKeyboard() async* { + try { + yield _controller.isVisible; + await for (final state in _controller.onChange) { + yield state; + } + } catch (e) { + _error = e.toString(); + notifyListeners(); + } + } + + /// Stream change height + Stream onChangeKeyboardHeight() async* { + try { + yield await _controllerAurora.height; + await for (final state in _controllerAurora.onChangeHeight) { + yield state; + } + } catch (e) { + _error = e.toString(); + notifyListeners(); + } + } +} diff --git a/example/lib/packages/flutter_keyboard_visibility/package.dart b/example/lib/packages/flutter_keyboard_visibility/package.dart new file mode 100644 index 0000000..289c603 --- /dev/null +++ b/example/lib/packages/flutter_keyboard_visibility/package.dart @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:flutter_example_packages/base/package/package_page.dart'; +import 'package:get_it/get_it.dart'; + +import 'page.dart'; +import 'model.dart'; + +/// Package values +final packageFlutterKeyboardVisibility = PackagePage( + key: 'flutter_keyboard_visibility', + descEN: ''' + React to keyboard visibility changes. + ''', + descRU: ''' + Реагировать на изменения видимости клавиатуры. + ''', + version: '5.4.1', + isPlatformDependent: true, + page: () => FlutterKeyboardVisibilityPage(), + init: () { + GetIt.instance.registerFactory( + () => FlutterKeyboardVisibilityModel()); + }, +); diff --git a/example/lib/packages/flutter_keyboard_visibility/page.dart b/example/lib/packages/flutter_keyboard_visibility/page.dart new file mode 100644 index 0000000..501b274 --- /dev/null +++ b/example/lib/packages/flutter_keyboard_visibility/page.dart @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023. Open Mobile Platform LLC. + * License: Proprietary. + */ +import 'package:flutter/material.dart'; +import 'package:flutter_example_packages/base/di/app_di.dart'; +import 'package:flutter_example_packages/base/package/package.dart'; +import 'package:flutter_example_packages/packages/flutter_keyboard_visibility/model.dart'; +import 'package:flutter_example_packages/widgets/base/export.dart'; +import 'package:flutter_example_packages/widgets/blocks/block_alert.dart'; +import 'package:flutter_example_packages/widgets/blocks/block_info_package.dart'; +import 'package:flutter_example_packages/widgets/blocks/block_item.dart'; +import 'package:flutter_example_packages/widgets/layouts/block_layout.dart'; +import 'package:flutter_example_packages/widgets/texts/export.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + +import 'package.dart'; + +class FlutterKeyboardVisibilityPage extends AppStatefulWidget { + FlutterKeyboardVisibilityPage({ + super.key, + }); + + final Package package = packageFlutterKeyboardVisibility; + + @override + State createState() => + _FlutterKeyboardVisibilityPageState(); +} + +class _FlutterKeyboardVisibilityPageState + extends AppState { + double _keyboardHeight = 0; + final model = getIt(); + + @override + void initState() { + super.initState(); + model.onChangeKeyboardHeight().listen((height) { + setState(() { + _keyboardHeight = height; + }); + }); + } + + @override + Widget buildWide( + BuildContext context, + MediaQueryData media, + AppLocalizations l10n, + ) { + return BlockLayout( + model: model, + title: widget.package.key, + builder: (context, child, model) { + return SingleChildScrollView( + padding: EdgeInsets.only(bottom: _keyboardHeight), + child: Padding( + padding: const EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + BlockInfoPackage(widget.package), + BlockAlert(model.error), + if (!model.isError) + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + TextField( + decoration: InputDecoration( + hintText: l10n.flutterKeyboardVisibilityField, + ), + ), + const SizedBox(height: 20), + SizedBox( + width: 140, + child: ElevatedButton( + onPressed: () => FocusScope.of(context).unfocus(), + child: TextBodyLarge( + l10n.flutterKeyboardVisibilityButton, + color: Colors.white, + ), + ), + ), + const SizedBox(height: 20), + BlockItem( + title: l10n.flutterKeyboardVisibilityTitleHeight, + desc: l10n.flutterKeyboardVisibilityDescHeight, + value: _keyboardHeight, + builder: (value) => value.toInt().toString(), + ), + const SizedBox(height: 20), + BlockItem( + title: l10n.flutterKeyboardVisibilityTitle, + desc: l10n.flutterKeyboardVisibilityDesc, + stream: model.onChangeKeyboard(), + builder: (value) => value.toString().toUpperCase(), + ), + ], + ), + ], + ), + ), + ); + }, + ); + } +} diff --git a/example/lib/packages/packages.dart b/example/lib/packages/packages.dart index f6ca884..c383cca 100644 --- a/example/lib/packages/packages.dart +++ b/example/lib/packages/packages.dart @@ -24,6 +24,7 @@ import 'package:flutter_example_packages/packages/wakelock/package.dart'; import 'package:flutter_example_packages/packages/xdga_directories/package.dart'; import 'crypto/package.dart'; +import 'flutter_keyboard_visibility/package.dart'; /// List app packages final packages = [ @@ -33,6 +34,7 @@ final packages = [ packageCupertinoIcons, packageDeviceInfoPlus, packageFlutterCacheManager, + packageFlutterKeyboardVisibility, packageFlutterLocalNotifications, packageFlutterSecureStorage, packageGetIt, diff --git a/example/lib/widgets/blocks/block_info_package.dart b/example/lib/widgets/blocks/block_info_package.dart index ec2260d..f7353f0 100644 --- a/example/lib/widgets/blocks/block_info_package.dart +++ b/example/lib/widgets/blocks/block_info_package.dart @@ -32,6 +32,7 @@ class BlockInfoPackage extends AppStatelessWidget { borderRadius: AppRadius.small, ), child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ TextBodyMedium(package.desc), const SizedBox(height: 8), diff --git a/example/pubspec.lock b/example/pubspec.lock index 2c34683..7b240ce 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -290,6 +290,55 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.3.0" + flutter_keyboard_visibility: + dependency: "direct main" + description: + name: flutter_keyboard_visibility + url: "https://pub.dartlang.org" + source: hosted + version: "5.4.1" + flutter_keyboard_visibility_aurora: + dependency: "direct main" + description: + path: "../packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora" + relative: true + source: path + version: "0.0.1" + flutter_keyboard_visibility_linux: + dependency: transitive + description: + name: flutter_keyboard_visibility_linux + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_macos: + dependency: transitive + description: + name: flutter_keyboard_visibility_macos + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + flutter_keyboard_visibility_platform_interface: + dependency: transitive + description: + name: flutter_keyboard_visibility_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_web: + dependency: transitive + description: + name: flutter_keyboard_visibility_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" + flutter_keyboard_visibility_windows: + dependency: transitive + description: + name: flutter_keyboard_visibility_windows + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" flutter_lints: dependency: "direct dev" description: diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 4817c18..30d4b5f 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -116,6 +116,11 @@ dependencies: ref: flutter_example_packages path: packages/wakelock/wakelock_aurora + ## https://pub.dev/packages/flutter_keyboard_visibility + flutter_keyboard_visibility: ^5.4.1 + flutter_keyboard_visibility_aurora: + path: ../packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora + dev_dependencies: flutter_test: sdk: diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.gitignore b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.gitignore new file mode 100644 index 0000000..96486fd --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.gitignore @@ -0,0 +1,30 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# 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 +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +.packages +build/ diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.metadata b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.metadata new file mode 100644 index 0000000..641645c --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: 135454af32477f815a7525073027a3ff9eff1bfd + channel: aurora + +project_type: plugin + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 135454af32477f815a7525073027a3ff9eff1bfd + base_revision: 135454af32477f815a7525073027a3ff9eff1bfd + - platform: aurora + create_revision: 135454af32477f815a7525073027a3ff9eff1bfd + base_revision: 135454af32477f815a7525073027a3ff9eff1bfd + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.vscode/c_cpp_properties.json b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..13d0b90 --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.vscode/c_cpp_properties.json @@ -0,0 +1,22 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**", + "/home/keygenqt/AuroraPlatformSDK/targets/AuroraOS-4.0.2-armv7hl.default/usr/lib", + "/home/keygenqt/AuroraPlatformSDK/targets/AuroraOS-4.0.2-armv7hl.default/usr/include", + "/home/keygenqt/AuroraPlatformSDK/targets/AuroraOS-4.0.2-armv7hl.default/usr/include/flutter-embedder", + "/home/keygenqt/AuroraPlatformSDK/targets/AuroraOS-4.0.2-armv7hl.default/usr/include/flutter-embedder/flutter" + ], + "defines": [ + "__ARM_PCS_VFP" + ], + "compilerPath": "/usr/bin/g++", + "cStandard": "c17", + "cppStandard": "c++17", + "intelliSenseMode": "clang-x64" + } + ], + "version": 4 +} diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.vscode/settings.json b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.vscode/settings.json new file mode 100644 index 0000000..d9db8dd --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/.vscode/settings.json @@ -0,0 +1,60 @@ +{ + "files.associations": { + "variant": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "compare": "cpp", + "concepts": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "list": "cpp", + "map": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "typeinfo": "cpp", + "chrono": "cpp", + "codecvt": "cpp", + "ctime": "cpp", + "ratio": "cpp", + "iomanip": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stop_token": "cpp", + "thread": "cpp" + } +} diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/README.md b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/README.md new file mode 100644 index 0000000..39405a2 --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/README.md @@ -0,0 +1,45 @@ +# flutter_keyboard_visibility_aurora + +The Aurora 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_local_notifications_aurora` alongside `flutter_keyboard_visibility` as dependencies in your `pubspec.yaml` file. + +**pubspec.yaml** + +```yaml +dependencies: + flutter_keyboard_visibility: 5.4.1 + flutter_keyboard_visibility_aurora: + path: # path to folder with plugin +``` + +***.dart** + +```dart +/// Default plugin component +final _controller = KeyboardVisibilityController(); + +/// Custom platform component with keyboard height +final _controllerAurora = FlutterKeyboardVisibilityAurora(); + +/// Stream change visibility +Stream onChangeKeyboard() async* { + yield _controller.isVisible; + + await for (final state in _controller.onChange) { + yield state; + } +} + +/// Stream change height +Stream onChangeKeyboardHeight() async* { + yield await _controllerAurora.height; + + await for (final state in _controllerAurora.onChangeHeight) { + yield state; + } +} +``` + diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/analysis_options.yaml b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/analysis_options.yaml new file mode 100644 index 0000000..f9b3034 --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/analysis_options.yaml @@ -0,0 +1 @@ +include: package:flutter_lints/flutter.yaml diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/CMakeLists.txt b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/CMakeLists.txt new file mode 100644 index 0000000..00df708 --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.10) + +set(PROJECT_NAME flutter_keyboard_visibility_aurora) +set(PLUGIN_NAME flutter_keyboard_visibility_aurora_platform_plugin) + +project(${PROJECT_NAME} LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-psabi") +set(CMAKE_CXX_FLAGS_RELEASE "-O3") + +find_package(PkgConfig REQUIRED) +pkg_check_modules(FlutterEmbedder REQUIRED IMPORTED_TARGET flutter-embedder) + +add_library(${PLUGIN_NAME} SHARED flutter_keyboard_visibility_aurora_plugin.cpp) + +set_target_properties(${PLUGIN_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden) +target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::FlutterEmbedder) + +target_include_directories(${PLUGIN_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) +target_compile_definitions(${PLUGIN_NAME} PRIVATE PLUGIN_IMPL) diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/flutter_keyboard_visibility_aurora_plugin.cpp b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/flutter_keyboard_visibility_aurora_plugin.cpp new file mode 100644 index 0000000..f95a4a8 --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/flutter_keyboard_visibility_aurora_plugin.cpp @@ -0,0 +1,83 @@ +#include +#include +#include +#include +#include + +FlutterKeyboardVisibilityAuroraPlugin::FlutterKeyboardVisibilityAuroraPlugin() +{ + PlatformEvents::SubscribeKeyboardVisibilityChanged( + [this](bool state) + { + if (this->m_sendEventVisibility) + { + EventChannel("flutter_keyboard_visibility_aurora_state", MethodCodecType::Standard) + .SendEvent(state); + } + + if (this->m_sendEventHeight) + { + EventChannel("flutter_keyboard_visibility_aurora_height", MethodCodecType::Standard) + .SendEvent(PlatformMethods::GetKeyboardHeight()); + } + }); +} + +void FlutterKeyboardVisibilityAuroraPlugin::RegisterWithRegistrar(PluginRegistrar ®istrar) +{ + registrar.RegisterMethodChannel("flutter_keyboard_visibility_aurora", + MethodCodecType::Standard, + [this](const MethodCall &call) + { this->onMethodCall(call); }); + + registrar.RegisterEventChannel( + "flutter_keyboard_visibility_aurora_state", + MethodCodecType::Standard, + [this](const Encodable &) + { + this->m_sendEventVisibility = true; + return EventResponse(); + }, + [this](const Encodable &) + { + this->m_sendEventVisibility = false; + return EventResponse(); + }); + + registrar.RegisterEventChannel( + "flutter_keyboard_visibility_aurora_height", + MethodCodecType::Standard, + [this](const Encodable &) + { + this->m_sendEventHeight = true; + return EventResponse(); + }, + [this](const Encodable &) + { + this->m_sendEventHeight = false; + return EventResponse(); + }); +} + +void FlutterKeyboardVisibilityAuroraPlugin::onMethodCall(const MethodCall &call) +{ + const auto &method = call.GetMethod(); + + if (method == "getKeyboardHeight") + { + onGetKeyboardHeight(call); + return; + } + + unimplemented(call); +} + +void FlutterKeyboardVisibilityAuroraPlugin::onGetKeyboardHeight(const MethodCall &call) +{ + call.SendSuccessResponse(PlatformMethods::GetKeyboardHeight()); +} + +void FlutterKeyboardVisibilityAuroraPlugin::unimplemented(const MethodCall &call) +{ + call.SendSuccessResponse(nullptr); +} diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/include/flutter_keyboard_visibility_aurora/flutter_keyboard_visibility_aurora_plugin.h b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/include/flutter_keyboard_visibility_aurora/flutter_keyboard_visibility_aurora_plugin.h new file mode 100644 index 0000000..980fa93 --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/include/flutter_keyboard_visibility_aurora/flutter_keyboard_visibility_aurora_plugin.h @@ -0,0 +1,22 @@ +#ifndef FLUTTER_PLUGIN_FLUTTER_KEYBOARD_VISIBILITY_AURORA_PLUGIN_H +#define FLUTTER_PLUGIN_FLUTTER_KEYBOARD_VISIBILITY_AURORA_PLUGIN_H + +#include +#include + +class PLUGIN_EXPORT FlutterKeyboardVisibilityAuroraPlugin final : public PluginInterface +{ +public: + FlutterKeyboardVisibilityAuroraPlugin(); + void RegisterWithRegistrar(PluginRegistrar ®istrar) override; + +private: + bool m_sendEventVisibility = false; + bool m_sendEventHeight = false; + + void onMethodCall(const MethodCall &call); + void onGetKeyboardHeight(const MethodCall &call); + void unimplemented(const MethodCall &call); +}; + +#endif /* FLUTTER_PLUGIN_FLUTTER_KEYBOARD_VISIBILITY_AURORA_PLUGIN_H */ diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/include/flutter_keyboard_visibility_aurora/globals.h b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/include/flutter_keyboard_visibility_aurora/globals.h new file mode 100644 index 0000000..69bb59e --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/aurora/include/flutter_keyboard_visibility_aurora/globals.h @@ -0,0 +1,10 @@ +#ifndef FLUTTER_PLUGIN_FLUTTER_KEYBOARD_VISIBILITY_AURORA_PLUGIN_GLOBALS_H +#define FLUTTER_PLUGIN_FLUTTER_KEYBOARD_VISIBILITY_AURORA_PLUGIN_GLOBALS_H + +#ifdef PLUGIN_IMPL +#define PLUGIN_EXPORT __attribute__((visibility("default"))) +#else +#define PLUGIN_EXPORT +#endif + +#endif /* FLUTTER_PLUGIN_FLUTTER_KEYBOARD_VISIBILITY_AURORA_PLUGIN_GLOBALS_H */ diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora.dart b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora.dart new file mode 100644 index 0000000..c3522c2 --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora.dart @@ -0,0 +1,26 @@ +import 'package:flutter_keyboard_visibility_platform_interface/flutter_keyboard_visibility_platform_interface.dart'; + +import 'flutter_keyboard_visibility_aurora_platform_interface.dart'; + +class FlutterKeyboardVisibilityAurora + extends FlutterKeyboardVisibilityPlatform { + /// Factory method that initializes the FlutterKeyboardVisibility plugin + /// platform with an instance of the plugin for Aurora OS. + static void registerWith() { + FlutterKeyboardVisibilityPlatform.instance = + FlutterKeyboardVisibilityAurora(); + } + + /// Emits changes to keyboard visibility from the platform. + @override + Stream get onChange => + FlutterKeyboardVisibilityAuroraPlatform.instance.onChangeVisibility(); + + /// Emits changes to keyboard height from the platform. + Stream get onChangeHeight => + FlutterKeyboardVisibilityAuroraPlatform.instance.onChangeHeight(); + + /// Get keyboard height. + Future get height => + FlutterKeyboardVisibilityAuroraPlatform.instance.getKeyboardHeight(); +} diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora_method_channel.dart b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora_method_channel.dart new file mode 100644 index 0000000..ac1d10b --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora_method_channel.dart @@ -0,0 +1,33 @@ +import 'package:flutter/services.dart'; + +import 'flutter_keyboard_visibility_aurora_platform_interface.dart'; + +/// An implementation of [FlutterKeyboardVisibilityAuroraPlatform] that uses method channels. +class MethodChannelFlutterKeyboardVisibilityAurora + extends FlutterKeyboardVisibilityAuroraPlatform { + final methodChannel = + const MethodChannel('flutter_keyboard_visibility_aurora'); + + @override + Future getKeyboardHeight() async { + return await methodChannel.invokeMethod('getKeyboardHeight') ?? 0.0; + } + + @override + Stream onChangeVisibility() async* { + await for (final event + in const EventChannel('flutter_keyboard_visibility_aurora_state') + .receiveBroadcastStream()) { + yield event == true; + } + } + + @override + Stream onChangeHeight() async* { + await for (final event + in const EventChannel('flutter_keyboard_visibility_aurora_height') + .receiveBroadcastStream()) { + yield event as double; + } + } +} diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora_platform_interface.dart b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora_platform_interface.dart new file mode 100644 index 0000000..0d430a6 --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/lib/flutter_keyboard_visibility_aurora_platform_interface.dart @@ -0,0 +1,37 @@ +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +import 'flutter_keyboard_visibility_aurora_method_channel.dart'; + +abstract class FlutterKeyboardVisibilityAuroraPlatform extends PlatformInterface { + /// Constructs a FlutterKeyboardVisibilityAuroraPlatform. + FlutterKeyboardVisibilityAuroraPlatform() : super(token: _token); + + static final Object _token = Object(); + + static FlutterKeyboardVisibilityAuroraPlatform _instance = MethodChannelFlutterKeyboardVisibilityAurora(); + + /// The default instance of [FlutterKeyboardVisibilityAuroraPlatform] to use. + /// + /// Defaults to [MethodChannelFlutterKeyboardVisibilityAurora]. + static FlutterKeyboardVisibilityAuroraPlatform get instance => _instance; + + /// Platform-specific implementations should set this with their own + /// platform-specific class that extends [FlutterKeyboardVisibilityAuroraPlatform] when + /// they register themselves. + static set instance(FlutterKeyboardVisibilityAuroraPlatform instance) { + PlatformInterface.verifyToken(instance, _token); + _instance = instance; + } + + Future getKeyboardHeight() { + throw UnimplementedError('getKeyboardHeight() has not been implemented.'); + } + + Stream onChangeVisibility() { + throw UnimplementedError('onChangeVisibility() has not been implemented.'); + } + + Stream onChangeHeight() { + throw UnimplementedError('onChangeHeight() has not been implemented.'); + } +} diff --git a/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/pubspec.yaml b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/pubspec.yaml new file mode 100644 index 0000000..c472a3c --- /dev/null +++ b/packages/flutter_keyboard_visibility/flutter_keyboard_visibility_aurora/pubspec.yaml @@ -0,0 +1,25 @@ +name: flutter_keyboard_visibility_aurora +description: A new Flutter plugin project. +version: 0.0.1 + +environment: + sdk: '>=2.18.6 <3.0.0' + flutter: ">=3.0.0" + +dependencies: + flutter: + sdk: flutter + plugin_platform_interface: ^2.0.2 + flutter_keyboard_visibility_platform_interface: ^2.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +flutter: + plugin: + platforms: + aurora: + dartPluginClass: FlutterKeyboardVisibilityAurora + pluginClass: FlutterKeyboardVisibilityAuroraPlugin diff --git a/packages/package_info_plus/package_info_plus_aurora/aurora/package_info_plus_aurora_plugin.cpp b/packages/package_info_plus/package_info_plus_aurora/aurora/package_info_plus_aurora_plugin.cpp index 4d8a580..1aba0d2 100644 --- a/packages/package_info_plus/package_info_plus_aurora/aurora/package_info_plus_aurora_plugin.cpp +++ b/packages/package_info_plus/package_info_plus_aurora/aurora/package_info_plus_aurora_plugin.cpp @@ -4,7 +4,7 @@ */ #include #include -#include +#include #include void PackageInfoPlusAuroraPlugin::RegisterWithRegistrar(PluginRegistrar ®istrar) @@ -33,12 +33,12 @@ void PackageInfoPlusAuroraPlugin::onMethodCall(const MethodCall &call) void PackageInfoPlusAuroraPlugin::onGetApplicationOrg(const MethodCall &call) { - call.SendSuccessResponse(Application::GetID().orgname); + call.SendSuccessResponse(PlatformMethods::GetOrgname()); } void PackageInfoPlusAuroraPlugin::onGetApplicationName(const MethodCall &call) { - call.SendSuccessResponse(Application::GetID().appname); + call.SendSuccessResponse(PlatformMethods::GetAppname()); } void PackageInfoPlusAuroraPlugin::unimplemented(const MethodCall &call)