From 47214e0f733334a2dafb45bd5c8a97bbb25e2b2d Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Fri, 7 Jun 2024 11:57:13 +0800 Subject: [PATCH 01/18] chore(version): bump version and update changelog (#605) --- CHANGELOG.md | 59 +++++++++++++++++++ README.md | 20 +++---- packages/deriv_auth/CHANGELOG.md | 4 ++ packages/deriv_auth/pubspec.yaml | 10 ++-- packages/deriv_date_range_picker/CHANGELOG.md | 4 ++ packages/deriv_date_range_picker/pubspec.yaml | 2 +- .../CHANGELOG.md | 4 ++ .../pubspec.yaml | 2 +- packages/deriv_language_selector/CHANGELOG.md | 4 ++ packages/deriv_language_selector/pubspec.yaml | 4 +- packages/deriv_numpad/CHANGELOG.md | 4 ++ packages/deriv_numpad/pubspec.yaml | 2 +- packages/deriv_passkeys/CHANGELOG.md | 5 ++ packages/deriv_passkeys/pubspec.yaml | 4 +- packages/deriv_ui/CHANGELOG.md | 4 ++ packages/deriv_ui/pubspec.yaml | 2 +- packages/deriv_widgetbook/CHANGELOG.md | 4 ++ packages/deriv_widgetbook/pubspec.yaml | 4 +- 18 files changed, 117 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35d73a2e5..8ae8ebebb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,65 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2024-06-07 + +### Changes + +--- + +Packages with breaking changes: + + - There are no breaking changes in this release. + +Packages with other changes: + + - [`deriv_auth` - `v6.6.4`](#deriv_auth---v664) + - [`deriv_date_range_picker` - `v0.0.1+6`](#deriv_date_range_picker---v0016) + - [`deriv_expandable_bottom_sheet` - `v0.0.1+6`](#deriv_expandable_bottom_sheet---v0016) + - [`deriv_numpad` - `v1.1.5`](#deriv_numpad---v115) + - [`deriv_passkeys` - `v0.0.1+5`](#deriv_passkeys---v0015) + - [`deriv_ui` - `v0.0.7+6`](#deriv_ui---v0076) + - [`deriv_widgetbook` - `v0.0.2+6`](#deriv_widgetbook---v0026) + - [`deriv_language_selector` - `v0.0.2+4`](#deriv_language_selector---v0024) + +Packages with dependency updates only: + +> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project. + + - `deriv_language_selector` - `v0.0.2+4` + +--- + +#### `deriv_auth` - `v6.6.4` + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + +#### `deriv_date_range_picker` - `v0.0.1+6` + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + +#### `deriv_expandable_bottom_sheet` - `v0.0.1+6` + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + +#### `deriv_numpad` - `v1.1.5` + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + +#### `deriv_passkeys` - `v0.0.1+5` + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + - **FIX**(deriv_passkeys): Increased iOS support to 16 ([#601](https://github.com/regentmarkets/flutter-deriv-packages/issues/601)). ([b136424f](https://github.com/regentmarkets/flutter-deriv-packages/commit/b136424f144454727d670c3076074ed0e7197ae0)) + +#### `deriv_ui` - `v0.0.7+6` + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + +#### `deriv_widgetbook` - `v0.0.2+6` + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + + ## 2024-05-30 ### Changes diff --git a/README.md b/README.md index f06f70e59..35951c110 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository contains private packages & plugins that are used by the company ## Using the packages -Each package has been released as git tag with convention as **packageName-vVersionNumber**`(Example: deriv_auth-v6.6.2)`. To use the package, add the following to your pubspec.yaml file: +Each package has been released as git tag with convention as **packageName-vVersionNumber**`(Example: deriv_auth-v6.6.4)`. To use the package, add the following to your pubspec.yaml file: ```yaml @@ -12,7 +12,7 @@ deriv_ui: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_ui - ref: deriv_ui-v0.0.7+4 #your prefered version + ref: deriv_ui-v0.0.7+6 #your prefered version ``` ## Packages @@ -20,29 +20,29 @@ deriv_ui: | Name | Description | Version | | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | | [analytics](./packages/analytics) | Used to collect and send analytical information to 'Firebase' and 'Segment'. | [v1.0.4](./packages/analytics/CHANGELOG.md) | -| [deriv_auth](./packages/deriv_auth) | A Dart package that provides Authentication logic for Deriv applications. | [v6.6.3 ](./packages/deriv_auth/CHANGELOG.md) | +| [deriv_auth](./packages/deriv_auth) | A Dart package that provides Authentication logic for Deriv applications. | [v6.6.4 ](./packages/deriv_auth/CHANGELOG.md) | | [deriv_banner](./packages/deriv_banner) | A widget to show banner in apps. | [v0.0.1+1](./packages/deriv_banner/CHANGELOG.md) | | [deriv_bloc_manager](./packages/deriv_bloc_manager) | Provides some tools to manage blocs. | [v0.0.1](./packages/deriv_bloc_manager/CHANGELOG.md) | | [deriv_datadog](./packages/deriv_datadog) | A package that helps you monitor the performance and user interactions of your Flutter app by sending data to Datadog. | [v0.0.1](./packages/deriv_datadog/CHANGELOG.md) | -| [deriv_date_range_picker](./packages/deriv_date_range_picker) | Provides a widget that allows users to select a date range either by calendar mode or input mode. | [v0.0.1+5](./packages/deriv_date_range_picker/CHANGELOG.md) | +| [deriv_date_range_picker](./packages/deriv_date_range_picker) | Provides a widget that allows users to select a date range either by calendar mode or input mode. | [v0.0.1+6](./packages/deriv_date_range_picker/CHANGELOG.md) | | [deriv_dependency_injector](./packages/deriv_dependency_injector) | A package for handling dependency injection in Dart. | [v1.0.2](./packages/deriv_dependency_injector/CHANGELOG.md) | | [deriv_env](./packages/deriv_env) | A package to load and store environment variables. | [v0.0.1+2](./packages/deriv_env/CHANGELOG.md) | -| [deriv_expandable_bottom_sheet](./packages/deriv_expandable_bottom_sheet) | A widget that helps to display an expandable bottom sheet. | [v0.0.1+5](./packages/deriv_expandable_bottom_sheet/CHANGELOG.md) | +| [deriv_expandable_bottom_sheet](./packages/deriv_expandable_bottom_sheet) | A widget that helps to display an expandable bottom sheet. | [v0.0.1+6](./packages/deriv_expandable_bottom_sheet/CHANGELOG.md) | | [deriv_http_client](./packages/deriv_http_client) | A package that provides a wrapper for http package. | [v2.0.0](./packages/deriv_http_client/CHANGELOG.md) | | [deriv_lint](./packages/deriv_lint) | A Dart package that provides lint rules for Dart and Flutter. | [v1.0.0](./packages/deriv_lint/CHANGELOG.md) | | [deriv_live_chat](./packages/deriv_live_chat) | A plugin for live chat SDK support to dart. | [v0.0.1+2](./packages/deriv_live_chat/CHANGELOG.md) | -| [deriv_language_selector](./packages/deriv_language_selector) | A package to handle language change of the app. | [v0.0.2+3](./packages/deriv_language_selector/CHANGELOG.md) | +| [deriv_language_selector](./packages/deriv_language_selector) | A package to handle language change of the app. | [v0.0.2+4](./packages/deriv_language_selector/CHANGELOG.md) | | [deriv_localizations](./packages/deriv_localizations) | A Package that contains the localization arb(coming from Crowdin) and dart generated files for flutter_deriv_packages. | [v1.1.1](./packages/deriv_localizations/CHANGELOG.md) | | [v1.4.1](./packages/deriv_localizations/CHANGELOG.md) | -| [deriv_numpad](./packages/deriv_numpad) | Number Pad Widget for number input. | [v1.1.4](./packages/deriv_numpad/CHANGELOG.md) | +| [deriv_numpad](./packages/deriv_numpad) | Number Pad Widget for number input. | [v1.1.5](./packages/deriv_numpad/CHANGELOG.md) | | [deriv_rudderstack](./packages/deriv_rudderstack) | A plugin that add RudderStack SDK support to Flutter. | [v1.1.0](./packages/deriv_rudderstack/CHANGELOG.md) | | [deriv_store_launcher](./packages/deriv_store_launcher) | A plugin to launch app stores base on platform and manufacturer. | [v0.0.1+1](./packages/deriv_store_launcher/CHANGELOG.md) | | [deriv_technical_analysis](./packages/deriv_technical_analysis) | A Dart package for Technical Analysis. | [v0.0.1](./packages/deriv_technical_analysis/CHANGELOG.md) | -| [deriv_theme](./packages/deriv_theme) | A package that contains the theme used by Deriv products. | [v2.5.0](./packages/deriv_theme/CHANGELOG.md) | -| [deriv_ui](./packages/deriv_ui) | A package that contains the UI components used by Deriv products. | [v0.0.7+5](./packages/deriv_ui/CHANGELOG.md) | +| [deriv_theme](./packages/deriv_theme) | A package that contains the theme used by Deriv products. | [v2.4.0](./packages/deriv_theme/CHANGELOG.md) | +| [deriv_ui](./packages/deriv_ui) | A package that contains the UI components used by Deriv products. | [v0.0.7+6](./packages/deriv_ui/CHANGELOG.md) | | [deriv_utilities](./packages/deriv_utilities) | A package that contains the utilities including helper functions, mixins, and extensions. | [v1.0.0](./packages/deriv_utilities/CHANGELOG.md) | | [deriv_websocket](./packages/deriv_web_socket_client) | A package that provides a easy to use websocket client. | [v1.0.1](./packages/deriv_web_socket_client/CHANGELOG.md) | | [deriv_web_view](./packages/deriv_web_view) | Deriv web view package. | [v0.2.2+1](./packages/deriv_web_view/CHANGELOG.md) | -| [deriv_widgetbook](./packages/deriv_widgetbook) |Storybook for Deriv UI Widgets and Components | [v0.0.2+5](./packages/deriv_widgetbook/CHANGELOG.md) | +| [deriv_widgetbook](./packages/deriv_widgetbook) |Storybook for Deriv UI Widgets and Components | [v0.0.2+6](./packages/deriv_widgetbook/CHANGELOG.md) | | [form_builder](./packages/form_builder) | A simpler and cleaner way to create, validate and submit forms. | [v1.0.0+1](./packages/form_builder/CHANGELOG.md) | | [update_checker](./packages/update_checker) | Check and retrieve update information from the server for the given package. | [v1.2.2](./packages/update_checker/CHANGELOG.md) | | [deriv_feature_flag](./packages/deriv_feature_flag) | A package to provide feature flag functionality for apps. | [v0.1.1](./packages/deriv_feature_flag/CHANGELOG.md) | diff --git a/packages/deriv_auth/CHANGELOG.md b/packages/deriv_auth/CHANGELOG.md index f88243977..d40b88f1d 100644 --- a/packages/deriv_auth/CHANGELOG.md +++ b/packages/deriv_auth/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.6.4 + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + ## 6.6.3 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_auth/pubspec.yaml b/packages/deriv_auth/pubspec.yaml index 4bfb930e2..c2c5d4df1 100644 --- a/packages/deriv_auth/pubspec.yaml +++ b/packages/deriv_auth/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_auth description: Provides deriv authentication functionalities for dart/flutter apps. -version: 6.6.3 +version: 6.6.4 environment: sdk: ">=3.0.0 <4.0.0" @@ -22,7 +22,7 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_ui - ref: deriv_ui-v0.0.7+5 + ref: deriv_ui-v0.0.7+6 deriv_http_client: git: @@ -51,13 +51,13 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_passkeys - ref: deriv_passkeys-v0.0.1+4 + ref: deriv_passkeys-v0.0.1+5 deriv_language_selector: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_language_selector - ref: deriv_language_selector-v0.0.2+3 + ref: deriv_language_selector-v0.0.2+4 flutter_bloc: ^8.1.3 flutter_svg: ^2.0.7 @@ -73,7 +73,7 @@ dependency_overrides: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_ui - ref: deriv_ui-v0.0.7+5 + ref: deriv_ui-v0.0.7+6 dev_dependencies: mocktail: ^1.0.3 diff --git a/packages/deriv_date_range_picker/CHANGELOG.md b/packages/deriv_date_range_picker/CHANGELOG.md index 5c1e03723..3ff19f7f3 100644 --- a/packages/deriv_date_range_picker/CHANGELOG.md +++ b/packages/deriv_date_range_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.1+6 + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + ## 0.0.1+5 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_date_range_picker/pubspec.yaml b/packages/deriv_date_range_picker/pubspec.yaml index 3474d4f2b..5b66e49e1 100644 --- a/packages/deriv_date_range_picker/pubspec.yaml +++ b/packages/deriv_date_range_picker/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_date_range_picker description: A new Flutter package project. -version: 0.0.1+5 +version: 0.0.1+6 publish_to: "none" # Remove this line if you wish to publish to pub.dev environment: diff --git a/packages/deriv_expandable_bottom_sheet/CHANGELOG.md b/packages/deriv_expandable_bottom_sheet/CHANGELOG.md index 54bee2ee9..608ca0350 100644 --- a/packages/deriv_expandable_bottom_sheet/CHANGELOG.md +++ b/packages/deriv_expandable_bottom_sheet/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.1+6 + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + ## 0.0.1+5 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_expandable_bottom_sheet/pubspec.yaml b/packages/deriv_expandable_bottom_sheet/pubspec.yaml index 273662b53..a4890f60f 100644 --- a/packages/deriv_expandable_bottom_sheet/pubspec.yaml +++ b/packages/deriv_expandable_bottom_sheet/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_expandable_bottom_sheet description: A new Flutter package project. -version: 0.0.1+5 +version: 0.0.1+6 publish_to: none environment: diff --git a/packages/deriv_language_selector/CHANGELOG.md b/packages/deriv_language_selector/CHANGELOG.md index 67c92b8c6..4eb2f1faf 100644 --- a/packages/deriv_language_selector/CHANGELOG.md +++ b/packages/deriv_language_selector/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.2+4 + + - Update a dependency to the latest release. + ## 0.0.2+3 - Update a dependency to the latest release. diff --git a/packages/deriv_language_selector/pubspec.yaml b/packages/deriv_language_selector/pubspec.yaml index bf9d91c4d..3b0c952eb 100644 --- a/packages/deriv_language_selector/pubspec.yaml +++ b/packages/deriv_language_selector/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_language_selector description: A package to select language for the app. It provides both UI and logic for language selection. -version: 0.0.2+3 +version: 0.0.2+4 publish_to: "none" environment: @@ -14,7 +14,7 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_ui - ref: deriv_ui-v0.0.7+5 + ref: deriv_ui-v0.0.7+6 shared_preferences: ^2.2.2 flutter_bloc: ^8.1.4 equatable: ^2.0.5 diff --git a/packages/deriv_numpad/CHANGELOG.md b/packages/deriv_numpad/CHANGELOG.md index 5c7c38568..92e0f9f7c 100644 --- a/packages/deriv_numpad/CHANGELOG.md +++ b/packages/deriv_numpad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.5 + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + ## 1.1.4 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_numpad/pubspec.yaml b/packages/deriv_numpad/pubspec.yaml index f073e7bf7..91c46ee96 100644 --- a/packages/deriv_numpad/pubspec.yaml +++ b/packages/deriv_numpad/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_numpad description: A new Flutter project. -version: 1.1.4 +version: 1.1.5 publish_to: "none" environment: diff --git a/packages/deriv_passkeys/CHANGELOG.md b/packages/deriv_passkeys/CHANGELOG.md index d96e5c1af..22d270ed0 100644 --- a/packages/deriv_passkeys/CHANGELOG.md +++ b/packages/deriv_passkeys/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.0.1+5 + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + - **FIX**(deriv_passkeys): Increased iOS support to 16 ([#601](https://github.com/regentmarkets/flutter-deriv-packages/issues/601)). ([b136424f](https://github.com/regentmarkets/flutter-deriv-packages/commit/b136424f144454727d670c3076074ed0e7197ae0)) + ## 0.0.1+4 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_passkeys/pubspec.yaml b/packages/deriv_passkeys/pubspec.yaml index 3788add64..ea509b874 100644 --- a/packages/deriv_passkeys/pubspec.yaml +++ b/packages/deriv_passkeys/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_passkeys description: Deriv Passkeys Flutter Plugin -version: 0.0.1+4 +version: 0.0.1+5 publish_to: "none" environment: @@ -24,7 +24,7 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_ui - ref: deriv_ui-v0.0.7+5 + ref: deriv_ui-v0.0.7+6 deriv_http_client: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git diff --git a/packages/deriv_ui/CHANGELOG.md b/packages/deriv_ui/CHANGELOG.md index 4dd3eeaf2..1441b306e 100644 --- a/packages/deriv_ui/CHANGELOG.md +++ b/packages/deriv_ui/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.7+6 + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + ## 0.0.7+5 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_ui/pubspec.yaml b/packages/deriv_ui/pubspec.yaml index e1c5e4063..f32c6ff6e 100644 --- a/packages/deriv_ui/pubspec.yaml +++ b/packages/deriv_ui/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_ui description: A new Flutter package project. -version: 0.0.7+5 +version: 0.0.7+6 publish_to: none environment: diff --git a/packages/deriv_widgetbook/CHANGELOG.md b/packages/deriv_widgetbook/CHANGELOG.md index df3d51eef..edd0b2854 100644 --- a/packages/deriv_widgetbook/CHANGELOG.md +++ b/packages/deriv_widgetbook/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.2+6 + + - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) + ## 0.0.2+5 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_widgetbook/pubspec.yaml b/packages/deriv_widgetbook/pubspec.yaml index 85838f21c..9ced126dc 100644 --- a/packages/deriv_widgetbook/pubspec.yaml +++ b/packages/deriv_widgetbook/pubspec.yaml @@ -1,7 +1,7 @@ name: deriv_widgetbook description: Storybook for Deriv UI widgets and components. publish_to: "none" -version: 0.0.2+5 +version: 0.0.2+6 environment: sdk: ">=3.0.0 <4.0.0" @@ -16,7 +16,7 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_ui - ref: deriv_ui-v0.0.7+5 + ref: deriv_ui-v0.0.7+6 deriv_theme: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git From ed2a7ea958e34aa027ecb9ef6919f04fd5c7d5f1 Mon Sep 17 00:00:00 2001 From: emad-deriv <134991873+emad-deriv@users.noreply.github.com> Date: Mon, 10 Jun 2024 10:45:01 +0800 Subject: [PATCH 02/18] fix(deriv-localization): fix passkey button strings (#606) --- .../deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb | 4 ++-- .../deriv_passkeys/deriv_passkeys_localizations.dart | 4 ++-- .../deriv_passkeys/deriv_passkeys_localizations_en.dart | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb index e97a76898..6a72eb09c 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb @@ -51,8 +51,8 @@ "lastUsed": "Last used", "rename": "Rename", "revoke": "Revoke", - "continueTradingButtonText": "Continue Trading", - "addMorePasskeysButtonText": "Add More Passkeys", + "continueTradingButtonText": "Continue trading", + "addMorePasskeysButtonText": "Add more passkeys", "unableToSetupPasskey": "Unable to setup passkey", "unableToSetupPasskeyDescription": "We encountered an issue while setting up your passkey. The process might have been interrupted, or the session timed out. Please try again.", "passkeysOffErrorTitle": "The Passkeys service is unavailable", diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart index c694130ce..d9b9d4cfd 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart @@ -390,13 +390,13 @@ abstract class DerivPasskeysLocalizations { /// No description provided for @continueTradingButtonText. /// /// In en, this message translates to: - /// **'Continue Trading'** + /// **'Continue trading'** String get continueTradingButtonText; /// No description provided for @addMorePasskeysButtonText. /// /// In en, this message translates to: - /// **'Add More Passkeys'** + /// **'Add more passkeys'** String get addMorePasskeysButtonText; /// No description provided for @unableToSetupPasskey. diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart index 991953ef4..f7967fc63 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart @@ -139,10 +139,10 @@ class DerivPasskeysLocalizationsEn extends DerivPasskeysLocalizations { String get revoke => 'Revoke'; @override - String get continueTradingButtonText => 'Continue Trading'; + String get continueTradingButtonText => 'Continue trading'; @override - String get addMorePasskeysButtonText => 'Add More Passkeys'; + String get addMorePasskeysButtonText => 'Add more passkeys'; @override String get unableToSetupPasskey => 'Unable to setup passkey'; From 74f8d9c3a7311ec7abb1cfe76c3f6f190fbcb81a Mon Sep 17 00:00:00 2001 From: abedelaziz-deriv <135210555+abedelaziz-deriv@users.noreply.github.com> Date: Thu, 13 Jun 2024 09:25:46 +0800 Subject: [PATCH 03/18] refactor(analytics)!: added logAppOpen event (#610) --- packages/analytics/lib/analytics.dart | 148 ------------------ .../sdk/deriv_firebase_analytics.dart | 7 +- .../events/rudderstack_events.dart | 53 +++---- .../sdk/deriv_rudderstack_sdk.dart | 10 +- .../firebase/sdk/deriv_firebase_sdk_test.dart | 13 +- .../sdk/deriv_rudderstack_sdk_test.dart | 21 +-- 6 files changed, 56 insertions(+), 196 deletions(-) delete mode 100644 packages/analytics/lib/analytics.dart diff --git a/packages/analytics/lib/analytics.dart b/packages/analytics/lib/analytics.dart deleted file mode 100644 index 22574f33a..000000000 --- a/packages/analytics/lib/analytics.dart +++ /dev/null @@ -1,148 +0,0 @@ -import 'package:analytics/sdk/firebase/core/firebase_configuration.dart'; -import 'package:analytics/sdk/firebase/sdk/deriv_firebase_analytics.dart'; -import 'package:analytics/sdk/rudderstack/core/rudderstack_configuration.dart'; -import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart'; -import 'package:firebase_analytics/firebase_analytics.dart'; -import 'package:firebase_core/firebase_core.dart'; -import 'package:flutter/material.dart'; - -import 'analytics_route_observer.dart'; - -/// Class that collects and send analytical information to `Firebase` and -/// `RudderStack`. -@Deprecated( - 'Use DerivFirebaseAnalytics, DerivRudderstack, or DerivDatadog instead.') -class Analytics { - /// Initialises - @Deprecated( - 'Use DerivFirebaseAnalytics, DerivRudderstack, or DerivDatadog instead.') - factory Analytics() => _instance; - - Analytics._internal(); - - /// A public instance of the class [Analytics]. - static final Analytics _instance = Analytics._internal(); - - /// Contains ignored routes/screen names. - @Deprecated('No need to have it here as it can be done in the client app.') - List ignoredRoutes = []; - - late DerivFirebaseAnalytics _derivFirebaseAnalytics; - - /// An instance of custom route observer created for analytics. - @Deprecated( - "Use the 'navigatorObserver' in DerivFirebaseAnalytics, DerivRudderstack, or DerivDatadog instead.") - late AnalyticsRouteObserver observer; - - /// Initialises the `Analytics`. - /// Sets the device-token to `RudderStack`. - /// bool [isEnabled] enables or disables "Analytics". - @Deprecated( - "Use the 'setup' function in DerivFirebaseAnalytics, DerivRudderstack, or DerivDatadog instead.") - Future init( - {required bool isEnabled, - required FirebaseApp firebaseApp, - RudderstackConfiguration? configuration}) async { - _derivFirebaseAnalytics = - DerivFirebaseAnalytics(FirebaseAnalytics.instanceFor(app: firebaseApp)); - observer = AnalyticsRouteObserver(onNewRoute: _newRouteHandler); - - // Enable or disable the analytics on this device. - await _derivFirebaseAnalytics.setup( - FirebaseConfiguration( - isAnalyticsCollectionEnabled: isEnabled, - ), - ); - - if (configuration != null) { - await DerivRudderstack().setup(configuration); - } - - isEnabled - ? await DerivRudderstack().enable() - : await DerivRudderstack().disable(); - } - - /// Captures `screen_view` event on route changes. - void _newRouteHandler(PageRoute route) { - // ignore: deprecated_member_use_from_same_package - setCurrentScreen( - screenName: route.settings.name ?? '', - ); - } - - /// Captures `Application Backgrounded` event when the app goes to background. - @Deprecated("Use the 'track' function in DerivRudderstack instead.") - void logAppBackgrounded() { - DerivRudderstack().track(eventName: 'Application Backgrounded'); - } - - /// Captures `Application Crashed` event when the app is crashed. - @Deprecated("Use the 'track' function in DerivRudderstack instead.") - void logAppCrashed() { - DerivRudderstack().track(eventName: 'Application Crashed'); - } - - /// Captures information about current screen in use. - @Deprecated( - "Use the 'setCurrentScreen' function in DerivFirebaseAnalytics or the 'screen' function DerivRudderstack instead.") - void setCurrentScreen({ - required String screenName, - }) { - if (ignoredRoutes.contains(screenName)) { - return; - } - _derivFirebaseAnalytics.setCurrentScreen(screenName: screenName); - - DerivRudderstack().screen(screenName: screenName); - } - - /// Captures `login` event upon a successful user log in. - @Deprecated( - "Use the 'logLoginEvent' function in DerivFirebaseAnalytics or the 'identify' function in DerivRudderstack instead.") - Future logLoginEvent( - {required String deviceToken, required int userId}) async { - await _setFirebaseUserId(userId.toString()); - await _derivFirebaseAnalytics.logLogin(); - - await _setRudderStackDeviceToken(deviceToken); - - await DerivRudderstack().identify(userId: userId.toString()); - } - - /// Captures `logout` event when the user logs out. - @Deprecated( - "Use the 'logLogoutEvent' function in DerivFirebaseAnalytics instead.") - void logLogoutEvent() { - _derivFirebaseAnalytics.logEvent(name: 'logout'); - } - - /// Sets the device-token to `RudderStack`. - Future _setRudderStackDeviceToken(String deviceToken) => - DerivRudderstack().setContext(token: deviceToken); - - /// Sets the user id for `Firebase`. - Future _setFirebaseUserId(String userId) => - _derivFirebaseAnalytics.setUserId(id: userId); - - /// Logs push token. - @Deprecated("Use the 'setContext' function in DerivRudderstack instead.") - Future logPushToken(String deviceToken) async { - await _setRudderStackDeviceToken(deviceToken); - } - - /// Should be called at logout to clear up current `RudderStack` data. - @Deprecated("Use the 'reset' function in DerivRudderstack instead.") - Future reset() async => DerivRudderstack().reset(); - - /// Logs custom events to `Firebase`. - @Deprecated("Use the 'logEvent' function in DerivFirebaseAnalytics instead.") - Future logToFirebase({ - required String name, - Map? params, - }) => - _derivFirebaseAnalytics.logEvent( - name: name, - parameters: params, - ); -} diff --git a/packages/analytics/lib/sdk/firebase/sdk/deriv_firebase_analytics.dart b/packages/analytics/lib/sdk/firebase/sdk/deriv_firebase_analytics.dart index 9b840e31f..aec6040cb 100644 --- a/packages/analytics/lib/sdk/firebase/sdk/deriv_firebase_analytics.dart +++ b/packages/analytics/lib/sdk/firebase/sdk/deriv_firebase_analytics.dart @@ -48,7 +48,12 @@ class DerivFirebaseAnalytics implements BaseAnalytics { /// Successfully, otherwise, a false is returned. Future setCurrentScreen({required String screenName}) async => _execute(() async { - await _firebaseAnalytics.setCurrentScreen(screenName: screenName); + await _firebaseAnalytics.logScreenView(screenName: screenName); + }); + + /// Logs the standard app open event. + Future logAppOpen() async => _execute(() async { + await _firebaseAnalytics.logAppOpen(); }); /// Logs the standard login event. diff --git a/packages/analytics/lib/sdk/rudderstack/events/rudderstack_events.dart b/packages/analytics/lib/sdk/rudderstack/events/rudderstack_events.dart index 4840b0e90..425373151 100644 --- a/packages/analytics/lib/sdk/rudderstack/events/rudderstack_events.dart +++ b/packages/analytics/lib/sdk/rudderstack/events/rudderstack_events.dart @@ -1,6 +1,5 @@ import 'package:analytics/sdk/rudderstack/core/rudderstack_configuration.dart'; import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart'; -import 'package:rudder_sdk_flutter_platform_interface/platform.dart'; /// Class which hold events which should be monitored. class DerivRudderstackEvents { @@ -18,11 +17,11 @@ class DerivRudderstackEvents { void logAppOpened() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'open', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -30,11 +29,11 @@ class DerivRudderstackEvents { void logUserTappedLoginButton() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'go_to_login', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -42,13 +41,13 @@ class DerivRudderstackEvents { void logAppGetFreeAccount(String slideName) { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'get_free_account', 'form_source': 'mobile_derivgo', 'getstarted_slide_name': '${slideName.substring(slideName.indexOf('.') + 1, slideName.length)}', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -56,11 +55,11 @@ class DerivRudderstackEvents { void logReferralToggleSwitched() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'tab_referral_toggle', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -68,11 +67,11 @@ class DerivRudderstackEvents { void logTryAgainReferralCode() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'try_again_referral_code', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -80,12 +79,12 @@ class DerivRudderstackEvents { void logEmailConfirmationSent() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'email_confirmation_sent', 'signup_provider': 'email', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -93,12 +92,12 @@ class DerivRudderstackEvents { void logEmailConfirmed() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'email_confirmed', 'signup_provider': 'email', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -106,12 +105,12 @@ class DerivRudderstackEvents { void logSignupContinued() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'signup_continued', 'signup_provider': 'email', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -119,12 +118,12 @@ class DerivRudderstackEvents { void logCountrySelectionPageOpened() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'country_selection_screen_opened', 'signup_provider': 'email', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -132,12 +131,12 @@ class DerivRudderstackEvents { void logSetPasswordPageOpened() { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'password_screen_opened', 'signup_provider': 'email', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -145,12 +144,12 @@ class DerivRudderstackEvents { void logSignUpDone(String signupProvider) { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'signup_done', 'signup_provider': '$signupProvider', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -159,14 +158,14 @@ class DerivRudderstackEvents { [bool? isToggleOn, String? referralCode]) { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'started', 'signup_provider': '$signupProvider', 'referral_toggle_mode': '${isToggleOn ?? false} ', 'referral_code': '$referralCode', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } @@ -174,13 +173,13 @@ class DerivRudderstackEvents { void logSignUpFlowError(String? errorText, [String? signupProvider]) { DerivRudderstack().track( eventName: 'ce_virtual_signup_form', - properties: RudderProperty.fromMap({ + properties: { 'action': 'signup_flow_error', 'signup_provider': '$signupProvider', 'error_message': '$errorText', 'form_source': 'mobile_derivgo', 'form_name': 'virtual_signup_derivgo' - }), + }, ); } } diff --git a/packages/analytics/lib/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart b/packages/analytics/lib/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart index 70d38834c..baa592fb2 100644 --- a/packages/analytics/lib/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart +++ b/packages/analytics/lib/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart @@ -55,9 +55,13 @@ class DerivRudderstack implements BaseAnalytics { /// Tracks an event with the given [eventName] and [properties]. Future track({ required String eventName, - RudderProperty? properties, // Change the parameter type to RudderProperty - }) async => - _execute(() => rudderClient.track(eventName, properties: properties)); + Map? properties, + }) async { + final RudderProperty? rudderProperty = + properties == null ? null : RudderProperty.fromMap(properties); + return _execute( + () => rudderClient.track(eventName, properties: rudderProperty)); + } /// Logs a screen view with the given [screenName]. Future screen({required String screenName}) async => diff --git a/packages/analytics/test/firebase/sdk/deriv_firebase_sdk_test.dart b/packages/analytics/test/firebase/sdk/deriv_firebase_sdk_test.dart index 7afa990fb..69c051360 100644 --- a/packages/analytics/test/firebase/sdk/deriv_firebase_sdk_test.dart +++ b/packages/analytics/test/firebase/sdk/deriv_firebase_sdk_test.dart @@ -31,16 +31,25 @@ void main() { test('should return correct NavigatorObserver', () async { const String screenName = 'test_screen_name'; - when(() => mockFirebaseAnalytics.setCurrentScreen(screenName: screenName)) + when(() => mockFirebaseAnalytics.logScreenView(screenName: screenName)) .thenAnswer((_) async => true); await derivFirebaseAnalytics.setCurrentScreen(screenName: screenName); verify(() => - mockFirebaseAnalytics.setCurrentScreen(screenName: screenName)) + mockFirebaseAnalytics.logScreenView(screenName: screenName)) .called(1); }); + test('should call logAppOpen', () async { + when(() => mockFirebaseAnalytics.logAppOpen()) + .thenAnswer((_) async => true); + + await derivFirebaseAnalytics.logAppOpen(); + + verify(() => mockFirebaseAnalytics.logAppOpen()).called(1); + }); + test('should call logLogin with correct parameters', () async { const String loginMethod = 'test_login_method'; diff --git a/packages/analytics/test/rudderstack/sdk/deriv_rudderstack_sdk_test.dart b/packages/analytics/test/rudderstack/sdk/deriv_rudderstack_sdk_test.dart index df856b864..e7a4e0cce 100644 --- a/packages/analytics/test/rudderstack/sdk/deriv_rudderstack_sdk_test.dart +++ b/packages/analytics/test/rudderstack/sdk/deriv_rudderstack_sdk_test.dart @@ -4,7 +4,6 @@ import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; import 'package:rudder_sdk_flutter/RudderController.dart'; -import 'package:rudder_sdk_flutter_platform_interface/platform.dart'; class MockRudderController extends Mock implements RudderController {} @@ -35,23 +34,16 @@ void main() { test('track calls rudderClient.track', () async { const String eventName = 'test_event_name'; - const Map properties = {'action': 'open'}; - - // Convert properties to RudderProperty - final rudderProperties = RudderProperty.fromMap(properties); + const Map properties = { + 'action': 'open' + }; final bool result = await derivRudderstack.track( eventName: eventName, - properties: rudderProperties, // Pass RudderProperty directly + properties: properties, // Pass RudderProperty directly ); expect(result, isTrue); - // Verify that the track method is called with the correct parameters - verify(() => mockRudderController.track( - eventName, - properties: rudderProperties, // Pass RudderProperty directly - options: null // Assuming options is not used in this case - )).called(1); }); test('screen calls rudderClient.screen', () async { @@ -102,15 +94,14 @@ void main() { const String dataPlaneUrl = 'wrong_url'; const String writeKey = 'test_write_key'; - when(() => mockRudderController.initialize(any(), config: any(named: 'config'))) - .thenThrow(Exception()); + when(() => mockRudderController.initialize(any(), + config: any(named: 'config'))).thenThrow(Exception()); final bool result = await derivRudderstack.setup( const RudderstackConfiguration( dataPlaneUrl: dataPlaneUrl, writeKey: writeKey)); expect(result, false); - }); test('reset calls rudderClient.reset', () async { From 7a77483fd462dd5d2f0819bc83bac29e3a2b8552 Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Thu, 13 Jun 2024 09:49:22 +0800 Subject: [PATCH 04/18] chore(version): bump version and update changelog (#609) --- CHANGELOG.md | 34 +++++++++++++++++++++++ README.md | 8 +++--- packages/analytics/CHANGELOG.md | 6 ++++ packages/analytics/pubspec.yaml | 2 +- packages/deriv_auth/CHANGELOG.md | 4 +++ packages/deriv_auth/pubspec.yaml | 6 ++-- packages/deriv_localizations/CHANGELOG.md | 4 +++ packages/deriv_localizations/pubspec.yaml | 2 +- packages/deriv_passkeys/CHANGELOG.md | 4 +++ packages/deriv_passkeys/pubspec.yaml | 4 +-- 10 files changed, 63 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ae8ebebb..d537528a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2024-06-13 + +### Changes + +--- + +Packages with breaking changes: + + - [`analytics` - `v2.0.0`](#analytics---v200) + +Packages with other changes: + + - [`deriv_localizations` - `v1.4.2`](#deriv_localizations---v142) + - [`deriv_auth` - `v6.6.5`](#deriv_auth---v665) + - [`deriv_passkeys` - `v0.0.1+6`](#deriv_passkeys---v0016) + +Packages with dependency updates only: + +> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project. + + - `deriv_auth` - `v6.6.5` + - `deriv_passkeys` - `v0.0.1+6` + +--- + +#### `analytics` - `v2.0.0` + + - **BREAKING** **REFACTOR**(analytics): added logAppOpen event ([#610](https://github.com/regentmarkets/flutter-deriv-packages/issues/610)). ([74f8d9c3](https://github.com/regentmarkets/flutter-deriv-packages/commit/74f8d9c3a7311ec7abb1cfe76c3f6f190fbcb81a)) + +#### `deriv_localizations` - `v1.4.2` + + - **FIX**(deriv-localization): fix passkey button strings ([#606](https://github.com/regentmarkets/flutter-deriv-packages/issues/606)). ([ed2a7ea9](https://github.com/regentmarkets/flutter-deriv-packages/commit/ed2a7ea958e34aa027ecb9ef6919f04fd5c7d5f1)) + + ## 2024-06-07 ### Changes diff --git a/README.md b/README.md index 35951c110..e99c9d14e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository contains private packages & plugins that are used by the company ## Using the packages -Each package has been released as git tag with convention as **packageName-vVersionNumber**`(Example: deriv_auth-v6.6.4)`. To use the package, add the following to your pubspec.yaml file: +Each package has been released as git tag with convention as **packageName-vVersionNumber**`(Example: deriv_auth-v6.6.5)`. To use the package, add the following to your pubspec.yaml file: ```yaml @@ -19,8 +19,8 @@ deriv_ui: | Name | Description | Version | | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | -| [analytics](./packages/analytics) | Used to collect and send analytical information to 'Firebase' and 'Segment'. | [v1.0.4](./packages/analytics/CHANGELOG.md) | -| [deriv_auth](./packages/deriv_auth) | A Dart package that provides Authentication logic for Deriv applications. | [v6.6.4 ](./packages/deriv_auth/CHANGELOG.md) | +| [analytics](./packages/analytics) | Used to collect and send analytical information to 'Firebase' and 'Segment'. | [v2.0.0](./packages/analytics/CHANGELOG.md) | +| [deriv_auth](./packages/deriv_auth) | A Dart package that provides Authentication logic for Deriv applications. | [v6.6.5 ](./packages/deriv_auth/CHANGELOG.md) | | [deriv_banner](./packages/deriv_banner) | A widget to show banner in apps. | [v0.0.1+1](./packages/deriv_banner/CHANGELOG.md) | | [deriv_bloc_manager](./packages/deriv_bloc_manager) | Provides some tools to manage blocs. | [v0.0.1](./packages/deriv_bloc_manager/CHANGELOG.md) | | [deriv_datadog](./packages/deriv_datadog) | A package that helps you monitor the performance and user interactions of your Flutter app by sending data to Datadog. | [v0.0.1](./packages/deriv_datadog/CHANGELOG.md) | @@ -32,7 +32,7 @@ deriv_ui: | [deriv_lint](./packages/deriv_lint) | A Dart package that provides lint rules for Dart and Flutter. | [v1.0.0](./packages/deriv_lint/CHANGELOG.md) | | [deriv_live_chat](./packages/deriv_live_chat) | A plugin for live chat SDK support to dart. | [v0.0.1+2](./packages/deriv_live_chat/CHANGELOG.md) | | [deriv_language_selector](./packages/deriv_language_selector) | A package to handle language change of the app. | [v0.0.2+4](./packages/deriv_language_selector/CHANGELOG.md) | -| [deriv_localizations](./packages/deriv_localizations) | A Package that contains the localization arb(coming from Crowdin) and dart generated files for flutter_deriv_packages. | [v1.1.1](./packages/deriv_localizations/CHANGELOG.md) | | [v1.4.1](./packages/deriv_localizations/CHANGELOG.md) | +| [deriv_localizations](./packages/deriv_localizations) | A Package that contains the localization arb(coming from Crowdin) and dart generated files for flutter_deriv_packages. | [v1.1.1](./packages/deriv_localizations/CHANGELOG.md) | | [v1.4.2](./packages/deriv_localizations/CHANGELOG.md) | | [deriv_numpad](./packages/deriv_numpad) | Number Pad Widget for number input. | [v1.1.5](./packages/deriv_numpad/CHANGELOG.md) | | [deriv_rudderstack](./packages/deriv_rudderstack) | A plugin that add RudderStack SDK support to Flutter. | [v1.1.0](./packages/deriv_rudderstack/CHANGELOG.md) | | [deriv_store_launcher](./packages/deriv_store_launcher) | A plugin to launch app stores base on platform and manufacturer. | [v0.0.1+1](./packages/deriv_store_launcher/CHANGELOG.md) | diff --git a/packages/analytics/CHANGELOG.md b/packages/analytics/CHANGELOG.md index b928744a3..37d435e42 100644 --- a/packages/analytics/CHANGELOG.md +++ b/packages/analytics/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.0.0 + +> Note: This release has breaking changes. + + - **BREAKING** **REFACTOR**(analytics): added logAppOpen event ([#610](https://github.com/regentmarkets/flutter-deriv-packages/issues/610)). ([74f8d9c3](https://github.com/regentmarkets/flutter-deriv-packages/commit/74f8d9c3a7311ec7abb1cfe76c3f6f190fbcb81a)) + ## 1.0.2 - **REVERT**(analytics): versioning and CHANGELOG. ([81a3a0df](https://github.com/regentmarkets/flutter-deriv-packages/commit/81a3a0df27208bd200009415855c6cb944d016e3)) diff --git a/packages/analytics/pubspec.yaml b/packages/analytics/pubspec.yaml index 78fad43c4..c49dcbcb8 100644 --- a/packages/analytics/pubspec.yaml +++ b/packages/analytics/pubspec.yaml @@ -1,6 +1,6 @@ name: analytics description: A new Flutter package for collecting and sending analytical information from the app. -version: 1.0.4 +version: 2.0.0 homepage: https://deriv.com/ publish_to: "none" diff --git a/packages/deriv_auth/CHANGELOG.md b/packages/deriv_auth/CHANGELOG.md index d40b88f1d..c8fa3df85 100644 --- a/packages/deriv_auth/CHANGELOG.md +++ b/packages/deriv_auth/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.6.5 + + - Update a dependency to the latest release. + ## 6.6.4 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_auth/pubspec.yaml b/packages/deriv_auth/pubspec.yaml index c2c5d4df1..a030278b1 100644 --- a/packages/deriv_auth/pubspec.yaml +++ b/packages/deriv_auth/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_auth description: Provides deriv authentication functionalities for dart/flutter apps. -version: 6.6.4 +version: 6.6.5 environment: sdk: ">=3.0.0 <4.0.0" @@ -45,13 +45,13 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_localizations - ref: deriv_localizations-v1.4.1 + ref: deriv_localizations-v1.4.2 deriv_passkeys: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_passkeys - ref: deriv_passkeys-v0.0.1+5 + ref: deriv_passkeys-v0.0.1+6 deriv_language_selector: git: diff --git a/packages/deriv_localizations/CHANGELOG.md b/packages/deriv_localizations/CHANGELOG.md index 2feffb3f2..e94a2228a 100644 --- a/packages/deriv_localizations/CHANGELOG.md +++ b/packages/deriv_localizations/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.2 + + - **FIX**(deriv-localization): fix passkey button strings ([#606](https://github.com/regentmarkets/flutter-deriv-packages/issues/606)). ([ed2a7ea9](https://github.com/regentmarkets/flutter-deriv-packages/commit/ed2a7ea958e34aa027ecb9ef6919f04fd5c7d5f1)) + ## 1.4.1 - **REFACTOR**(deriv_auth): update localization ([#594](https://github.com/regentmarkets/flutter-deriv-packages/issues/594)). ([5204c74f](https://github.com/regentmarkets/flutter-deriv-packages/commit/5204c74f609d946ea797e766e6bb652d82f76930)) diff --git a/packages/deriv_localizations/pubspec.yaml b/packages/deriv_localizations/pubspec.yaml index 7db5a04da..b1f2eaadd 100644 --- a/packages/deriv_localizations/pubspec.yaml +++ b/packages/deriv_localizations/pubspec.yaml @@ -3,7 +3,7 @@ description: This packages contains all localizations for the deriv packages publish_to: 'none' -version: 1.4.1 +version: 1.4.2 environment: sdk: '>=3.0.2 <4.0.0' diff --git a/packages/deriv_passkeys/CHANGELOG.md b/packages/deriv_passkeys/CHANGELOG.md index 22d270ed0..af76698cc 100644 --- a/packages/deriv_passkeys/CHANGELOG.md +++ b/packages/deriv_passkeys/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.1+6 + + - Update a dependency to the latest release. + ## 0.0.1+5 - **REFACTOR**: update dependencies. ([af89e148](https://github.com/regentmarkets/flutter-deriv-packages/commit/af89e148dfecb6dbc8552b2b883cbad4102a56f8)) diff --git a/packages/deriv_passkeys/pubspec.yaml b/packages/deriv_passkeys/pubspec.yaml index ea509b874..4bbdc7a95 100644 --- a/packages/deriv_passkeys/pubspec.yaml +++ b/packages/deriv_passkeys/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_passkeys description: Deriv Passkeys Flutter Plugin -version: 0.0.1+5 +version: 0.0.1+6 publish_to: "none" environment: @@ -19,7 +19,7 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_localizations - ref: deriv_localizations-v1.4.1 + ref: deriv_localizations-v1.4.2 deriv_ui: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git From a4026a9d8164abc1c66beb327d48610d8ce30dde Mon Sep 17 00:00:00 2001 From: abedelaziz-deriv <135210555+abedelaziz-deriv@users.noreply.github.com> Date: Thu, 13 Jun 2024 16:25:47 +0800 Subject: [PATCH 05/18] refactor(deriv_auth): added a flag to allow hiding passkeys button (#612) --- .../login/presentation/layouts/deriv_login_layout.dart | 9 +++++++-- packages/deriv_auth/pubspec.yaml | 2 -- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/deriv_auth/lib/features/login/presentation/layouts/deriv_login_layout.dart b/packages/deriv_auth/lib/features/login/presentation/layouts/deriv_login_layout.dart index 2e269c7d2..9bf31f9a6 100644 --- a/packages/deriv_auth/lib/features/login/presentation/layouts/deriv_login_layout.dart +++ b/packages/deriv_auth/lib/features/login/presentation/layouts/deriv_login_layout.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:deriv_auth/deriv_auth.dart'; -import 'package:deriv_auth/features/single_entry/core/auth_data.dart'; import 'package:deriv_passkeys/deriv_passkeys.dart'; import 'package:deriv_theme/deriv_theme.dart'; import 'package:deriv_ui/deriv_ui.dart'; @@ -23,6 +22,7 @@ class DerivLoginLayout extends StatefulWidget { this.isForgotPasswordEnabled = true, this.isCreateAccountEnabled = true, this.isSocialAuthEnabled = true, + this.isPasskeysEnabled = true, this.authErrorStateHandler, this.onLoginError, this.onLoginTapped, @@ -69,6 +69,9 @@ class DerivLoginLayout extends StatefulWidget { /// Whether to display create account section. final bool isCreateAccountEnabled; + /// Whether to display passkey button. + final bool isPasskeysEnabled; + /// Social auth state handler. final Function(SocialAuthState) socialAuthStateHandler; @@ -158,7 +161,9 @@ class _DerivLoginLayoutState extends State { ), if (widget.isSocialAuthEnabled) const SizedBox(height: ThemeProvider.margin24), - const ContinueWithPasskeyButton(), + widget.isPasskeysEnabled + ? const ContinueWithPasskeyButton() + : const SizedBox.shrink(), DerivSocialAuthPanel( socialAuthStateHandler: widget.socialAuthStateHandler, redirectURL: widget.redirectURL, diff --git a/packages/deriv_auth/pubspec.yaml b/packages/deriv_auth/pubspec.yaml index a030278b1..9cc2a927f 100644 --- a/packages/deriv_auth/pubspec.yaml +++ b/packages/deriv_auth/pubspec.yaml @@ -80,8 +80,6 @@ dev_dependencies: bloc_test: ^9.1.6 flutter_test: sdk: flutter - integration_test: - sdk: flutter flutter_lints: ^2.0.0 patrol_finders: ^1.0.0 From 59d9f6581cdc876cf07c3f919f9a6bc1a92d2b0a Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Fri, 14 Jun 2024 09:51:31 +0800 Subject: [PATCH 06/18] chore(deriv_localizations): Crowdin Localization Updated (#604) --- .../lib/l10n/deriv_auth/app_pt.arb | 2 +- .../lib/l10n/deriv_passkeys/app_ar.arb | 2 +- .../lib/l10n/deriv_passkeys/app_es.arb | 2 +- .../lib/l10n/deriv_passkeys/app_fr.arb | 2 +- .../lib/l10n/deriv_passkeys/app_ko.arb | 2 +- .../lib/l10n/deriv_passkeys/app_pt.arb | 12 ++++++------ .../lib/l10n/deriv_passkeys/app_th.arb | 2 +- .../lib/l10n/deriv_passkeys/app_vi.arb | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/deriv_localizations/lib/l10n/deriv_auth/app_pt.arb b/packages/deriv_localizations/lib/l10n/deriv_auth/app_pt.arb index 6778e490c..08888e070 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_auth/app_pt.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_auth/app_pt.arb @@ -13,7 +13,7 @@ "actionOk": "OK", "warnNotAvailableCountries": "Em caso de dúvidas, contacte-nos via ", "labelLiveChat": "Live chat", - "actionSignUpForFree": "Cadastre-se gratuitamente", + "actionSignUpForFree": "Registe-se gratuitamente", "actionLogin": "Iniciar sessão", "labelTwoFactorAuth": "Autenticação de dois fatores", "informEnterTwoFactorAuthCode": "Introduza o código de 6 dígitos da aplicação de autenticação no seu telemóvel.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb index 837439327..70fe56ad1 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb @@ -52,7 +52,7 @@ "rename": "إعادة تسمية", "revoke": "إلغاء", "continueTradingButtonText": "استمر في التداول", - "addMorePasskeysButtonText": "أضف المزيد من Passkeys", + "addMorePasskeysButtonText": "أضف المزيد من passkeys", "unableToSetupPasskey": "تعذر إعداد مفتاح Passkey", "unableToSetupPasskeyDescription": "لقد واجهنا مشكلة أثناء إعداد Passkey الخاص بك. ربما تمت مقاطعة العملية، أو ربما انتهت مهلة الجلسة. يرجى المحاولة مرة أخرى.", "passkeysOffErrorTitle": "خدمة Passkeys غير متوفرة", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb index bd11a3527..79dbfdd44 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb @@ -51,7 +51,7 @@ "lastUsed": "Utilizado por última vez", "rename": "Renombrar", "revoke": "Revocar", - "continueTradingButtonText": "Seguir operando", + "continueTradingButtonText": "Continúe operando", "addMorePasskeysButtonText": "Añadir más Passkeys", "unableToSetupPasskey": "No se puede configurar la passkey", "unableToSetupPasskeyDescription": "Hemos encontrado un problema al configurar su passkey. Es posible que el proceso se haya interrumpido o que la sesión haya expirado. Por favor, inténtelo de nuevo.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb index a9c315fe4..735033020 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb @@ -52,7 +52,7 @@ "rename": "Renommer", "revoke": "Révoquer", "continueTradingButtonText": "Poursuivre les opérations de trading", - "addMorePasskeysButtonText": "Ajouter d'autres Passkeys", + "addMorePasskeysButtonText": "Ajouter plus de Passkeys", "unableToSetupPasskey": "Impossible de configurer la Passkey", "unableToSetupPasskeyDescription": "Nous avons rencontré un problème lors de l'établissement de votre Passkey. Il se peut que le processus ait été interrompu ou que la session ait expiré. Veuillez réessayer.", "passkeysOffErrorTitle": "Le service Passkeys est indisponible", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb index a425d9c1f..4251a31f3 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb @@ -52,7 +52,7 @@ "rename": "이름 변경", "revoke": "철회", "continueTradingButtonText": "계속 거래하기", - "addMorePasskeysButtonText": "더 많은 Passkeys", + "addMorePasskeysButtonText": "더 많은 passkeys", "unableToSetupPasskey": "Passkey를 설정할 수 없습니다", "unableToSetupPasskeyDescription": "Passkey를 설정하는 동안 문제가 발생했습니다. 프로세스가 중단되었거나 세션 시간이 초과되었을 수 있습니다. 다시 시도해 주시기 바랍니다.", "passkeysOffErrorTitle": "Passkeys 서비스를 이용할 수 없습니다", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb index da5958826..7ff6f085b 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb @@ -45,18 +45,18 @@ "noNeedToRememberPassword": "Não memorizar a palavra-passe", "useYourBiometrics": "Segurança reforçada com dados biométricos ou bloqueio do ecrã", "syncAcrossDevices": "Sincronizar entre dispositivos", - "createPasskey": "Crie passkey", + "createPasskey": "Criar passkey", "unsupportedPlatform": "Plataforma não suportada", "storedOn": "Armazenado em", "lastUsed": "Última utilização", "rename": "Renomear", "revoke": "Revogar", - "continueTradingButtonText": "Continue a negociar", - "addMorePasskeysButtonText": "Adicionar Mais Passkeys", + "continueTradingButtonText": "Continuar a negociar", + "addMorePasskeysButtonText": "Adicionar mais passkeys", "unableToSetupPasskey": "Não é possível configurar a passkey", - "unableToSetupPasskeyDescription": "Encontramos um problema ao configurar sua passkey. O processo pode ter sido interrompido ou a sessão expirou. Por favor, tente novamente.", + "unableToSetupPasskeyDescription": "Houve um problema ao configurar a sua passkey. O processo pode ter sido interrompido ou a sessão expirou. Por favor, tente novamente.", "passkeysOffErrorTitle": "O serviço de Passkeys não está disponível", "never": "Nunca", - "unable_to_process_your_request": "Não foi possível processar sua solicitação", - "unable_to_process_your_request_description": "Estamos enfrentando um problema temporário no processamento de sua solicitação. Por favor, tente novamente mais tarde." + "unable_to_process_your_request": "Não foi possível completar o processamento do seu pedido", + "unable_to_process_your_request_description": "Surgiu um problema temporário no processamento do seu pedido. Por favor, tente novamente mais tarde." } \ No newline at end of file diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb index 60ecace66..8657c205d 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb @@ -51,7 +51,7 @@ "lastUsed": "ใช้ครั้งล่าสุด", "rename": "เปลี่ยนชื่อ", "revoke": "เพิกถอน", - "continueTradingButtonText": "ทำการเทรดต่อไป", + "continueTradingButtonText": "ดำเนินการเทรดต่อ", "addMorePasskeysButtonText": "เพิ่มจำนวน Passkey", "unableToSetupPasskey": "ไม่สามารถตั้งค่า Passkey ได้", "unableToSetupPasskeyDescription": "เราพบปัญหาขณะตั้งค่า Passkey ของคุณ กระบวนการอาจถูกขัดจังหวะหรือเซสชั่นหมดเวลา โปรดลองอีกครั้ง", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb index 39a97ff12..d360fe3ce 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb @@ -52,7 +52,7 @@ "rename": "Đổi tên", "revoke": "Thu hồi", "continueTradingButtonText": "Tiếp tục giao dịch", - "addMorePasskeysButtonText": "Thêm nhiều Passkeys", + "addMorePasskeysButtonText": "Thêm passkeys", "unableToSetupPasskey": "Không thể thiết lập passkey", "unableToSetupPasskeyDescription": "Chúng tôi gặp sự cố khi thiết lập passkey của bạn. Quá trình có thể đã bị gián đoạn hoặc phiên đã hết thời gian. Vui lòng thử lại.", "passkeysOffErrorTitle": "Dịch vụ Passkeys không khả dụng", From 5fd85af24394ea68b8b0a7abc854b9c33b791c26 Mon Sep 17 00:00:00 2001 From: abedelaziz-deriv <135210555+abedelaziz-deriv@users.noreply.github.com> Date: Fri, 14 Jun 2024 10:55:30 +0800 Subject: [PATCH 07/18] refactor(deriv_localizations): Update p2p strings for passkeys (#615) --- .../lib/l10n/deriv_passkeys/app_en.arb | 3 +++ .../deriv_auth_localizations_pt.dart | 2 +- .../deriv_passkeys_localizations.dart | 18 ++++++++++++++++ .../deriv_passkeys_localizations_ar.dart | 11 +++++++++- .../deriv_passkeys_localizations_bn.dart | 9 ++++++++ .../deriv_passkeys_localizations_de.dart | 9 ++++++++ .../deriv_passkeys_localizations_en.dart | 9 ++++++++ .../deriv_passkeys_localizations_es.dart | 11 +++++++++- .../deriv_passkeys_localizations_fr.dart | 11 +++++++++- .../deriv_passkeys_localizations_it.dart | 9 ++++++++ .../deriv_passkeys_localizations_ko.dart | 11 +++++++++- .../deriv_passkeys_localizations_pl.dart | 9 ++++++++ .../deriv_passkeys_localizations_pt.dart | 21 +++++++++++++------ .../deriv_passkeys_localizations_ru.dart | 9 ++++++++ .../deriv_passkeys_localizations_si.dart | 9 ++++++++ .../deriv_passkeys_localizations_sw.dart | 9 ++++++++ .../deriv_passkeys_localizations_th.dart | 11 +++++++++- .../deriv_passkeys_localizations_tr.dart | 9 ++++++++ .../deriv_passkeys_localizations_vi.dart | 11 +++++++++- .../deriv_passkeys_localizations_zh.dart | 9 ++++++++ packages/deriv_localizations/pubspec.yaml | 10 +-------- 21 files changed, 188 insertions(+), 22 deletions(-) diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb index 6a72eb09c..6d5aa4b6c 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_en.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "How to create a passkey?", "howToCreatePasskeyDescription1": "Go to ‘Account Settings’ on Deriv.", "howToCreatePasskeyDescription2": "You can create one passkey per device.", + "p2pHowToCreatePasskey": "How to create passkey?", + "p2pHowToCreatePasskeyDescription1": "Go to ‘Profile‘ in your Deriv P2P app.", + "p2pHowToCreatePasskeyDescription2": "Tap ‘Passkeys‘ to create your passkey.", "whereArePasskeysSaved": "Where are passkeys saved?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google password manager.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud keychain.", diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_auth/deriv_auth_localizations_pt.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_auth/deriv_auth_localizations_pt.dart index 5fcaf3080..a4803dd42 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_auth/deriv_auth_localizations_pt.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_auth/deriv_auth_localizations_pt.dart @@ -22,7 +22,7 @@ class DerivAuthLocalizationsPt extends DerivAuthLocalizations { String get labelLiveChat => 'Live chat'; @override - String get actionSignUpForFree => 'Cadastre-se gratuitamente'; + String get actionSignUpForFree => 'Registe-se gratuitamente'; @override String get actionLogin => 'Iniciar sessão'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart index d9b9d4cfd..731b351f9 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart @@ -237,6 +237,24 @@ abstract class DerivPasskeysLocalizations { /// **'You can create one passkey per device.'** String get howToCreatePasskeyDescription2; + /// No description provided for @p2pHowToCreatePasskey. + /// + /// In en, this message translates to: + /// **'How to create passkey?'** + String get p2pHowToCreatePasskey; + + /// No description provided for @p2pHowToCreatePasskeyDescription1. + /// + /// In en, this message translates to: + /// **'Go to ‘Profile‘ in your Deriv P2P app.'** + String get p2pHowToCreatePasskeyDescription1; + + /// No description provided for @p2pHowToCreatePasskeyDescription2. + /// + /// In en, this message translates to: + /// **'Tap ‘Passkeys‘ to create your passkey.'** + String get p2pHowToCreatePasskeyDescription2; + /// No description provided for @whereArePasskeysSaved. /// /// In en, this message translates to: diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ar.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ar.dart index e99ec19f7..8d24a63b6 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ar.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ar.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsAr extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'يمكنك إنشاء Passkey واحد لكل جهاز.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'أين يتم حفظ passkeys؟'; @@ -142,7 +151,7 @@ class DerivPasskeysLocalizationsAr extends DerivPasskeysLocalizations { String get continueTradingButtonText => 'استمر في التداول'; @override - String get addMorePasskeysButtonText => 'أضف المزيد من Passkeys'; + String get addMorePasskeysButtonText => 'أضف المزيد من passkeys'; @override String get unableToSetupPasskey => 'تعذر إعداد مفتاح Passkey'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_bn.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_bn.dart index cb67fd1b3..dd24e0b0f 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_bn.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_bn.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsBn extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Passkey প্রতি ডিভাইসে একটি পাসকি তৈরি করতে পারেন।'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Passkeys কোথায় সংরক্ষণ করা হয়?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_de.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_de.dart index fb68e5a10..6956e7d1c 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_de.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_de.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsDe extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Sie können einen Passkey pro Gerät erstellen.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Wo werden die Passkeys gespeichert?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart index f7967fc63..e8cb6b211 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsEn extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'You can create one passkey per device.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Where are passkeys saved?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_es.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_es.dart index 5a7789649..24d2f4434 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_es.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_es.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsEs extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Puede crear una passkey por dispositivo.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => '¿Dónde se guardan las passkeys?'; @@ -139,7 +148,7 @@ class DerivPasskeysLocalizationsEs extends DerivPasskeysLocalizations { String get revoke => 'Revocar'; @override - String get continueTradingButtonText => 'Seguir operando'; + String get continueTradingButtonText => 'Continúe operando'; @override String get addMorePasskeysButtonText => 'Añadir más Passkeys'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_fr.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_fr.dart index 5f0d05ca6..202aa1b22 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_fr.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_fr.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsFr extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Vous pouvez créer une Passkey par appareil.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Où sont enregistrées les passkeys ?'; @@ -142,7 +151,7 @@ class DerivPasskeysLocalizationsFr extends DerivPasskeysLocalizations { String get continueTradingButtonText => 'Poursuivre les opérations de trading'; @override - String get addMorePasskeysButtonText => 'Ajouter d\'autres Passkeys'; + String get addMorePasskeysButtonText => 'Ajouter plus de Passkeys'; @override String get unableToSetupPasskey => 'Impossible de configurer la Passkey'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_it.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_it.dart index 82d5e22b1..884191c38 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_it.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_it.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsIt extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Può creare una sola Passkey per dispositivo.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Dove vengono salvate la passkey?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ko.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ko.dart index 9187c63c8..ccee517a4 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ko.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ko.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsKo extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => '기기당 하나의 Passkey를 만들 수 있습니다.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Passkeys는 어디에 저장되나요?'; @@ -142,7 +151,7 @@ class DerivPasskeysLocalizationsKo extends DerivPasskeysLocalizations { String get continueTradingButtonText => '계속 거래하기'; @override - String get addMorePasskeysButtonText => '더 많은 Passkeys'; + String get addMorePasskeysButtonText => '더 많은 passkeys'; @override String get unableToSetupPasskey => 'Passkey를 설정할 수 없습니다'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pl.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pl.dart index 9b0255869..e0537c8c6 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pl.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pl.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsPl extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Możesz utworzyć jedno hasło na urządzenie.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Gdzie są zapisywane passkeys?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pt.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pt.dart index d6d15b89a..a7f2a1aea 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pt.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pt.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsPt extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Pode criar uma passkey por dispositivo.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Onde são guardadas as chaves de acesso?'; @@ -121,7 +130,7 @@ class DerivPasskeysLocalizationsPt extends DerivPasskeysLocalizations { String get syncAcrossDevices => 'Sincronizar entre dispositivos'; @override - String get createPasskey => 'Crie passkey'; + String get createPasskey => 'Criar passkey'; @override String get unsupportedPlatform => 'Plataforma não suportada'; @@ -139,16 +148,16 @@ class DerivPasskeysLocalizationsPt extends DerivPasskeysLocalizations { String get revoke => 'Revogar'; @override - String get continueTradingButtonText => 'Continue a negociar'; + String get continueTradingButtonText => 'Continuar a negociar'; @override - String get addMorePasskeysButtonText => 'Adicionar Mais Passkeys'; + String get addMorePasskeysButtonText => 'Adicionar mais passkeys'; @override String get unableToSetupPasskey => 'Não é possível configurar a passkey'; @override - String get unableToSetupPasskeyDescription => 'Encontramos um problema ao configurar sua passkey. O processo pode ter sido interrompido ou a sessão expirou. Por favor, tente novamente.'; + String get unableToSetupPasskeyDescription => 'Houve um problema ao configurar a sua passkey. O processo pode ter sido interrompido ou a sessão expirou. Por favor, tente novamente.'; @override String get passkeysOffErrorTitle => 'O serviço de Passkeys não está disponível'; @@ -157,8 +166,8 @@ class DerivPasskeysLocalizationsPt extends DerivPasskeysLocalizations { String get never => 'Nunca'; @override - String get unable_to_process_your_request => 'Não foi possível processar sua solicitação'; + String get unable_to_process_your_request => 'Não foi possível completar o processamento do seu pedido'; @override - String get unable_to_process_your_request_description => 'Estamos enfrentando um problema temporário no processamento de sua solicitação. Por favor, tente novamente mais tarde.'; + String get unable_to_process_your_request_description => 'Surgiu um problema temporário no processamento do seu pedido. Por favor, tente novamente mais tarde.'; } diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ru.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ru.dart index a3bc588c9..20b92c8b6 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ru.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ru.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsRu extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Вы можете создать один passkey для каждого устройства.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Где хранятся passkeys?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_si.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_si.dart index a6e443611..b33feca49 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_si.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_si.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsSi extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'ඔබට එක් උපාංගයකට එක් passkey එකක් සෑදිය හැක.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Passkey සුරකින්නේ කොහේද?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_sw.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_sw.dart index d60317234..d942e619a 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_sw.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_sw.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsSw extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Unaweza kuunda passkey moja kwa kila kifaa.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Passkeys zimehifadhiwa wapi?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_th.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_th.dart index 8fcd074a0..d12b1e280 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_th.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_th.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsTh extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'คุณสามารถสร้างหนึ่ง Passkey ต่ออุปกรณ์'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Passkey จะถูกบันทึกไว้ที่ไหน?'; @@ -139,7 +148,7 @@ class DerivPasskeysLocalizationsTh extends DerivPasskeysLocalizations { String get revoke => 'เพิกถอน'; @override - String get continueTradingButtonText => 'ทำการเทรดต่อไป'; + String get continueTradingButtonText => 'ดำเนินการเทรดต่อ'; @override String get addMorePasskeysButtonText => 'เพิ่มจำนวน Passkey'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_tr.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_tr.dart index 23bf72ae7..cab12d4e8 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_tr.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_tr.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsTr extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Cihaz başına bir passkey oluşturabilirsiniz.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Passkeys nereye kaydedilir?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_vi.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_vi.dart index beabf3ffc..c017a18cc 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_vi.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_vi.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsVi extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => 'Bạn có thể tạo một passkey cho mỗi thiết bị.'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => 'Passkeys được lưu ở đâu?'; @@ -142,7 +151,7 @@ class DerivPasskeysLocalizationsVi extends DerivPasskeysLocalizations { String get continueTradingButtonText => 'Tiếp tục giao dịch'; @override - String get addMorePasskeysButtonText => 'Thêm nhiều Passkeys'; + String get addMorePasskeysButtonText => 'Thêm passkeys'; @override String get unableToSetupPasskey => 'Không thể thiết lập passkey'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_zh.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_zh.dart index 6e63c2652..31de71f2e 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_zh.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_zh.dart @@ -63,6 +63,15 @@ class DerivPasskeysLocalizationsZh extends DerivPasskeysLocalizations { @override String get howToCreatePasskeyDescription2 => '可以為每個裝置建立一個金鑰。'; + @override + String get p2pHowToCreatePasskey => 'How to create passkey?'; + + @override + String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + + @override + String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + @override String get whereArePasskeysSaved => '金鑰儲存在哪裡?'; diff --git a/packages/deriv_localizations/pubspec.yaml b/packages/deriv_localizations/pubspec.yaml index b1f2eaadd..1009897b9 100644 --- a/packages/deriv_localizations/pubspec.yaml +++ b/packages/deriv_localizations/pubspec.yaml @@ -8,7 +8,6 @@ version: 1.4.2 environment: sdk: '>=3.0.2 <4.0.0' - dependencies: flutter: sdk: flutter @@ -17,18 +16,11 @@ dependencies: sdk: flutter intl: ^0.18.0 - - - cupertino_icons: ^1.0.2 - dev_dependencies: flutter_test: - sdk: flutter - - + sdk: flutter flutter_lints: ^2.0.0 - flutter: uses-material-design: true generate: true From 37157e86a1e37a621a9a9281e959b7d66c7bb71c Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Fri, 14 Jun 2024 11:20:54 +0800 Subject: [PATCH 08/18] chore(version): bump version and update changelog (#614) Co-authored-by: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: abedelaziz-deriv --- CHANGELOG.md | 33 +++++++++++++++++++++++ README.md | 6 ++--- packages/deriv_auth/CHANGELOG.md | 4 +++ packages/deriv_auth/pubspec.yaml | 6 ++--- packages/deriv_localizations/CHANGELOG.md | 4 +++ packages/deriv_localizations/pubspec.yaml | 2 +- packages/deriv_passkeys/CHANGELOG.md | 4 +++ packages/deriv_passkeys/pubspec.yaml | 4 +-- 8 files changed, 54 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d537528a9..d19979ad5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2024-06-14 + +### Changes + +--- + +Packages with breaking changes: + + - There are no breaking changes in this release. + +Packages with other changes: + + - [`deriv_auth` - `v6.6.6`](#deriv_auth---v666) + - [`deriv_localizations` - `v1.4.3`](#deriv_localizations---v143) + - [`deriv_passkeys` - `v0.0.1+7`](#deriv_passkeys---v0017) + +Packages with dependency updates only: + +> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project. + + - `deriv_passkeys` - `v0.0.1+7` + +--- + +#### `deriv_auth` - `v6.6.6` + + - **REFACTOR**(deriv_auth): added a flag to allow hiding passkeys button ([#612](https://github.com/regentmarkets/flutter-deriv-packages/issues/612)). ([a4026a9d](https://github.com/regentmarkets/flutter-deriv-packages/commit/a4026a9d8164abc1c66beb327d48610d8ce30dde)) + +#### `deriv_localizations` - `v1.4.3` + + - **REFACTOR**(deriv_localizations): Update p2p strings for passkeys ([#615](https://github.com/regentmarkets/flutter-deriv-packages/issues/615)). ([5fd85af2](https://github.com/regentmarkets/flutter-deriv-packages/commit/5fd85af24394ea68b8b0a7abc854b9c33b791c26)) + + ## 2024-06-13 ### Changes diff --git a/README.md b/README.md index e99c9d14e..aaf519522 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository contains private packages & plugins that are used by the company ## Using the packages -Each package has been released as git tag with convention as **packageName-vVersionNumber**`(Example: deriv_auth-v6.6.5)`. To use the package, add the following to your pubspec.yaml file: +Each package has been released as git tag with convention as **packageName-vVersionNumber**`(Example: deriv_auth-v6.6.6)`. To use the package, add the following to your pubspec.yaml file: ```yaml @@ -20,7 +20,7 @@ deriv_ui: | Name | Description | Version | | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | | [analytics](./packages/analytics) | Used to collect and send analytical information to 'Firebase' and 'Segment'. | [v2.0.0](./packages/analytics/CHANGELOG.md) | -| [deriv_auth](./packages/deriv_auth) | A Dart package that provides Authentication logic for Deriv applications. | [v6.6.5 ](./packages/deriv_auth/CHANGELOG.md) | +| [deriv_auth](./packages/deriv_auth) | A Dart package that provides Authentication logic for Deriv applications. | [v6.6.6 ](./packages/deriv_auth/CHANGELOG.md) | | [deriv_banner](./packages/deriv_banner) | A widget to show banner in apps. | [v0.0.1+1](./packages/deriv_banner/CHANGELOG.md) | | [deriv_bloc_manager](./packages/deriv_bloc_manager) | Provides some tools to manage blocs. | [v0.0.1](./packages/deriv_bloc_manager/CHANGELOG.md) | | [deriv_datadog](./packages/deriv_datadog) | A package that helps you monitor the performance and user interactions of your Flutter app by sending data to Datadog. | [v0.0.1](./packages/deriv_datadog/CHANGELOG.md) | @@ -32,7 +32,7 @@ deriv_ui: | [deriv_lint](./packages/deriv_lint) | A Dart package that provides lint rules for Dart and Flutter. | [v1.0.0](./packages/deriv_lint/CHANGELOG.md) | | [deriv_live_chat](./packages/deriv_live_chat) | A plugin for live chat SDK support to dart. | [v0.0.1+2](./packages/deriv_live_chat/CHANGELOG.md) | | [deriv_language_selector](./packages/deriv_language_selector) | A package to handle language change of the app. | [v0.0.2+4](./packages/deriv_language_selector/CHANGELOG.md) | -| [deriv_localizations](./packages/deriv_localizations) | A Package that contains the localization arb(coming from Crowdin) and dart generated files for flutter_deriv_packages. | [v1.1.1](./packages/deriv_localizations/CHANGELOG.md) | | [v1.4.2](./packages/deriv_localizations/CHANGELOG.md) | +| [deriv_localizations](./packages/deriv_localizations) | A Package that contains the localization arb(coming from Crowdin) and dart generated files for flutter_deriv_packages. | [v1.1.1](./packages/deriv_localizations/CHANGELOG.md) | | [v1.4.3](./packages/deriv_localizations/CHANGELOG.md) | | [deriv_numpad](./packages/deriv_numpad) | Number Pad Widget for number input. | [v1.1.5](./packages/deriv_numpad/CHANGELOG.md) | | [deriv_rudderstack](./packages/deriv_rudderstack) | A plugin that add RudderStack SDK support to Flutter. | [v1.1.0](./packages/deriv_rudderstack/CHANGELOG.md) | | [deriv_store_launcher](./packages/deriv_store_launcher) | A plugin to launch app stores base on platform and manufacturer. | [v0.0.1+1](./packages/deriv_store_launcher/CHANGELOG.md) | diff --git a/packages/deriv_auth/CHANGELOG.md b/packages/deriv_auth/CHANGELOG.md index c8fa3df85..7450f4532 100644 --- a/packages/deriv_auth/CHANGELOG.md +++ b/packages/deriv_auth/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.6.6 + + - **REFACTOR**(deriv_auth): added a flag to allow hiding passkeys button ([#612](https://github.com/regentmarkets/flutter-deriv-packages/issues/612)). ([a4026a9d](https://github.com/regentmarkets/flutter-deriv-packages/commit/a4026a9d8164abc1c66beb327d48610d8ce30dde)) + ## 6.6.5 - Update a dependency to the latest release. diff --git a/packages/deriv_auth/pubspec.yaml b/packages/deriv_auth/pubspec.yaml index 9cc2a927f..c0290fbbe 100644 --- a/packages/deriv_auth/pubspec.yaml +++ b/packages/deriv_auth/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_auth description: Provides deriv authentication functionalities for dart/flutter apps. -version: 6.6.5 +version: 6.6.6 environment: sdk: ">=3.0.0 <4.0.0" @@ -45,13 +45,13 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_localizations - ref: deriv_localizations-v1.4.2 + ref: deriv_localizations-v1.4.3 deriv_passkeys: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_passkeys - ref: deriv_passkeys-v0.0.1+6 + ref: deriv_passkeys-v0.0.1+7 deriv_language_selector: git: diff --git a/packages/deriv_localizations/CHANGELOG.md b/packages/deriv_localizations/CHANGELOG.md index e94a2228a..87b8793f9 100644 --- a/packages/deriv_localizations/CHANGELOG.md +++ b/packages/deriv_localizations/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.3 + + - **REFACTOR**(deriv_localizations): Update p2p strings for passkeys ([#615](https://github.com/regentmarkets/flutter-deriv-packages/issues/615)). ([5fd85af2](https://github.com/regentmarkets/flutter-deriv-packages/commit/5fd85af24394ea68b8b0a7abc854b9c33b791c26)) + ## 1.4.2 - **FIX**(deriv-localization): fix passkey button strings ([#606](https://github.com/regentmarkets/flutter-deriv-packages/issues/606)). ([ed2a7ea9](https://github.com/regentmarkets/flutter-deriv-packages/commit/ed2a7ea958e34aa027ecb9ef6919f04fd5c7d5f1)) diff --git a/packages/deriv_localizations/pubspec.yaml b/packages/deriv_localizations/pubspec.yaml index 1009897b9..9bc5fadc3 100644 --- a/packages/deriv_localizations/pubspec.yaml +++ b/packages/deriv_localizations/pubspec.yaml @@ -3,7 +3,7 @@ description: This packages contains all localizations for the deriv packages publish_to: 'none' -version: 1.4.2 +version: 1.4.3 environment: sdk: '>=3.0.2 <4.0.0' diff --git a/packages/deriv_passkeys/CHANGELOG.md b/packages/deriv_passkeys/CHANGELOG.md index af76698cc..0affb2840 100644 --- a/packages/deriv_passkeys/CHANGELOG.md +++ b/packages/deriv_passkeys/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.1+7 + + - Update a dependency to the latest release. + ## 0.0.1+6 - Update a dependency to the latest release. diff --git a/packages/deriv_passkeys/pubspec.yaml b/packages/deriv_passkeys/pubspec.yaml index 4bbdc7a95..eed8431a6 100644 --- a/packages/deriv_passkeys/pubspec.yaml +++ b/packages/deriv_passkeys/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_passkeys description: Deriv Passkeys Flutter Plugin -version: 0.0.1+6 +version: 0.0.1+7 publish_to: "none" environment: @@ -19,7 +19,7 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_localizations - ref: deriv_localizations-v1.4.2 + ref: deriv_localizations-v1.4.3 deriv_ui: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git From 8d2c9f3533435ae8af448d777373aa9dffbedf2b Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Fri, 14 Jun 2024 13:37:07 +0800 Subject: [PATCH 09/18] chore(deriv_localizations): Crowdin Localization Updated (#616) --- .../deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_bn.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_de.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_it.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_pl.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_ru.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_si.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_sw.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb | 3 +++ .../deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb | 3 +++ 16 files changed, 48 insertions(+) diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb index 70fe56ad1..a8fcb379d 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ar.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "كيفية إنشاء passkey؟", "howToCreatePasskeyDescription1": "انتقل إلى \"إعدادات الحساب\" على المشتقات.", "howToCreatePasskeyDescription2": "يمكنك إنشاء Passkey واحد لكل جهاز.", + "p2pHowToCreatePasskey": "كيفية إنشاء مفتاح مرور؟", + "p2pHowToCreatePasskeyDescription1": "انتقل إلى «الملف الشخصي» في تطبيق Deriv P2P الخاص بك.", + "p2pHowToCreatePasskeyDescription2": "انقر فوق «مفاتيح المرور» لإنشاء مفتاح المرور الخاص بك.", "whereArePasskeysSaved": "أين يتم حفظ passkeys؟", "whereArePasskeysSavedDescriptionAndroid": "أندرويد: مدير كلمات مرور Google.", "whereArePasskeysSavedDescriptionIOS": "iOS: سلسلة مفاتيح iCloud.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_bn.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_bn.arb index b77e53953..a6c54216d 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_bn.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_bn.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Passkey একটি পাসকি তৈরি করবেন?", "howToCreatePasskeyDescription1": "Deriv 'অ্যাকাউন্ট সেটিংস' এ যান।", "howToCreatePasskeyDescription2": "Passkey প্রতি ডিভাইসে একটি পাসকি তৈরি করতে পারেন।", + "p2pHowToCreatePasskey": "কিভাবে পাসকি তৈরি করবেন?", + "p2pHowToCreatePasskeyDescription1": "আপনার ডেরিভ পি 2 পি অ্যাপের 'প্রোফাইল' এ যান।", + "p2pHowToCreatePasskeyDescription2": "আপনার পাসকি তৈরি করতে 'পাসকিস' এ আলতো চাপুন।", "whereArePasskeysSaved": "Passkeys কোথায় সংরক্ষণ করা হয়?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google পাসওয়ার্ড ম্যানেজার।", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud কীচেন।", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_de.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_de.arb index 4a01dff0d..089fdada3 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_de.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_de.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Wie erstelle ich einen Passkey?", "howToCreatePasskeyDescription1": "Gehen Sie zu 'Kontoeinstellungen' auf Deriv.", "howToCreatePasskeyDescription2": "Sie können einen Passkey pro Gerät erstellen.", + "p2pHowToCreatePasskey": "Wie erstelle ich einen Passkey?", + "p2pHowToCreatePasskeyDescription1": "Gehen Sie in Ihrer Deriv P2P-App zu „Profil“.", + "p2pHowToCreatePasskeyDescription2": "Tippen Sie auf „Hauptschlüssel“, um Ihren Hauptschlüssel zu erstellen.", "whereArePasskeysSaved": "Wo werden die Passkeys gespeichert?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google Passwort-Manager.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud-Schlüsselbund.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb index 79dbfdd44..6e38a39d4 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_es.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "¿Cómo crear una passkey?", "howToCreatePasskeyDescription1": "Vaya a \"Configuración de la cuenta\" en Deriv.", "howToCreatePasskeyDescription2": "Puede crear una passkey por dispositivo.", + "p2pHowToCreatePasskey": "¿Cómo crear una clave de paso?", + "p2pHowToCreatePasskeyDescription1": "Ir a «Perfil» en tu aplicación Deriv P2P.", + "p2pHowToCreatePasskeyDescription2": "Pulsa «Claves de paso» para crear tu clave de paso.", "whereArePasskeysSaved": "¿Dónde se guardan las passkeys?", "whereArePasskeysSavedDescriptionAndroid": "Android: Gestor de contraseñas de Google.", "whereArePasskeysSavedDescriptionIOS": "iOS: Llavero de iCloud.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb index 735033020..8587cdec4 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_fr.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Comment créer une passkey ?", "howToCreatePasskeyDescription1": "Allez dans \"Paramètres du compte\" sur Deriv.", "howToCreatePasskeyDescription2": "Vous pouvez créer une Passkey par appareil.", + "p2pHowToCreatePasskey": "Comment créer une clé d'accès ?", + "p2pHowToCreatePasskeyDescription1": "Accéder à « Profil » dans votre application Deriv P2P.", + "p2pHowToCreatePasskeyDescription2": "Appuyez sur « Clés d'accès » pour créer votre clé d'accès.", "whereArePasskeysSaved": "Où sont enregistrées les passkeys ?", "whereArePasskeysSavedDescriptionAndroid": "Android : Gestionnaire de mots de passe Google.", "whereArePasskeysSavedDescriptionIOS": "iOS : trousseau iCloud.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_it.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_it.arb index 74e475fb9..fef533b5a 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_it.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_it.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Come creare una passkey?", "howToCreatePasskeyDescription1": "Vada a 'Impostazioni del conto' su Deriv.", "howToCreatePasskeyDescription2": "Può creare una sola Passkey per dispositivo.", + "p2pHowToCreatePasskey": "Come creare una passkey?", + "p2pHowToCreatePasskeyDescription1": "Vai a «Profilo» nella tua app Deriv P2P.", + "p2pHowToCreatePasskeyDescription2": "Tocca «Passkey» per creare la tua passkey.", "whereArePasskeysSaved": "Dove vengono salvate la passkey?", "whereArePasskeysSavedDescriptionAndroid": "Android: Gestore di password di Google.", "whereArePasskeysSavedDescriptionIOS": "iOS: Portachiavi iCloud.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb index 4251a31f3..632590e26 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ko.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Passkey는 어떻게 생성할 수 있나요?", "howToCreatePasskeyDescription1": "Deriv의 '계정 설정'으로 이동하세요.", "howToCreatePasskeyDescription2": "기기당 하나의 Passkey를 만들 수 있습니다.", + "p2pHowToCreatePasskey": "암호 키는 어떻게 만드나요?", + "p2pHowToCreatePasskeyDescription1": "Deriv P2P 앱에서 '프로필'로 이동합니다.", + "p2pHowToCreatePasskeyDescription2": "'암호'를 눌러 암호를 생성합니다.", "whereArePasskeysSaved": "Passkeys는 어디에 저장되나요?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google 비밀번호 관리자.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud 키체인.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pl.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pl.arb index 366ed3337..e33a4c2ec 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pl.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pl.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Jak utworzyć passkey?", "howToCreatePasskeyDescription1": "Przejdź do ‘Ustawień konta’ na Deriv.", "howToCreatePasskeyDescription2": "Możesz utworzyć jedno hasło na urządzenie.", + "p2pHowToCreatePasskey": "Jak utworzyć klucz hasłowy?", + "p2pHowToCreatePasskeyDescription1": "Przejdź do „Profil” w aplikacji Deriv P2P.", + "p2pHowToCreatePasskeyDescription2": "Stuknij „Kody haseł”, aby utworzyć klucz hasła.", "whereArePasskeysSaved": "Gdzie są zapisywane passkeys?", "whereArePasskeysSavedDescriptionAndroid": "Android: menedżer haseł Google.", "whereArePasskeysSavedDescriptionIOS": "iOS: pęk kluczy iCloud.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb index 7ff6f085b..dc5e97cbb 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Como criar uma chave de acesso?", "howToCreatePasskeyDescription1": "Aceda às \"Definições de conta\" na Deriv.", "howToCreatePasskeyDescription2": "Pode criar uma passkey por dispositivo.", + "p2pHowToCreatePasskey": "Como criar uma chave de acesso?", + "p2pHowToCreatePasskeyDescription1": "Vá para 'Perfil' em seu aplicativo Deriv P2P.", + "p2pHowToCreatePasskeyDescription2": "Toque em “Chaves de acesso” para criar sua chave de acesso.", "whereArePasskeysSaved": "Onde são guardadas as chaves de acesso?", "whereArePasskeysSavedDescriptionAndroid": "Android: Gestor de palavras-passe do Google.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud keychain.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ru.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ru.arb index 28784d534..2f15a3805 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ru.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_ru.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Как создать passkey?", "howToCreatePasskeyDescription1": "Перейдите в ‘Настройки учетной записи’ на Deriv.", "howToCreatePasskeyDescription2": "Вы можете создать один passkey для каждого устройства.", + "p2pHowToCreatePasskey": "Как создать пароль?", + "p2pHowToCreatePasskeyDescription1": "Перейдите на «Профиль» в приложении Deriv P2P.", + "p2pHowToCreatePasskeyDescription2": "Нажмите «Пароли», чтобы создать свой пароль.", "whereArePasskeysSaved": "Где хранятся passkeys?", "whereArePasskeysSavedDescriptionAndroid": "Android: Менеджер паролей Google.", "whereArePasskeysSavedDescriptionIOS": "iOS: связка ключей iCloud.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_si.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_si.arb index e25b89ec8..578e61384 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_si.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_si.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "නිර්මාණය Passkey කෙසේද?", "howToCreatePasskeyDescription1": "Deriv හි 'ගිණුම් සැකසීම්' වෙත යන්න.", "howToCreatePasskeyDescription2": "ඔබට එක් උපාංගයකට එක් passkey එකක් සෑදිය හැක.", + "p2pHowToCreatePasskey": "මුරපද නිර්මාණය කරන්නේ කෙසේද?", + "p2pHowToCreatePasskeyDescription1": "ඔබේ ඩෙරිව් පී 2 පී යෙදුමේ 'පැතිකඩ' වෙත යන්න.", + "p2pHowToCreatePasskeyDescription2": "ඔබගේ මුරපද නිර්මාණය කිරීම සඳහා 'මුරපද' තට්ටු කරන්න.", "whereArePasskeysSaved": "Passkey සුරකින්නේ කොහේද?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google මුරපද කළමනාකරු.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud යතුරු දාමය.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_sw.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_sw.arb index de772c07f..048f310de 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_sw.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_sw.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Jinsi ya kuunda passkey?", "howToCreatePasskeyDescription1": "Nenda katika 'Mipangilio ya Akaunti' kwenye Deriv.", "howToCreatePasskeyDescription2": "Unaweza kuunda passkey moja kwa kila kifaa.", + "p2pHowToCreatePasskey": "Jinsi ya kuunda passkey?", + "p2pHowToCreatePasskeyDescription1": "Nenda kwenye 'Profaili' katika programu yako ya Deriv P2P.", + "p2pHowToCreatePasskeyDescription2": "Gonga 'Passkeys' ili kuunda nenosiri lako.", "whereArePasskeysSaved": "Passkeys zimehifadhiwa wapi?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google password manager.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud keychain.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb index 8657c205d..b4a8d5c12 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "จะสร้าง Passkey ได้อย่างไร?", "howToCreatePasskeyDescription1": "ไปที่ 'การตั้งค่าบัญชี' บน Deriv", "howToCreatePasskeyDescription2": "คุณสามารถสร้างหนึ่ง Passkey ต่ออุปกรณ์", + "p2pHowToCreatePasskey": "วิธีการสร้างรหัสผ่าน", + "p2pHowToCreatePasskeyDescription1": "ไปที่ 'โปรไฟล์' ในแอป Deriv P2P ของคุณ", + "p2pHowToCreatePasskeyDescription2": "แตะ 'รหัสผ่าน' เพื่อสร้างรหัสผ่านของคุณ", "whereArePasskeysSaved": "Passkey จะถูกบันทึกไว้ที่ไหน?", "whereArePasskeysSavedDescriptionAndroid": "Android: ตัวจัดการรหัสผ่าน Google", "whereArePasskeysSavedDescriptionIOS": "iOS: พวงกุญแจ iCloud", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb index cd9c5aa29..5fd54dbdc 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Passkey nasıl oluşturulur?", "howToCreatePasskeyDescription1": "Deriv'de 'Hesap Ayarları'na gidin.", "howToCreatePasskeyDescription2": "Cihaz başına bir passkey oluşturabilirsiniz.", + "p2pHowToCreatePasskey": "Parola nasıl oluşturulur?", + "p2pHowToCreatePasskeyDescription1": "Deriv P2P uygulamanızdaki 'Profil' bölümüne gidin.", + "p2pHowToCreatePasskeyDescription2": "Parola anahtarınızı oluşturmak için 'Parola Tuşları'na dokunun.", "whereArePasskeysSaved": "Passkeys nereye kaydedilir?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google şifre yöneticisi.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud anahtar zinciri.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb index d360fe3ce..328e50aaa 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_vi.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "Làm thế nào để tạo passkey?", "howToCreatePasskeyDescription1": "Chuyển đến 'Cài đặt tài khoản' trên Deriv.", "howToCreatePasskeyDescription2": "Bạn có thể tạo một passkey cho mỗi thiết bị.", + "p2pHowToCreatePasskey": "Làm thế nào để tạo mật khẩu?", + "p2pHowToCreatePasskeyDescription1": "Chuyển đến 'Hồ sơ' trong ứng dụng Deriv P2P của bạn.", + "p2pHowToCreatePasskeyDescription2": "Nhấn vào 'Phím mật khẩu' để tạo mật khẩu của bạn.", "whereArePasskeysSaved": "Passkeys được lưu ở đâu?", "whereArePasskeysSavedDescriptionAndroid": "Android: Trình quản lý mật khẩu Google.", "whereArePasskeysSavedDescriptionIOS": "iOS: Móc khóa iCloud.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb index d04752476..a49322481 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb @@ -26,6 +26,9 @@ "howToCreatePasskey": "如何建立金鑰?", "howToCreatePasskeyDescription1": "轉到 Deriv 的‘帳戶設定‘。", "howToCreatePasskeyDescription2": "可以為每個裝置建立一個金鑰。", + "p2pHowToCreatePasskey": "如何建立密碼?", + "p2pHowToCreatePasskeyDescription1": "在您的 Deriv P2P 應用程序中轉到「個人資料」。", + "p2pHowToCreatePasskeyDescription2": "點擊「密碼」以建立您的密碼。", "whereArePasskeysSaved": "金鑰儲存在哪裡?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google 密碼管理器。", "whereArePasskeysSavedDescriptionIOS": "iOS:iCloud 鑰匙圈。", From 1d5e5f141640aa00546dcbb31d2db8eb9a994452 Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Fri, 14 Jun 2024 13:53:56 +0800 Subject: [PATCH 10/18] refactor(deriv_localizations): Crowdin Localization Generated (#617) --- .../deriv_passkeys/deriv_passkeys_localizations_ar.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_bn.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_de.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_es.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_fr.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_it.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_ko.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_pl.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_pt.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_ru.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_si.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_sw.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_th.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_tr.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_vi.dart | 6 +++--- .../deriv_passkeys/deriv_passkeys_localizations_zh.dart | 6 +++--- 16 files changed, 48 insertions(+), 48 deletions(-) diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ar.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ar.dart index 8d24a63b6..125ab7043 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ar.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ar.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsAr extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'يمكنك إنشاء Passkey واحد لكل جهاز.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'كيفية إنشاء مفتاح مرور؟'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'انتقل إلى «الملف الشخصي» في تطبيق Deriv P2P الخاص بك.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'انقر فوق «مفاتيح المرور» لإنشاء مفتاح المرور الخاص بك.'; @override String get whereArePasskeysSaved => 'أين يتم حفظ passkeys؟'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_bn.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_bn.dart index dd24e0b0f..35a823892 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_bn.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_bn.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsBn extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Passkey প্রতি ডিভাইসে একটি পাসকি তৈরি করতে পারেন।'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'কিভাবে পাসকি তৈরি করবেন?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'আপনার ডেরিভ পি 2 পি অ্যাপের \'প্রোফাইল\' এ যান।'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'আপনার পাসকি তৈরি করতে \'পাসকিস\' এ আলতো চাপুন।'; @override String get whereArePasskeysSaved => 'Passkeys কোথায় সংরক্ষণ করা হয়?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_de.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_de.dart index 6956e7d1c..c7daa5576 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_de.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_de.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsDe extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Sie können einen Passkey pro Gerät erstellen.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Wie erstelle ich einen Passkey?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Gehen Sie in Ihrer Deriv P2P-App zu „Profil“.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Tippen Sie auf „Hauptschlüssel“, um Ihren Hauptschlüssel zu erstellen.'; @override String get whereArePasskeysSaved => 'Wo werden die Passkeys gespeichert?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_es.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_es.dart index 24d2f4434..a3a229182 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_es.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_es.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsEs extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Puede crear una passkey por dispositivo.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => '¿Cómo crear una clave de paso?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Ir a «Perfil» en tu aplicación Deriv P2P.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Pulsa «Claves de paso» para crear tu clave de paso.'; @override String get whereArePasskeysSaved => '¿Dónde se guardan las passkeys?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_fr.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_fr.dart index 202aa1b22..7eca2189e 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_fr.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_fr.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsFr extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Vous pouvez créer une Passkey par appareil.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Comment créer une clé d\'accès ?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Accéder à « Profil » dans votre application Deriv P2P.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Appuyez sur « Clés d\'accès » pour créer votre clé d\'accès.'; @override String get whereArePasskeysSaved => 'Où sont enregistrées les passkeys ?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_it.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_it.dart index 884191c38..56180bfa2 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_it.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_it.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsIt extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Può creare una sola Passkey per dispositivo.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Come creare una passkey?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Vai a «Profilo» nella tua app Deriv P2P.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Tocca «Passkey» per creare la tua passkey.'; @override String get whereArePasskeysSaved => 'Dove vengono salvate la passkey?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ko.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ko.dart index ccee517a4..9634249f2 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ko.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ko.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsKo extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => '기기당 하나의 Passkey를 만들 수 있습니다.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => '암호 키는 어떻게 만드나요?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Deriv P2P 앱에서 \'프로필\'로 이동합니다.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => '\'암호\'를 눌러 암호를 생성합니다.'; @override String get whereArePasskeysSaved => 'Passkeys는 어디에 저장되나요?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pl.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pl.dart index e0537c8c6..6dc9f0359 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pl.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pl.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsPl extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Możesz utworzyć jedno hasło na urządzenie.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Jak utworzyć klucz hasłowy?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Przejdź do „Profil” w aplikacji Deriv P2P.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Stuknij „Kody haseł”, aby utworzyć klucz hasła.'; @override String get whereArePasskeysSaved => 'Gdzie są zapisywane passkeys?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pt.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pt.dart index a7f2a1aea..962bf194d 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pt.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_pt.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsPt extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Pode criar uma passkey por dispositivo.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Como criar uma chave de acesso?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Vá para \'Perfil\' em seu aplicativo Deriv P2P.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Toque em “Chaves de acesso” para criar sua chave de acesso.'; @override String get whereArePasskeysSaved => 'Onde são guardadas as chaves de acesso?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ru.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ru.dart index 20b92c8b6..00bf11e67 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ru.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_ru.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsRu extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Вы можете создать один passkey для каждого устройства.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Как создать пароль?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Перейдите на «Профиль» в приложении Deriv P2P.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Нажмите «Пароли», чтобы создать свой пароль.'; @override String get whereArePasskeysSaved => 'Где хранятся passkeys?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_si.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_si.dart index b33feca49..fd38c8398 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_si.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_si.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsSi extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'ඔබට එක් උපාංගයකට එක් passkey එකක් සෑදිය හැක.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'මුරපද නිර්මාණය කරන්නේ කෙසේද?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'ඔබේ ඩෙරිව් පී 2 පී යෙදුමේ \'පැතිකඩ\' වෙත යන්න.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'ඔබගේ මුරපද නිර්මාණය කිරීම සඳහා \'මුරපද\' තට්ටු කරන්න.'; @override String get whereArePasskeysSaved => 'Passkey සුරකින්නේ කොහේද?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_sw.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_sw.dart index d942e619a..2c04831cc 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_sw.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_sw.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsSw extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Unaweza kuunda passkey moja kwa kila kifaa.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Jinsi ya kuunda passkey?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Nenda kwenye \'Profaili\' katika programu yako ya Deriv P2P.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Gonga \'Passkeys\' ili kuunda nenosiri lako.'; @override String get whereArePasskeysSaved => 'Passkeys zimehifadhiwa wapi?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_th.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_th.dart index d12b1e280..283e39200 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_th.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_th.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsTh extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'คุณสามารถสร้างหนึ่ง Passkey ต่ออุปกรณ์'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'วิธีการสร้างรหัสผ่าน'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'ไปที่ \'โปรไฟล์\' ในแอป Deriv P2P ของคุณ'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'แตะ \'รหัสผ่าน\' เพื่อสร้างรหัสผ่านของคุณ'; @override String get whereArePasskeysSaved => 'Passkey จะถูกบันทึกไว้ที่ไหน?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_tr.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_tr.dart index cab12d4e8..00d289dbc 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_tr.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_tr.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsTr extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Cihaz başına bir passkey oluşturabilirsiniz.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Parola nasıl oluşturulur?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Deriv P2P uygulamanızdaki \'Profil\' bölümüne gidin.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Parola anahtarınızı oluşturmak için \'Parola Tuşları\'na dokunun.'; @override String get whereArePasskeysSaved => 'Passkeys nereye kaydedilir?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_vi.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_vi.dart index c017a18cc..91b548515 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_vi.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_vi.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsVi extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => 'Bạn có thể tạo một passkey cho mỗi thiết bị.'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => 'Làm thế nào để tạo mật khẩu?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => 'Chuyển đến \'Hồ sơ\' trong ứng dụng Deriv P2P của bạn.'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => 'Nhấn vào \'Phím mật khẩu\' để tạo mật khẩu của bạn.'; @override String get whereArePasskeysSaved => 'Passkeys được lưu ở đâu?'; diff --git a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_zh.dart b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_zh.dart index 31de71f2e..6fd607651 100644 --- a/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_zh.dart +++ b/packages/deriv_localizations/lib/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_zh.dart @@ -64,13 +64,13 @@ class DerivPasskeysLocalizationsZh extends DerivPasskeysLocalizations { String get howToCreatePasskeyDescription2 => '可以為每個裝置建立一個金鑰。'; @override - String get p2pHowToCreatePasskey => 'How to create passkey?'; + String get p2pHowToCreatePasskey => '如何建立密碼?'; @override - String get p2pHowToCreatePasskeyDescription1 => 'Go to ‘Profile‘ in your Deriv P2P app.'; + String get p2pHowToCreatePasskeyDescription1 => '在您的 Deriv P2P 應用程序中轉到「個人資料」。'; @override - String get p2pHowToCreatePasskeyDescription2 => 'Tap ‘Passkeys‘ to create your passkey.'; + String get p2pHowToCreatePasskeyDescription2 => '點擊「密碼」以建立您的密碼。'; @override String get whereArePasskeysSaved => '金鑰儲存在哪裡?'; From 7d1b620d3bc2cb838c6850ea94c4ad23eb94b1ca Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Fri, 14 Jun 2024 15:34:09 +0800 Subject: [PATCH 11/18] chore(version): bump version and update changelog (#618) --- CHANGELOG.md | 30 +++++++++++++++++++++++ README.md | 6 ++--- packages/deriv_auth/CHANGELOG.md | 4 +++ packages/deriv_auth/pubspec.yaml | 6 ++--- packages/deriv_localizations/CHANGELOG.md | 4 +++ packages/deriv_localizations/pubspec.yaml | 2 +- packages/deriv_passkeys/CHANGELOG.md | 4 +++ packages/deriv_passkeys/pubspec.yaml | 4 +-- 8 files changed, 51 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d19979ad5..12d955c80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,36 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2024-06-14 + +### Changes + +--- + +Packages with breaking changes: + + - There are no breaking changes in this release. + +Packages with other changes: + + - [`deriv_localizations` - `v1.4.4`](#deriv_localizations---v144) + - [`deriv_auth` - `v6.6.7`](#deriv_auth---v667) + - [`deriv_passkeys` - `v0.0.1+8`](#deriv_passkeys---v0018) + +Packages with dependency updates only: + +> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project. + + - `deriv_auth` - `v6.6.7` + - `deriv_passkeys` - `v0.0.1+8` + +--- + +#### `deriv_localizations` - `v1.4.4` + + - **REFACTOR**(deriv_localizations): Crowdin Localization Generated ([#617](https://github.com/regentmarkets/flutter-deriv-packages/issues/617)). ([1d5e5f14](https://github.com/regentmarkets/flutter-deriv-packages/commit/1d5e5f141640aa00546dcbb31d2db8eb9a994452)) + + ## 2024-06-14 ### Changes diff --git a/README.md b/README.md index aaf519522..564d181a1 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository contains private packages & plugins that are used by the company ## Using the packages -Each package has been released as git tag with convention as **packageName-vVersionNumber**`(Example: deriv_auth-v6.6.6)`. To use the package, add the following to your pubspec.yaml file: +Each package has been released as git tag with convention as **packageName-vVersionNumber**`(Example: deriv_auth-v6.6.7)`. To use the package, add the following to your pubspec.yaml file: ```yaml @@ -20,7 +20,7 @@ deriv_ui: | Name | Description | Version | | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | | [analytics](./packages/analytics) | Used to collect and send analytical information to 'Firebase' and 'Segment'. | [v2.0.0](./packages/analytics/CHANGELOG.md) | -| [deriv_auth](./packages/deriv_auth) | A Dart package that provides Authentication logic for Deriv applications. | [v6.6.6 ](./packages/deriv_auth/CHANGELOG.md) | +| [deriv_auth](./packages/deriv_auth) | A Dart package that provides Authentication logic for Deriv applications. | [v6.6.7 ](./packages/deriv_auth/CHANGELOG.md) | | [deriv_banner](./packages/deriv_banner) | A widget to show banner in apps. | [v0.0.1+1](./packages/deriv_banner/CHANGELOG.md) | | [deriv_bloc_manager](./packages/deriv_bloc_manager) | Provides some tools to manage blocs. | [v0.0.1](./packages/deriv_bloc_manager/CHANGELOG.md) | | [deriv_datadog](./packages/deriv_datadog) | A package that helps you monitor the performance and user interactions of your Flutter app by sending data to Datadog. | [v0.0.1](./packages/deriv_datadog/CHANGELOG.md) | @@ -32,7 +32,7 @@ deriv_ui: | [deriv_lint](./packages/deriv_lint) | A Dart package that provides lint rules for Dart and Flutter. | [v1.0.0](./packages/deriv_lint/CHANGELOG.md) | | [deriv_live_chat](./packages/deriv_live_chat) | A plugin for live chat SDK support to dart. | [v0.0.1+2](./packages/deriv_live_chat/CHANGELOG.md) | | [deriv_language_selector](./packages/deriv_language_selector) | A package to handle language change of the app. | [v0.0.2+4](./packages/deriv_language_selector/CHANGELOG.md) | -| [deriv_localizations](./packages/deriv_localizations) | A Package that contains the localization arb(coming from Crowdin) and dart generated files for flutter_deriv_packages. | [v1.1.1](./packages/deriv_localizations/CHANGELOG.md) | | [v1.4.3](./packages/deriv_localizations/CHANGELOG.md) | +| [deriv_localizations](./packages/deriv_localizations) | A Package that contains the localization arb(coming from Crowdin) and dart generated files for flutter_deriv_packages. | [v1.1.1](./packages/deriv_localizations/CHANGELOG.md) | | [v1.4.4](./packages/deriv_localizations/CHANGELOG.md) | | [deriv_numpad](./packages/deriv_numpad) | Number Pad Widget for number input. | [v1.1.5](./packages/deriv_numpad/CHANGELOG.md) | | [deriv_rudderstack](./packages/deriv_rudderstack) | A plugin that add RudderStack SDK support to Flutter. | [v1.1.0](./packages/deriv_rudderstack/CHANGELOG.md) | | [deriv_store_launcher](./packages/deriv_store_launcher) | A plugin to launch app stores base on platform and manufacturer. | [v0.0.1+1](./packages/deriv_store_launcher/CHANGELOG.md) | diff --git a/packages/deriv_auth/CHANGELOG.md b/packages/deriv_auth/CHANGELOG.md index 7450f4532..c6e1aba6d 100644 --- a/packages/deriv_auth/CHANGELOG.md +++ b/packages/deriv_auth/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.6.7 + + - Update a dependency to the latest release. + ## 6.6.6 - **REFACTOR**(deriv_auth): added a flag to allow hiding passkeys button ([#612](https://github.com/regentmarkets/flutter-deriv-packages/issues/612)). ([a4026a9d](https://github.com/regentmarkets/flutter-deriv-packages/commit/a4026a9d8164abc1c66beb327d48610d8ce30dde)) diff --git a/packages/deriv_auth/pubspec.yaml b/packages/deriv_auth/pubspec.yaml index c0290fbbe..1f953e4b9 100644 --- a/packages/deriv_auth/pubspec.yaml +++ b/packages/deriv_auth/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_auth description: Provides deriv authentication functionalities for dart/flutter apps. -version: 6.6.6 +version: 6.6.7 environment: sdk: ">=3.0.0 <4.0.0" @@ -45,13 +45,13 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_localizations - ref: deriv_localizations-v1.4.3 + ref: deriv_localizations-v1.4.4 deriv_passkeys: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_passkeys - ref: deriv_passkeys-v0.0.1+7 + ref: deriv_passkeys-v0.0.1+8 deriv_language_selector: git: diff --git a/packages/deriv_localizations/CHANGELOG.md b/packages/deriv_localizations/CHANGELOG.md index 87b8793f9..d162f2858 100644 --- a/packages/deriv_localizations/CHANGELOG.md +++ b/packages/deriv_localizations/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.4.4 + + - **REFACTOR**(deriv_localizations): Crowdin Localization Generated ([#617](https://github.com/regentmarkets/flutter-deriv-packages/issues/617)). ([1d5e5f14](https://github.com/regentmarkets/flutter-deriv-packages/commit/1d5e5f141640aa00546dcbb31d2db8eb9a994452)) + ## 1.4.3 - **REFACTOR**(deriv_localizations): Update p2p strings for passkeys ([#615](https://github.com/regentmarkets/flutter-deriv-packages/issues/615)). ([5fd85af2](https://github.com/regentmarkets/flutter-deriv-packages/commit/5fd85af24394ea68b8b0a7abc854b9c33b791c26)) diff --git a/packages/deriv_localizations/pubspec.yaml b/packages/deriv_localizations/pubspec.yaml index 9bc5fadc3..aa2b18e4f 100644 --- a/packages/deriv_localizations/pubspec.yaml +++ b/packages/deriv_localizations/pubspec.yaml @@ -3,7 +3,7 @@ description: This packages contains all localizations for the deriv packages publish_to: 'none' -version: 1.4.3 +version: 1.4.4 environment: sdk: '>=3.0.2 <4.0.0' diff --git a/packages/deriv_passkeys/CHANGELOG.md b/packages/deriv_passkeys/CHANGELOG.md index 0affb2840..467720e5b 100644 --- a/packages/deriv_passkeys/CHANGELOG.md +++ b/packages/deriv_passkeys/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.1+8 + + - Update a dependency to the latest release. + ## 0.0.1+7 - Update a dependency to the latest release. diff --git a/packages/deriv_passkeys/pubspec.yaml b/packages/deriv_passkeys/pubspec.yaml index eed8431a6..a5fe81267 100644 --- a/packages/deriv_passkeys/pubspec.yaml +++ b/packages/deriv_passkeys/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_passkeys description: Deriv Passkeys Flutter Plugin -version: 0.0.1+7 +version: 0.0.1+8 publish_to: "none" environment: @@ -19,7 +19,7 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_localizations - ref: deriv_localizations-v1.4.3 + ref: deriv_localizations-v1.4.4 deriv_ui: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git From ee1b223b9b1b122e6764467054060a275c399241 Mon Sep 17 00:00:00 2001 From: abedelaziz-deriv <135210555+abedelaziz-deriv@users.noreply.github.com> Date: Wed, 19 Jun 2024 10:41:46 +0800 Subject: [PATCH 12/18] chore(deriv_passkeys): Removed unneeded context provider code (#613) --- .../deriv_passkeys/example/ios/Podfile.lock | 4 +-- .../ios/Classes/DerivPasskeysManager.swift | 25 ------------------- .../pages/learn_more_passkeys_page.dart | 21 +++++++++++----- .../states/bloc/deriv_passkeys_bloc.dart | 15 +++++++++-- .../widgets/continue_with_passkey_button.dart | 1 + .../pages/learn_more_passkeys_page_test.dart | 3 +++ 6 files changed, 34 insertions(+), 35 deletions(-) diff --git a/packages/deriv_passkeys/example/ios/Podfile.lock b/packages/deriv_passkeys/example/ios/Podfile.lock index 19b71dc2d..1de363a36 100644 --- a/packages/deriv_passkeys/example/ios/Podfile.lock +++ b/packages/deriv_passkeys/example/ios/Podfile.lock @@ -2,7 +2,7 @@ PODS: - connectivity_plus (0.0.1): - Flutter - ReachabilitySwift - - deriv_passkeys (0.0.1): + - deriv_passkeys (1.0.0): - Flutter - device_info_plus (0.0.1): - Flutter @@ -68,7 +68,7 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d - deriv_passkeys: fadd039a48bae6f15ba8b955481a0f8f2b5bdede + deriv_passkeys: beeafb308b654fcbec61b567697c2b21c797037d device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 flutter_deriv_api: 9e29abd7cc5091b72303f9c8be549618415f1437 diff --git a/packages/deriv_passkeys/ios/Classes/DerivPasskeysManager.swift b/packages/deriv_passkeys/ios/Classes/DerivPasskeysManager.swift index 7cc97ab3d..7b42151d1 100644 --- a/packages/deriv_passkeys/ios/Classes/DerivPasskeysManager.swift +++ b/packages/deriv_passkeys/ios/Classes/DerivPasskeysManager.swift @@ -168,36 +168,11 @@ public class DerivPasskeysManager{ return assertionRequest } - @available(iOS 16.0, *) - private func getPresentationContextProvider() throws -> ASAuthorizationControllerPresentationContextProviding { - let keyWindow = UIApplication.shared.connectedScenes - .filter({$0.activationState == .foregroundActive}) - .map({$0 as? UIWindowScene}) - .compactMap({$0}) - .first?.windows - .filter({$0.isKeyWindow}).first - guard var topController = keyWindow?.rootViewController else { - throw PluginError.notFound("Root view controller") - } - while let presentedViewController = topController.presentedViewController { - topController = presentedViewController - } - if let nav = topController as? UINavigationController { - topController = nav.visibleViewController ?? topController - } - guard let contextProvider = topController as? ASAuthorizationControllerPresentationContextProviding else { - throw PluginError.notFound("Presentation context provider") - } - return contextProvider - } - @available(iOS 16.0, *) private func requestCredential(_ authorizationRequests: [ASAuthorizationRequest]) throws -> ASAuthorizationCredential { let authController = ASAuthorizationController(authorizationRequests: authorizationRequests) let authCtrlDelete = AuthCtrlDelegate() - let contextProvider = try getPresentationContextProvider() authController.delegate = authCtrlDelete - authController.presentationContextProvider = contextProvider authController.performRequests() let result = try authCtrlDelete.getResult() diff --git a/packages/deriv_passkeys/lib/src/presentation/pages/learn_more_passkeys_page.dart b/packages/deriv_passkeys/lib/src/presentation/pages/learn_more_passkeys_page.dart index cc308d638..d4cf3f49b 100644 --- a/packages/deriv_passkeys/lib/src/presentation/pages/learn_more_passkeys_page.dart +++ b/packages/deriv_passkeys/lib/src/presentation/pages/learn_more_passkeys_page.dart @@ -111,13 +111,22 @@ class LearnMorePasskeysPage extends StatelessWidget { ), ), SectionTitleAndContent( - title: context - .derivPasskeysLocalizations.howToCreatePasskey, + title: context.read().isDp2p + ? context.derivPasskeysLocalizations + .p2pHowToCreatePasskey + : context.derivPasskeysLocalizations + .howToCreatePasskey, texts: [ - context.derivPasskeysLocalizations - .howToCreatePasskeyDescription1, - context.derivPasskeysLocalizations - .howToCreatePasskeyDescription2 + context.read().isDp2p + ? context.derivPasskeysLocalizations + .p2pHowToCreatePasskeyDescription1 + : context.derivPasskeysLocalizations + .howToCreatePasskeyDescription1, + context.read().isDp2p + ? context.derivPasskeysLocalizations + .p2pHowToCreatePasskeyDescription2 + : context.derivPasskeysLocalizations + .howToCreatePasskeyDescription2 ], ), Padding( diff --git a/packages/deriv_passkeys/lib/src/presentation/states/bloc/deriv_passkeys_bloc.dart b/packages/deriv_passkeys/lib/src/presentation/states/bloc/deriv_passkeys_bloc.dart index a3dfe172d..cbe09a784 100644 --- a/packages/deriv_passkeys/lib/src/presentation/states/bloc/deriv_passkeys_bloc.dart +++ b/packages/deriv_passkeys/lib/src/presentation/states/bloc/deriv_passkeys_bloc.dart @@ -10,6 +10,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:deriv_passkeys/src/domain/entities/deriv_passkeys_verify_credentials_response_entity.dart'; part 'deriv_passkeys_state.dart'; + part 'deriv_passkeys_event.dart'; /// [DerivPasskeysBloc] handles the state within the DerivPasskeys flow. @@ -17,7 +18,7 @@ class DerivPasskeysBloc extends Bloc { /// Creates a [DerivPasskeysBloc]. DerivPasskeysBloc({ required DerivPasskeysService derivPasskeysService, - required PasskeysConnectionInfoEntity connectionInfo, + required this.connectionInfo, required Future Function() getJwtToken, }) : super(DerivPasskeysLoadingState()) { on( @@ -46,7 +47,7 @@ class DerivPasskeysBloc extends Bloc { await derivPasskeysService .verifyCredential( jwtToken: jwtToken, - passkeysConnectionInfoEntity: connectionInfo, + passkeysConnectionInfoEntity: passkeysConnectionInfo ?? connectionInfo, userAgent: WebSocket.userAgent, ) .then((DerivPasskeysVerifyCredentialsResponseEntity @@ -146,6 +147,16 @@ class DerivPasskeysBloc extends Bloc { }); } + /// Passkeys connection info entity. + final PasskeysConnectionInfoEntity connectionInfo; + /// The list of passkeys. List passkeysList = []; + + /// Passkeys info entity which can be used to assign new changes to the + /// connection info at anytime. + PasskeysConnectionInfoEntity? passkeysConnectionInfo; + + /// Determines whether the app is DP2P or not. + bool get isDp2p => connectionInfo.appId == '1408'; } diff --git a/packages/deriv_passkeys/lib/src/presentation/widgets/continue_with_passkey_button.dart b/packages/deriv_passkeys/lib/src/presentation/widgets/continue_with_passkey_button.dart index c739f35f9..ff9a58655 100644 --- a/packages/deriv_passkeys/lib/src/presentation/widgets/continue_with_passkey_button.dart +++ b/packages/deriv_passkeys/lib/src/presentation/widgets/continue_with_passkey_button.dart @@ -28,6 +28,7 @@ class ContinueWithPasskeyButton extends StatelessWidget { } return InkWell( + key: const Key('continueWithPasskeysButtonKey'), child: Container( padding: const EdgeInsets.symmetric( horizontal: 16, diff --git a/packages/deriv_passkeys/test/presentation/pages/learn_more_passkeys_page_test.dart b/packages/deriv_passkeys/test/presentation/pages/learn_more_passkeys_page_test.dart index b6ae89df7..adc491d2a 100644 --- a/packages/deriv_passkeys/test/presentation/pages/learn_more_passkeys_page_test.dart +++ b/packages/deriv_passkeys/test/presentation/pages/learn_more_passkeys_page_test.dart @@ -43,6 +43,9 @@ void main() { when(() => derivPasskeysBloc.state).thenReturn( DerivPasskeysInitializedState(), ); + when(() => derivPasskeysBloc.isDp2p).thenReturn( + false, + ); }); testWidgets('renders page correctly', (WidgetTester tester) async { From 5a91c24bde607ff37940edf18f8dfac67d3fc4fa Mon Sep 17 00:00:00 2001 From: sagar-deriv <146091240+sagar-deriv@users.noreply.github.com> Date: Thu, 20 Jun 2024 10:36:16 +0400 Subject: [PATCH 13/18] feat(deriv_logger): add ability to print prettified logs in console and UI (#608) --- packages/deriv_logger/.gitignore | 30 + packages/deriv_logger/.metadata | 10 + packages/deriv_logger/CHANGELOG.md | 3 + packages/deriv_logger/LICENSE | 1 + packages/deriv_logger/README.md | 68 ++ packages/deriv_logger/analysis_options.yaml | 4 + .../plugins/GeneratedPluginRegistrant.java | 23 + packages/deriv_logger/example/.gitignore | 44 ++ packages/deriv_logger/example/.metadata | 45 ++ packages/deriv_logger/example/README.md | 16 + .../example/analysis_options.yaml | 29 + .../deriv_logger/example/android/.gitignore | 13 + .../example/android/app/build.gradle | 72 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 33 + .../com/example/example/MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + .../deriv_logger/example/android/build.gradle | 31 + .../example/android/gradle.properties | 3 + .../example/android/settings.gradle | 11 + packages/deriv_logger/example/ios/.gitignore | 34 + .../ios/Flutter/AppFrameworkInfo.plist | 26 + .../example/ios/Flutter/Debug.xcconfig | 1 + .../example/ios/Flutter/Release.xcconfig | 1 + .../ios/Runner.xcodeproj/project.pbxproj | 616 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 98 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 ++++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 295 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 450 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 282 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 462 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 704 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 406 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 586 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 862 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 1674 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 762 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 1226 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 1418 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 ++ .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../example/ios/Runner/Info.plist | 51 ++ .../ios/Runner/Runner-Bridging-Header.h | 1 + .../example/ios/RunnerTests/RunnerTests.swift | 12 + packages/deriv_logger/example/lib/main.dart | 93 +++ packages/deriv_logger/example/pubspec.yaml | 90 +++ .../example/test/widget_test.dart | 30 + .../lib/controllers/logger_controller.dart | 116 ++++ .../deriv_logger/lib/core/app_logger.dart | 171 +++++ packages/deriv_logger/lib/deriv_logger.dart | 5 + .../lib/views/console_log_view.dart | 138 ++++ .../deriv_logger/lib/views/debug_button.dart | 109 ++++ .../deriv_logger/lib/views/debug_overlay.dart | 81 +++ .../deriv_logger/lib/views/logger_theme.dart | 55 ++ packages/deriv_logger/lib/views/views.dart | 4 + packages/deriv_logger/pubspec.yaml | 53 ++ packages/update_checker/pubspec.lock | 42 +- 81 files changed, 2590 insertions(+), 25 deletions(-) create mode 100644 packages/deriv_logger/.gitignore create mode 100644 packages/deriv_logger/.metadata create mode 100644 packages/deriv_logger/CHANGELOG.md create mode 100644 packages/deriv_logger/LICENSE create mode 100644 packages/deriv_logger/README.md create mode 100644 packages/deriv_logger/analysis_options.yaml create mode 100644 packages/deriv_logger/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 packages/deriv_logger/example/.gitignore create mode 100644 packages/deriv_logger/example/.metadata create mode 100644 packages/deriv_logger/example/README.md create mode 100644 packages/deriv_logger/example/analysis_options.yaml create mode 100644 packages/deriv_logger/example/android/.gitignore create mode 100644 packages/deriv_logger/example/android/app/build.gradle create mode 100644 packages/deriv_logger/example/android/app/src/debug/AndroidManifest.xml create mode 100644 packages/deriv_logger/example/android/app/src/main/AndroidManifest.xml create mode 100644 packages/deriv_logger/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt create mode 100644 packages/deriv_logger/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 packages/deriv_logger/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 packages/deriv_logger/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 packages/deriv_logger/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 packages/deriv_logger/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 packages/deriv_logger/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 packages/deriv_logger/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 packages/deriv_logger/example/android/app/src/main/res/values-night/styles.xml create mode 100644 packages/deriv_logger/example/android/app/src/main/res/values/styles.xml create mode 100644 packages/deriv_logger/example/android/app/src/profile/AndroidManifest.xml create mode 100644 packages/deriv_logger/example/android/build.gradle create mode 100644 packages/deriv_logger/example/android/gradle.properties create mode 100644 packages/deriv_logger/example/android/settings.gradle create mode 100644 packages/deriv_logger/example/ios/.gitignore create mode 100644 packages/deriv_logger/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 packages/deriv_logger/example/ios/Flutter/Debug.xcconfig create mode 100644 packages/deriv_logger/example/ios/Flutter/Release.xcconfig create mode 100644 packages/deriv_logger/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/deriv_logger/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/deriv_logger/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/deriv_logger/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/deriv_logger/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 packages/deriv_logger/example/ios/Runner/AppDelegate.swift create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 packages/deriv_logger/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 packages/deriv_logger/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 packages/deriv_logger/example/ios/Runner/Info.plist create mode 100644 packages/deriv_logger/example/ios/Runner/Runner-Bridging-Header.h create mode 100644 packages/deriv_logger/example/ios/RunnerTests/RunnerTests.swift create mode 100644 packages/deriv_logger/example/lib/main.dart create mode 100644 packages/deriv_logger/example/pubspec.yaml create mode 100644 packages/deriv_logger/example/test/widget_test.dart create mode 100644 packages/deriv_logger/lib/controllers/logger_controller.dart create mode 100644 packages/deriv_logger/lib/core/app_logger.dart create mode 100644 packages/deriv_logger/lib/deriv_logger.dart create mode 100644 packages/deriv_logger/lib/views/console_log_view.dart create mode 100644 packages/deriv_logger/lib/views/debug_button.dart create mode 100644 packages/deriv_logger/lib/views/debug_overlay.dart create mode 100644 packages/deriv_logger/lib/views/logger_theme.dart create mode 100644 packages/deriv_logger/lib/views/views.dart create mode 100644 packages/deriv_logger/pubspec.yaml diff --git a/packages/deriv_logger/.gitignore b/packages/deriv_logger/.gitignore new file mode 100644 index 000000000..96486fd93 --- /dev/null +++ b/packages/deriv_logger/.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/deriv_logger/.metadata b/packages/deriv_logger/.metadata new file mode 100644 index 000000000..10542d27f --- /dev/null +++ b/packages/deriv_logger/.metadata @@ -0,0 +1,10 @@ +# 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 and should not be manually edited. + +version: + revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + channel: stable + +project_type: package diff --git a/packages/deriv_logger/CHANGELOG.md b/packages/deriv_logger/CHANGELOG.md new file mode 100644 index 000000000..41cc7d819 --- /dev/null +++ b/packages/deriv_logger/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1 + +* TODO: Describe initial release. diff --git a/packages/deriv_logger/LICENSE b/packages/deriv_logger/LICENSE new file mode 100644 index 000000000..ba75c69f7 --- /dev/null +++ b/packages/deriv_logger/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/packages/deriv_logger/README.md b/packages/deriv_logger/README.md new file mode 100644 index 000000000..495f3c9df --- /dev/null +++ b/packages/deriv_logger/README.md @@ -0,0 +1,68 @@ + + +A debugging package that prints console and network logs in the UI. + +## Features + +- preetify terminal logs +- prints terminal logs in UI + +## Getting started + +Add the package to your pubspec.yaml file + +```yaml +deriv_logger: + git: + url: git@github.com:regentmarkets/flutter-deriv-packages.git + path: packages/deriv_logger +``` + +## Usage + +#### Initialize the App Logger + +```dart +AppLogger.initialize(); +``` + +#### View console logs in UI (Optional) + +In order to enable this, Root widget under `MaterialApp` should be wrapped with DebugOverlay widget. + +```dart +DebugOverlay( + builder: (_) => SplashPage(), + enabled: true, + ), +``` + +#### Use its methods + +```dart +/// Log for information +AppLogger.i('Log message', title: 'Title of logs'); + +/// Log for error +AppLogger.e('Log message', title: 'Title of logs'); + +/// Log for fatal +AppLogger.f('Log message', title: 'Title of logs'); + +/// Log for success +AppLogger.s('Log message', title: 'Title of logs'); + +/// Log for warning +AppLogger.w('Log message', title: 'Title of logs'); +``` diff --git a/packages/deriv_logger/analysis_options.yaml b/packages/deriv_logger/analysis_options.yaml new file mode 100644 index 000000000..a5744c1cf --- /dev/null +++ b/packages/deriv_logger/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/deriv_logger/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/packages/deriv_logger/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 000000000..d007606a4 --- /dev/null +++ b/packages/deriv_logger/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,23 @@ +package io.flutter.plugins; + +import io.flutter.plugin.common.PluginRegistry; + +/** + * Generated file. Do not edit. + */ +public final class GeneratedPluginRegistrant { + public static void registerWith(PluginRegistry registry) { + if (alreadyRegisteredWith(registry)) { + return; + } + } + + private static boolean alreadyRegisteredWith(PluginRegistry registry) { + final String key = GeneratedPluginRegistrant.class.getCanonicalName(); + if (registry.hasPlugin(key)) { + return true; + } + registry.registrarFor(key); + return false; + } +} diff --git a/packages/deriv_logger/example/.gitignore b/packages/deriv_logger/example/.gitignore new file mode 100644 index 000000000..24476c5d1 --- /dev/null +++ b/packages/deriv_logger/example/.gitignore @@ -0,0 +1,44 @@ +# 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 +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# 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/deriv_logger/example/.metadata b/packages/deriv_logger/example/.metadata new file mode 100644 index 000000000..0cffca3b7 --- /dev/null +++ b/packages/deriv_logger/example/.metadata @@ -0,0 +1,45 @@ +# 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: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + base_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + - platform: android + create_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + base_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + - platform: ios + create_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + base_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + - platform: linux + create_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + base_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + - platform: macos + create_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + base_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + - platform: web + create_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + base_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + - platform: windows + create_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + base_revision: 9cd3d0d9ff05768afa249e036acc66e8abe93bff + + # 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/deriv_logger/example/README.md b/packages/deriv_logger/example/README.md new file mode 100644 index 000000000..2b3fce4c8 --- /dev/null +++ b/packages/deriv_logger/example/README.md @@ -0,0 +1,16 @@ +# example + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/packages/deriv_logger/example/analysis_options.yaml b/packages/deriv_logger/example/analysis_options.yaml new file mode 100644 index 000000000..61b6c4de1 --- /dev/null +++ b/packages/deriv_logger/example/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/deriv_logger/example/android/.gitignore b/packages/deriv_logger/example/android/.gitignore new file mode 100644 index 000000000..6f568019d --- /dev/null +++ b/packages/deriv_logger/example/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/packages/deriv_logger/example/android/app/build.gradle b/packages/deriv_logger/example/android/app/build.gradle new file mode 100644 index 000000000..4c908ebc1 --- /dev/null +++ b/packages/deriv_logger/example/android/app/build.gradle @@ -0,0 +1,72 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + namespace "com.example.example" + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/packages/deriv_logger/example/android/app/src/debug/AndroidManifest.xml b/packages/deriv_logger/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..399f6981d --- /dev/null +++ b/packages/deriv_logger/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/packages/deriv_logger/example/android/app/src/main/AndroidManifest.xml b/packages/deriv_logger/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..19b862ec8 --- /dev/null +++ b/packages/deriv_logger/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + diff --git a/packages/deriv_logger/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt b/packages/deriv_logger/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt new file mode 100644 index 000000000..e793a000d --- /dev/null +++ b/packages/deriv_logger/example/android/app/src/main/kotlin/com/example/example/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/packages/deriv_logger/example/android/app/src/main/res/drawable-v21/launch_background.xml b/packages/deriv_logger/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 000000000..f74085f3f --- /dev/null +++ b/packages/deriv_logger/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/deriv_logger/example/android/app/src/main/res/drawable/launch_background.xml b/packages/deriv_logger/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/packages/deriv_logger/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/packages/deriv_logger/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/deriv_logger/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/deriv_logger/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/deriv_logger/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/deriv_logger/example/android/app/src/main/res/mipmap-xxxhdpi/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/deriv_logger/example/android/app/src/main/res/values-night/styles.xml b/packages/deriv_logger/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..06952be74 --- /dev/null +++ b/packages/deriv_logger/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/packages/deriv_logger/example/android/app/src/main/res/values/styles.xml b/packages/deriv_logger/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..cb1ef8805 --- /dev/null +++ b/packages/deriv_logger/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/packages/deriv_logger/example/android/app/src/profile/AndroidManifest.xml b/packages/deriv_logger/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..399f6981d --- /dev/null +++ b/packages/deriv_logger/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/packages/deriv_logger/example/android/build.gradle b/packages/deriv_logger/example/android/build.gradle new file mode 100644 index 000000000..f7eb7f63c --- /dev/null +++ b/packages/deriv_logger/example/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/packages/deriv_logger/example/android/gradle.properties b/packages/deriv_logger/example/android/gradle.properties new file mode 100644 index 000000000..94adc3a3f --- /dev/null +++ b/packages/deriv_logger/example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/packages/deriv_logger/example/android/settings.gradle b/packages/deriv_logger/example/android/settings.gradle new file mode 100644 index 000000000..44e62bcf0 --- /dev/null +++ b/packages/deriv_logger/example/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/packages/deriv_logger/example/ios/.gitignore b/packages/deriv_logger/example/ios/.gitignore new file mode 100644 index 000000000..7a7f9873a --- /dev/null +++ b/packages/deriv_logger/example/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/packages/deriv_logger/example/ios/Flutter/AppFrameworkInfo.plist b/packages/deriv_logger/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000..9625e105d --- /dev/null +++ b/packages/deriv_logger/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/packages/deriv_logger/example/ios/Flutter/Debug.xcconfig b/packages/deriv_logger/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000..592ceee85 --- /dev/null +++ b/packages/deriv_logger/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/packages/deriv_logger/example/ios/Flutter/Release.xcconfig b/packages/deriv_logger/example/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000..592ceee85 --- /dev/null +++ b/packages/deriv_logger/example/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/packages/deriv_logger/example/ios/Runner.xcodeproj/project.pbxproj b/packages/deriv_logger/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..529e6fec8 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ZD5K9ZP6F4; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ZD5K9ZP6F4; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = ZD5K9ZP6F4; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/deriv_logger/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/deriv_logger/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..e42adcb34 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/deriv_logger/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/deriv_logger/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/deriv_logger/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/deriv_logger/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/deriv_logger/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/deriv_logger/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/packages/deriv_logger/example/ios/Runner/AppDelegate.swift b/packages/deriv_logger/example/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..70693e4a8 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 zcmeHN2~<R zh`|8`A_PQ1nSu(UMFx?8j8PC!!VDphaL#`F42fd#7Vlc`zIE4n%Y~eiz4y1j|NDpi z?<@|pSJ-HM`qifhf@m%MamgwK83`XpBA<+azdF#2QsT{X@z0A9Bq>~TVErigKH1~P zRX-!h-f0NJ4Mh++{D}J+K>~~rq}d%o%+4dogzXp7RxX4C>Km5XEI|PAFDmo;DFm6G zzjVoB`@qW98Yl0Kvc-9w09^PrsobmG*Eju^=3f?0o-t$U)TL1B3;sZ^!++3&bGZ!o-*6w?;oOhf z=A+Qb$scV5!RbG+&2S}BQ6YH!FKb0``VVX~T$dzzeSZ$&9=X$3)_7Z{SspSYJ!lGE z7yig_41zpQ)%5dr4ff0rh$@ky3-JLRk&DK)NEIHecf9c*?Z1bUB4%pZjQ7hD!A0r-@NF(^WKdr(LXj|=UE7?gBYGgGQV zidf2`ZT@pzXf7}!NH4q(0IMcxsUGDih(0{kRSez&z?CFA0RVXsVFw3^u=^KMtt95q z43q$b*6#uQDLoiCAF_{RFc{!H^moH_cmll#Fc^KXi{9GDl{>%+3qyfOE5;Zq|6#Hb zp^#1G+z^AXfRKaa9HK;%b3Ux~U@q?xg<2DXP%6k!3E)PA<#4$ui8eDy5|9hA5&{?v z(-;*1%(1~-NTQ`Is1_MGdQ{+i*ccd96ab$R$T3=% zw_KuNF@vI!A>>Y_2pl9L{9h1-C6H8<)J4gKI6{WzGBi<@u3P6hNsXG=bRq5c+z;Gc3VUCe;LIIFDmQAGy+=mRyF++u=drBWV8-^>0yE9N&*05XHZpPlE zxu@?8(ZNy7rm?|<+UNe0Vs6&o?l`Pt>P&WaL~M&#Eh%`rg@Mbb)J&@DA-wheQ>hRV z<(XhigZAT z>=M;URcdCaiO3d^?H<^EiEMDV+7HsTiOhoaMX%P65E<(5xMPJKxf!0u>U~uVqnPN7T!X!o@_gs3Ct1 zlZ_$5QXP4{Aj645wG_SNT&6m|O6~Tsl$q?nK*)(`{J4b=(yb^nOATtF1_aS978$x3 zx>Q@s4i3~IT*+l{@dx~Hst21fR*+5}S1@cf>&8*uLw-0^zK(+OpW?cS-YG1QBZ5q! zgTAgivzoF#`cSz&HL>Ti!!v#?36I1*l^mkrx7Y|K6L#n!-~5=d3;K<;Zqi|gpNUn_ z_^GaQDEQ*jfzh;`j&KXb66fWEk1K7vxQIMQ_#Wu_%3 z4Oeb7FJ`8I>Px;^S?)}2+4D_83gHEq>8qSQY0PVP?o)zAv3K~;R$fnwTmI-=ZLK`= zTm+0h*e+Yfr(IlH3i7gUclNH^!MU>id$Jw>O?2i0Cila#v|twub21@e{S2v}8Z13( zNDrTXZVgris|qYm<0NU(tAPouG!QF4ZNpZPkX~{tVf8xY690JqY1NVdiTtW+NqyRP zZ&;T0ikb8V{wxmFhlLTQ&?OP7 z;(z*<+?J2~z*6asSe7h`$8~Se(@t(#%?BGLVs$p``;CyvcT?7Y!{tIPva$LxCQ&4W z6v#F*);|RXvI%qnoOY&i4S*EL&h%hP3O zLsrFZhv&Hu5tF$Lx!8(hs&?!Kx5&L(fdu}UI5d*wn~A`nPUhG&Rv z2#ixiJdhSF-K2tpVL=)5UkXRuPAFrEW}7mW=uAmtVQ&pGE-&az6@#-(Te^n*lrH^m@X-ftVcwO_#7{WI)5v(?>uC9GG{lcGXYJ~Q8q zbMFl7;t+kV;|;KkBW2!P_o%Czhw&Q(nXlxK9ak&6r5t_KH8#1Mr-*0}2h8R9XNkr zto5-b7P_auqTJb(TJlmJ9xreA=6d=d)CVbYP-r4$hDn5|TIhB>SReMfh&OVLkMk-T zYf%$taLF0OqYF?V{+6Xkn>iX@TuqQ?&cN6UjC9YF&%q{Ut3zv{U2)~$>-3;Dp)*(? zg*$mu8^i=-e#acaj*T$pNowo{xiGEk$%DusaQiS!KjJH96XZ-hXv+jk%ard#fu=@Q z$AM)YWvE^{%tDfK%nD49=PI|wYu}lYVbB#a7wtN^Nml@CE@{Gv7+jo{_V?I*jkdLD zJE|jfdrmVbkfS>rN*+`#l%ZUi5_bMS<>=MBDNlpiSb_tAF|Zy`K7kcp@|d?yaTmB^ zo?(vg;B$vxS|SszusORgDg-*Uitzdi{dUV+glA~R8V(?`3GZIl^egW{a919!j#>f` znL1o_^-b`}xnU0+~KIFLQ)$Q6#ym%)(GYC`^XM*{g zv3AM5$+TtDRs%`2TyR^$(hqE7Y1b&`Jd6dS6B#hDVbJlUXcG3y*439D8MrK!2D~6gn>UD4Imctb z+IvAt0iaW73Iq$K?4}H`7wq6YkTMm`tcktXgK0lKPmh=>h+l}Y+pDtvHnG>uqBA)l zAH6BV4F}v$(o$8Gfo*PB>IuaY1*^*`OTx4|hM8jZ?B6HY;F6p4{`OcZZ(us-RVwDx zUzJrCQlp@mz1ZFiSZ*$yX3c_#h9J;yBE$2g%xjmGF4ca z&yL`nGVs!Zxsh^j6i%$a*I3ZD2SoNT`{D%mU=LKaEwbN(_J5%i-6Va?@*>=3(dQy` zOv%$_9lcy9+(t>qohkuU4r_P=R^6ME+wFu&LA9tw9RA?azGhjrVJKy&8=*qZT5Dr8g--d+S8zAyJ$1HlW3Olryt`yE zFIph~Z6oF&o64rw{>lgZISC6p^CBer9C5G6yq%?8tC+)7*d+ib^?fU!JRFxynRLEZ zj;?PwtS}Ao#9whV@KEmwQgM0TVP{hs>dg(1*DiMUOKHdQGIqa0`yZnHk9mtbPfoLx zo;^V6pKUJ!5#n`w2D&381#5#_t}AlTGEgDz$^;u;-vxDN?^#5!zN9ngytY@oTv!nc zp1Xn8uR$1Z;7vY`-<*?DfPHB;x|GUi_fI9@I9SVRv1)qETbNU_8{5U|(>Du84qP#7 z*l9Y$SgA&wGbj>R1YeT9vYjZuC@|{rajTL0f%N@>3$DFU=`lSPl=Iv;EjuGjBa$Gw zHD-;%YOE@<-!7-Mn`0WuO3oWuL6tB2cpPw~Nvuj|KM@))ixuDK`9;jGMe2d)7gHin zS<>k@!x;!TJEc#HdL#RF(`|4W+H88d4V%zlh(7#{q2d0OQX9*FW^`^_<3r$kabWAB z$9BONo5}*(%kx zOXi-yM_cmB3>inPpI~)duvZykJ@^^aWzQ=eQ&STUa}2uT@lV&WoRzkUoE`rR0)`=l zFT%f|LA9fCw>`enm$p7W^E@U7RNBtsh{_-7vVz3DtB*y#*~(L9+x9*wn8VjWw|Q~q zKFsj1Yl>;}%MG3=PY`$g$_mnyhuV&~O~u~)968$0b2!Jkd;2MtAP#ZDYw9hmK_+M$ zb3pxyYC&|CuAbtiG8HZjj?MZJBFbt`ryf+c1dXFuC z0*ZQhBzNBd*}s6K_G}(|Z_9NDV162#y%WSNe|FTDDhx)K!c(mMJh@h87@8(^YdK$&d*^WQe8Z53 z(|@MRJ$Lk-&ii74MPIs80WsOFZ(NX23oR-?As+*aq6b?~62@fSVmM-_*cb1RzZ)`5$agEiL`-E9s7{GM2?(KNPgK1(+c*|-FKoy}X(D_b#etO|YR z(BGZ)0Ntfv-7R4GHoXp?l5g#*={S1{u-QzxCGng*oWr~@X-5f~RA14b8~B+pLKvr4 zfgL|7I>jlak9>D4=(i(cqYf7#318!OSR=^`xxvI!bBlS??`xxWeg?+|>MxaIdH1U~#1tHu zB{QMR?EGRmQ_l4p6YXJ{o(hh-7Tdm>TAX380TZZZyVkqHNzjUn*_|cb?T? zt;d2s-?B#Mc>T-gvBmQZx(y_cfkXZO~{N zT6rP7SD6g~n9QJ)8F*8uHxTLCAZ{l1Y&?6v)BOJZ)=R-pY=Y=&1}jE7fQ>USS}xP#exo57uND0i*rEk@$;nLvRB@u~s^dwRf?G?_enN@$t* zbL%JO=rV(3Ju8#GqUpeE3l_Wu1lN9Y{D4uaUe`g>zlj$1ER$6S6@{m1!~V|bYkhZA z%CvrDRTkHuajMU8;&RZ&itnC~iYLW4DVkP<$}>#&(`UO>!n)Po;Mt(SY8Yb`AS9lt znbX^i?Oe9r_o=?})IHKHoQGKXsps_SE{hwrg?6dMI|^+$CeC&z@*LuF+P`7LfZ*yr+KN8B4{Nzv<`A(wyR@!|gw{zB6Ha ziwPAYh)oJ(nlqSknu(8g9N&1hu0$vFK$W#mp%>X~AU1ay+EKWcFdif{% z#4!4aoVVJ;ULmkQf!ke2}3hqxLK>eq|-d7Ly7-J9zMpT`?dxo6HdfJA|t)?qPEVBDv z{y_b?4^|YA4%WW0VZd8C(ZgQzRI5(I^)=Ub`Y#MHc@nv0w-DaJAqsbEHDWG8Ia6ju zo-iyr*sq((gEwCC&^TYBWt4_@|81?=B-?#P6NMff(*^re zYqvDuO`K@`mjm_Jd;mW_tP`3$cS?R$jR1ZN09$YO%_iBqh5ftzSpMQQtxKFU=FYmP zeY^jph+g<4>YO;U^O>-NFLn~-RqlHvnZl2yd2A{Yc1G@Ga$d+Q&(f^tnPf+Z7serIU};17+2DU_f4Z z@GaPFut27d?!YiD+QP@)T=77cR9~MK@bd~pY%X(h%L={{OIb8IQmf-!xmZkm8A0Ga zQSWONI17_ru5wpHg3jI@i9D+_Y|pCqVuHJNdHUauTD=R$JcD2K_liQisqG$(sm=k9;L* z!L?*4B~ql7uioSX$zWJ?;q-SWXRFhz2Jt4%fOHA=Bwf|RzhwqdXGr78y$J)LR7&3T zE1WWz*>GPWKZ0%|@%6=fyx)5rzUpI;bCj>3RKzNG_1w$fIFCZ&UR0(7S?g}`&Pg$M zf`SLsz8wK82Vyj7;RyKmY{a8G{2BHG%w!^T|Njr!h9TO2LaP^_f22Q1=l$QiU84ao zHe_#{S6;qrC6w~7{y(hs-?-j?lbOfgH^E=XcSgnwW*eEz{_Z<_xN#0001NP)t-s|Ns9~ z#rXRE|M&d=0au&!`~QyF`q}dRnBDt}*!qXo`c{v z{Djr|@Adh0(D_%#_&mM$D6{kE_x{oE{l@J5@%H*?%=t~i_`ufYOPkAEn!pfkr2$fs z652Tz0001XNklqeeKN4RM4i{jKqmiC$?+xN>3Apn^ z0QfuZLym_5b<*QdmkHjHlj811{If)dl(Z2K0A+ekGtrFJb?g|wt#k#pV-#A~bK=OT ts8>{%cPtyC${m|1#B1A6#u!Q;umknL1chzTM$P~L002ovPDHLkV1lTfnu!1a literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..797d452e458972bab9d994556c8305db4c827017 GIT binary patch literal 406 zcmV;H0crk;P))>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed2d933e1120817fe9182483a228007b18ab6ae GIT binary patch literal 450 zcmV;z0X_bSP)iGWQ_5NJQ_~rNh*z)}eT%KUb z`7gNk0#AwF^#0T0?hIa^`~Ck;!}#m+_uT050aTR(J!bU#|IzRL%^UsMS#KsYnTF*!YeDOytlP4VhV?b} z%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@2Jl;?IEV8)=fG217*|@)CCYgFze-x? zIFODUIA>nWKpE+bn~n7;-89sa>#DR>TSlqWk*!2hSN6D~Qb#VqbP~4Fk&m`@1$JGr zXPIdeRE&b2Thd#{MtDK$px*d3-Wx``>!oimf%|A-&-q*6KAH)e$3|6JV%HX{Hig)k suLT-RhftRq8b9;(V=235Wa|I=027H2wCDra;{X5v07*qoM6N<$f;9x^2LJ#7 literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd7b0099ca80c806f8fe495613e8d6c69460d76 GIT binary patch literal 282 zcmV+#0p(^bcu7P-R4C8Q z&e;xxFbF_Vrezo%_kH*OKhshZ6BFpG-Y1e10`QXJKbND7AMQ&cMj60B5TNObaZxYybcN07*qoM6N<$g3m;S%K!iX literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe730945a01f64a61e2235dbe3f45b08f7729182 GIT binary patch literal 462 zcmV;<0WtoGP)-}iV`2<;=$?g5M=KQbZ{F&YRNy7Nn@%_*5{gvDM0aKI4?ESmw z{NnZg)A0R`+4?NF_RZexyVB&^^ZvN!{I28tr{Vje;QNTz`dG&Jz0~Ek&f2;*Z7>B|cg}xYpxEFY+0YrKLF;^Q+-HreN0P{&i zK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_& zs`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j(!YJ7aXJervHy6HaG_2SB`6CC{He}f zHVw(fJWApwPq!6VY7r1w-Fs)@ox~N+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9 zR%3*Q+)t%S!MU_`id^@&Y{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&)179 zp<)v6Y}pRl100G2FL_t(o!|l{-Q-VMg#&MKg7c{O0 z2wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7hNH;I$;lzDt$}rkaFw1mYK5_0Q(Sut zvbEloxON7$+HSOgC9Z8ltuC&0OSF!-mXv5caV>#bc3@hBPX@I$58-z}(ZZE!t-aOG zpjNkbau@>yEzH(5Yj4kZiMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_st8pKG z(%SHyHdU&v%f36~uERh!bd`!T2dw;z6PrOTQ7Vt*#9F2uHlUVnb#ev_o^fh}Dzmq} zWtlk35}k=?xj28uO|5>>$yXadTUE@@IPpgH`gJ~Ro4>jd1IF|(+IX>8M4Ps{PNvmI zNj4D+XgN83gPt_Gm}`Ybv{;+&yu-C(Grdiahmo~BjG-l&mWM+{e5M1sm&=xduwgM9 z`8OEh`=F3r`^E{n_;%9weN{cf2%7=VzC@cYj+lg>+3|D|_1C@{hcU(DyQG_BvBWe? zvTv``=%b1zrol#=R`JB)>cdjpWt&rLJgVp-t?DREyuq1A%0Z4)6_WsQ7{nzjN zo!X zGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb&Br)s)UIaA}@p{wDda>7=Q|mGRp7pqY zkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw(!`OXJBr45rP>>AQr$6c7slJWvbpNW z@KTwna6d?PP>hvXCcp=4F;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f*5nx ACIA2c literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..502f463a9bc882b461c96aadf492d1729e49e725 GIT binary patch literal 586 zcmV-Q0=4~#P)+}#`wDE{8-2Mebf5<{{PqV{TgVcv*r8?UZ3{-|G?_}T*&y;@cqf{ z{Q*~+qr%%p!1pS*_Uicl#q9lc(D`!D`LN62sNwq{oYw(Wmhk)k<@f$!$@ng~_5)Ru z0Z)trIA5^j{DIW^c+vT2%lW+2<(RtE2wR;4O@)Tm`Xr*?A(qYoM}7i5Yxw>D(&6ou zxz!_Xr~yNF+waPe00049Nkl*;a!v6h%{rlvIH#gW3s8p;bFr=l}mRqpW2h zw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<)=j?(bzDweB7{b+%_ypvm_cG{SvM=DK zhv{K@m>#Bw>2W$eUI#iU)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G! zhkE!s;%oku3;IwG3U^2kw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn`0X*2 zy3(k600_CSZj?O$Qu%&$;|TGUJrptR(HzyIx>5E(2r{eA(<6t3e3I0B)7d6s7?Z5J zZ!rtKvA{MiEBm&KFtoifx>5P^Z=vl)95XJn()aS5%ad(s?4-=Tkis9IGu{`Fy8r+H07*qoM6N<$f20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec303439225b78712f49115768196d8d76f6790 GIT binary patch literal 862 zcmV-k1EKthP)20Z)wqMt%V?S?~D#06};F zA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU z^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^eL_t(&-tE|HQ`%4vfZ;WsBqu-$0nu1R zq^Vj;p$clf^?twn|KHO+IGt^q#a3X?w9dXC@*yxhv&l}F322(8Y1&=P&I}~G@#h6; z1CV9ecD9ZEe87{{NtI*)_aJ<`kJa z?5=RBtFF50s;jQLFil-`)m2wrb=6h(&brpj%nG_U&ut~$?8Rokzxi8zJoWr#2dto5 zOX_URcc<1`Iky+jc;A%Vzx}1QU{2$|cKPom2Vf1{8m`vja4{F>HS?^Nc^rp}xo+Nh zxd}eOm`fm3@MQC1< zIk&aCjb~Yh%5+Yq0`)D;q{#-Uqlv*o+Oor zE!I71Z@ASH3grl8&P^L0WpavHoP|UX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@ zY5!B-0ft0f?Lgb>C;$Ke07*qoM6N<$f~t1N9smFU literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f5fea27c705180eb716271f41b582e76dcbd90 GIT binary patch literal 1674 zcmV;526g#~P){YQnis^a@{&-nmRmq)<&%Mztj67_#M}W?l>kYSliK<%xAp;0j{!}J0!o7b zE>q9${Lb$D&h7k=+4=!ek^n+`0zq>LL1O?lVyea53S5x`Nqqo2YyeuIrQrJj9XjOp z{;T5qbj3}&1vg1VK~#9!?b~^C5-}JC@Pyrv-6dSEqJqT}#j9#dJ@GzT@B8}x zU&J@bBI>f6w6en+CeI)3^kC*U?}X%OD8$Fd$H&LV$H&LV$H&LV#|K5~mLYf|VqzOc zkc7qL~0sOYuM{tG`rYEDV{DWY`Z8&)kW*hc2VkBuY+^Yx&92j&StN}Wp=LD zxoGxXw6f&8sB^u})h@b@z0RBeD`K7RMR9deyL(ZJu#39Z>rT)^>v}Khq8U-IbIvT> z?4pV9qGj=2)TNH3d)=De<+^w;>S7m_eFKTvzeaBeir45xY!^m!FmxnljbSS_3o=g( z->^wC9%qkR{kbGnW8MfFew_o9h3(r55Is`L$8KI@d+*%{=Nx+FXJ98L0PjFIu;rGnnfY zn1R5Qnp<{Jq0M1vX=X&F8gtLmcWv$1*M@4ZfF^9``()#hGTeKeP`1!iED ztNE(TN}M5}3Bbc*d=FIv`DNv&@|C6yYj{sSqUj5oo$#*0$7pu|Dd2TLI>t5%I zIa4Dvr(iayb+5x=j*Vum9&irk)xV1`t509lnPO0%skL8_1c#Xbamh(2@f?4yUI zhhuT5<#8RJhGz4%b$`PJwKPAudsm|at?u;*hGgnA zU1;9gnxVBC)wA(BsB`AW54N{|qmikJR*%x0c`{LGsSfa|NK61pYH(r-UQ4_JXd!Rsz)=k zL{GMc5{h138)fF5CzHEDM>+FqY)$pdN3}Ml+riTgJOLN0F*Vh?{9ESR{SVVg>*>=# zix;VJHPtvFFCRY$Ks*F;VX~%*r9F)W`PmPE9F!(&s#x07n2<}?S{(ygpXgX-&B&OM zONY&BRQ(#%0%jeQs?oJ4P!p*R98>qCy5p8w>_gpuh39NcOlp)(wOoz0sY-Qz55eB~ z7OC-fKBaD1sE3$l-6QgBJO!n?QOTza`!S_YK z_v-lm^7{VO^8Q@M_^8F)09Ki6%=s?2_5eupee(w1FB%aqSweusQ-T+CH0Xt{` zFjMvW{@C&TB)k25()nh~_yJ9coBRL(0oO@HK~z}7?bm5j;y@69;bvlHb2tf!$ReA~x{22wTq550 z?f?Hnw(;m3ip30;QzdV~7pi!wyMYhDtXW#cO7T>|f=bdFhu+F!zMZ2UFj;GUKX7tI z;hv3{q~!*pMj75WP_c}>6)IWvg5_yyg<9Op()eD1hWC19M@?_9_MHec{Z8n3FaF{8 z;u`Mw0ly(uE>*CgQYv{be6ab2LWhlaH1^iLIM{olnag$78^Fd}%dR7;JECQ+hmk|o z!u2&!3MqPfP5ChDSkFSH8F2WVOEf0(E_M(JL17G}Y+fg0_IuW%WQ zG(mG&u?|->YSdk0;8rc{yw2@2Z&GA}z{Wb91Ooz9VhA{b2DYE7RmG zjL}?eq#iX%3#k;JWMx_{^2nNax`xPhByFiDX+a7uTGU|otOvIAUy|dEKkXOm-`aWS z27pUzD{a)Ct<6p{{3)+lq@i`t@%>-wT4r?*S}k)58e09WZYP0{{R3FC5Sl00039P)t-s|Ns9~ z#rP?<_5oL$Q^olD{r_0T`27C={r>*`|Nj71npVa5OTzc(_WfbW_({R{p56NV{r*M2 z_xt?)2V0#0NsfV0u>{42ctGP(8vQj-Btk1n|O0ZD=YLwd&R{Ko41Gr9H= zY@z@@bOAMB5Ltl$E>bJJ{>JP30ZxkmI%?eW{k`b?Wy<&gOo;dS`~CR$Vwb@XWtR|N zi~t=w02?-0&j0TD{>bb6sNwsK*!p?V`RMQUl(*DVjk-9Cx+-z1KXab|Ka2oXhX5f% z`$|e!000AhNklrxs)5QTeTVRiEmz~MKK1WAjCw(c-JK6eox;2O)?`? zTG`AHia671e^vgmp!llKp|=5sVHk#C7=~epA~VAf-~%aPC=%Qw01h8mnSZ|p?hz91 z7p83F3%LVu9;S$tSI$C^%^yud1dfTM_6p2|+5Ejp$bd`GDvbR|xit>i!ZD&F>@CJrPmu*UjD&?DfZs=$@e3FQA(vNiU+$A*%a} z?`XcG2jDxJ_ZQ#Md`H{4Lpf6QBDp81_KWZ6Tk#yCy1)32zO#3<7>b`eT7UyYH1eGz z;O(rH$=QR*L%%ZcBpc=eGua?N55nD^K(8<#gl2+pN_j~b2MHs4#mcLmv%DkspS-3< zpI1F=^9siI0s-;IN_IrA;5xm~3?3!StX}pUv0vkxMaqm+zxrg7X7(I&*N~&dEd0kD z-FRV|g=|QuUsuh>-xCI}vD2imzYIOIdcCVV=$Bz@*u0+Bs<|L^)32nN*=wu3n%Ynw z@1|eLG>!8ruU1pFXUfb`j>(=Gy~?Rn4QJ-c3%3T|(Frd!bI`9u&zAnyFYTqlG#&J7 zAkD(jpw|oZLNiA>;>hgp1KX7-wxC~31II47gc zHcehD6Uxlf%+M^^uN5Wc*G%^;>D5qT{>=uxUhX%WJu^Z*(_Wq9y}npFO{Hhb>s6<9 zNi0pHXWFaVZnb)1+RS&F)xOv6&aeILcI)`k#0YE+?e)5&#r7J#c`3Z7x!LpTc01dx zrdC3{Z;joZ^KN&))zB_i)I9fWedoN>Zl-6_Iz+^G&*ak2jpF07*qoM6N<$f;w%0(f|Me literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0467bf12aa4d28f374bb26596605a46dcbb3e7c8 GIT binary patch literal 1418 zcmV;51$Fv~P)q zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+ zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq z^={4hPQv)y=I|4n+?>7Fim=dxt1 z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf` zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_> z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3 zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62( zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;? zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-< z{s<&cCV_1`^TD^ia9!*mQDq& zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 000000000..0bedcf2fd --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/packages/deriv_logger/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/deriv_logger/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/deriv_logger/example/ios/Runner/Base.lproj/Main.storyboard b/packages/deriv_logger/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/deriv_logger/example/ios/Runner/Info.plist b/packages/deriv_logger/example/ios/Runner/Info.plist new file mode 100644 index 000000000..7f553465b --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Example + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/packages/deriv_logger/example/ios/Runner/Runner-Bridging-Header.h b/packages/deriv_logger/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..308a2a560 --- /dev/null +++ b/packages/deriv_logger/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/packages/deriv_logger/example/ios/RunnerTests/RunnerTests.swift b/packages/deriv_logger/example/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/packages/deriv_logger/example/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/packages/deriv_logger/example/lib/main.dart b/packages/deriv_logger/example/lib/main.dart new file mode 100644 index 000000000..4c799e920 --- /dev/null +++ b/packages/deriv_logger/example/lib/main.dart @@ -0,0 +1,93 @@ +import 'package:deriv_logger/deriv_logger.dart'; +import 'package:flutter/material.dart'; + +void main() { + AppLogger.initialize(); + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), + useMaterial3: true, + ), + home: DebugOverlay( + enabled: true, + builder: (_) => const MyHomePage( + title: 'Flutter Demo Home Page', + ), + ), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({super.key, required this.title}); + + final String title; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + backgroundColor: Theme.of(context).colorScheme.inversePrimary, + title: Text(widget.title), + ), + body: const Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Run this app in debug mode, press any button below and check the debug button and your terminal', + textAlign: TextAlign.center, + ), + ], + ), + ), + floatingActionButton: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + FloatingActionButton( + onPressed: () => AppLogger.i('Information', title: 'Main page'), + tooltip: 'information', + child: const Text('Information'), + ), + FloatingActionButton( + onPressed: () => AppLogger.e('This is error!!', title: 'Main page'), + tooltip: 'error', + child: const Text('Error'), + ), + FloatingActionButton( + onPressed: () => + AppLogger.w('Showing some warning!!', title: 'Main page'), + tooltip: 'warning', + child: const Text('Warning'), + ), + FloatingActionButton( + onPressed: () => + AppLogger.f('This is a fatal message', title: ' Main Page'), + tooltip: 'fatal', + child: const Text('Fatal'), + ), + FloatingActionButton( + onPressed: () => + AppLogger.s('This is a success', title: ' Main Page'), + tooltip: 'success', + child: const Text('Success'), + ), + ], + ), + ); + } +} diff --git a/packages/deriv_logger/example/pubspec.yaml b/packages/deriv_logger/example/pubspec.yaml new file mode 100644 index 000000000..279fd887a --- /dev/null +++ b/packages/deriv_logger/example/pubspec.yaml @@ -0,0 +1,90 @@ +name: example +description: A new Flutter project. +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: "none" # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ">=3.0.2 <4.0.0" + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + deriv_logger: + path: ../ + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/deriv_logger/example/test/widget_test.dart b/packages/deriv_logger/example/test/widget_test.dart new file mode 100644 index 000000000..092d222f7 --- /dev/null +++ b/packages/deriv_logger/example/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:example/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/packages/deriv_logger/lib/controllers/logger_controller.dart b/packages/deriv_logger/lib/controllers/logger_controller.dart new file mode 100644 index 000000000..d556c53f2 --- /dev/null +++ b/packages/deriv_logger/lib/controllers/logger_controller.dart @@ -0,0 +1,116 @@ +import 'dart:convert'; + +import 'package:deriv_logger/core/app_logger.dart'; +import 'package:flutter/material.dart'; + +/// The controller for console logs that is responsible for managing the logs +/// into readable streams. +class ConsoleLogController extends ChangeNotifier { + /// Creates an instance of the controller. + ConsoleLogController(); + + final List _logs = []; + + /// This returns the logs in reverse order. + List get logs => _logs.reversed.toList(); + + /// This will initialize the controller. + void initialize() { + AppLogger.logStream.listen((LogDetails log) { + _logs.add( + ConsoleLogVM( + color: _getColorFromLevel(log.logLevel), + level: log.logLevel.name.toUpperCase(), + text: _getFormattedLog(log.message), + time: _getFormattedTime(log.time), + title: log.title, + stackTrace: log.stackTrace?.toString(), + ), + ); + notifyListeners(); + }); + } + + /// Clears all the logs from the log list. + void clearLogs() { + _logs.clear(); + notifyListeners(); + } + + String _getFormattedLog(dynamic object) { + try { + if (object is String) { + return object; + } else if (object is List || object is Map) { + final String spaces = ' ' * 2; + return JsonEncoder.withIndent(spaces).convert(object); + } else { + return object.toString(); + } + } on Exception catch (_) { + return object.toString(); + } + } + + String _getFormattedTime(DateTime dateTime) { + final DateTime dateInLocal = dateTime.toLocal(); + return dateInLocal.toString(); + } + + Color _getColorFromLevel(AppLogLevel level) { + switch (level) { + case AppLogLevel.debug: + return Colors.black; + case AppLogLevel.info: + return Colors.blue; + case AppLogLevel.warning: + return Colors.orange; + case AppLogLevel.error: + return Colors.red; + case AppLogLevel.fatal: + return Colors.pink; + case AppLogLevel.success: + return Colors.green; + } + } +} + +/// This is the view model for the console log. +class ConsoleLogVM { + /// This is the view model for the console log. + ConsoleLogVM({ + required this.level, + required this.text, + required this.time, + required this.color, + this.title, + this.stackTrace, + }); + + /// The color of the log based on its severity. + final Color color; + + /// The level of the log i.e + final String level; + + /// The actual message to print in the console. + final String text; + + /// THe time stamp + final String time; + + /// Title of the log. + final String? title; + + /// Stack trace of the log. + final String? stackTrace; + + @override + String toString() => jsonEncode({ + 'level': level, + 'time': time, + 'title': title, + 'text': text, + 'stackTrace': stackTrace, + }); +} diff --git a/packages/deriv_logger/lib/core/app_logger.dart b/packages/deriv_logger/lib/core/app_logger.dart new file mode 100644 index 000000000..99c2e40b6 --- /dev/null +++ b/packages/deriv_logger/lib/core/app_logger.dart @@ -0,0 +1,171 @@ +import 'dart:async'; + +import 'package:logger/logger.dart'; + +enum AppLogLevel { + debug, + info, + warning, + error, + fatal, + success, +} + +const Map _packageLogLevelToAppLogLevel = { + Level.trace: AppLogLevel.success, + Level.info: AppLogLevel.info, + Level.warning: AppLogLevel.warning, + Level.error: AppLogLevel.error, + Level.fatal: AppLogLevel.fatal, +}; + +class AppLogger { + AppLogger._(); + static late Logger _logger; + static bool _enableDebugging = false; + + static late StreamController _logController; + + /// Initialize the logger. + static void initialize({bool enableDebugging = true}) { + _enableDebugging = enableDebugging; + + _logger = Logger( + filter: DevelopmentFilter(), + printer: PrettyPrinter( + methodCount: 0, + levelColors: { + Level.trace: const AnsiColor.fg(2), + }, + ), + ); + _logController = StreamController.broadcast(); + } + + /// Stream of logs. + static Stream get logStream => _logController.stream; + + /// This logs [error] messages with red color. + static void e( + dynamic message, { + DateTime? time, + String? title, + StackTrace? stackTrace, + }) { + _log( + level: Level.error, + message: message, + title: title, + time: time, + stackTrace: stackTrace ?? StackTrace.current, + ); + } + + /// This logs [information] message with blue color. + static void i( + dynamic message, { + DateTime? time, + String? title, + StackTrace? stackTrace, + }) { + _log( + message: message, + stackTrace: stackTrace ?? StackTrace.empty, + title: title, + time: time, + ); + } + + /// This logs [warning] message with yellow color. + static void w( + dynamic message, { + DateTime? time, + String? title, + StackTrace? stackTrace, + }) { + _log( + level: Level.warning, + message: message, + title: title, + time: time, + stackTrace: stackTrace ?? StackTrace.empty, + ); + } + + /// This logs [fatal] messages with purple color. + static void f( + dynamic message, { + DateTime? time, + String? title, + StackTrace? stackTrace, + }) { + _log( + level: Level.fatal, + message: message, + title: title, + stackTrace: stackTrace ?? StackTrace.current, + ); + } + + /// This logs [successful] events/message with green color. + static void s( + dynamic message, { + DateTime? time, + String? title, + }) { + _log( + level: Level.trace, + message: message, + title: title, + stackTrace: StackTrace.empty, + time: time, + ); + } + + void dispose() { + _logController.close(); + } + + static void _log({ + Level level = Level.info, + dynamic message, + DateTime? time, + String? title, + StackTrace? stackTrace, + }) { + if (!_enableDebugging) return; + _logger.log( + level, + message, + time: time, + error: title, + stackTrace: stackTrace, + ); + _logController.sink.add( + LogDetails( + title: title ?? '', + message: message, + time: time ?? DateTime.now(), + stackTrace: stackTrace, + logLevel: _packageLogLevelToAppLogLevel[level]!, + ), + ); + } +} + +class LogDetails { + /// Details of the logs. + LogDetails({ + required this.title, + required this.message, + required this.time, + required this.logLevel, + this.stackTrace, + }); + + final DateTime time; + final String title; + final dynamic message; + final AppLogLevel logLevel; + final StackTrace? stackTrace; +} diff --git a/packages/deriv_logger/lib/deriv_logger.dart b/packages/deriv_logger/lib/deriv_logger.dart new file mode 100644 index 000000000..4b0032aa9 --- /dev/null +++ b/packages/deriv_logger/lib/deriv_logger.dart @@ -0,0 +1,5 @@ +library deriv_logger; + +export './controllers/logger_controller.dart'; +export './core/app_logger.dart'; +export './views/views.dart'; diff --git a/packages/deriv_logger/lib/views/console_log_view.dart b/packages/deriv_logger/lib/views/console_log_view.dart new file mode 100644 index 000000000..3f2db50c0 --- /dev/null +++ b/packages/deriv_logger/lib/views/console_log_view.dart @@ -0,0 +1,138 @@ +import 'package:deriv_logger/controllers/logger_controller.dart'; +import 'package:deriv_logger/views/logger_theme.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +/// Page for Console logs. +class ConsoleLogsView extends StatelessWidget { + /// Creates a new instance of the ConsoleLogsView. + const ConsoleLogsView({ + required this.consoleLogsController, + required this.theme, + super.key, + }); + + /// The console log controller. + final ConsoleLogController consoleLogsController; + + /// theme + final DebugOverlayTheme theme; + + @override + Widget build(BuildContext context) => AnimatedBuilder( + animation: consoleLogsController, + builder: (BuildContext context, _) => SafeArea( + child: Scaffold( + appBar: AppBar(title: const Text('Console logs')), + floatingActionButton: consoleLogsController.logs.isEmpty + ? const SizedBox() + : FloatingActionButton( + onPressed: () => consoleLogsController.clearLogs(), + child: const Icon(Icons.delete), + ), + backgroundColor: theme.backgroundColor, + body: consoleLogsController.logs.isEmpty + ? Center( + child: Text( + 'No logs available!', + style: theme.bodyTextStyle, + ), + ) + : ListView.separated( + physics: const BouncingScrollPhysics(), + itemCount: consoleLogsController.logs.length, + padding: const EdgeInsets.symmetric(vertical: 16), + separatorBuilder: (_, __) => const SizedBox(height: 12), + itemBuilder: (_, int index) => ConsoleLogCard( + log: consoleLogsController.logs[index], + theme: theme, + ), + ), + ), + ), + ); +} + +/// Log item UI. +class ConsoleLogCard extends StatelessWidget { + /// Creates a UI for log messages. + const ConsoleLogCard({ + super.key, + required this.log, + required this.theme, + }); + final ConsoleLogVM log; + final DebugOverlayTheme theme; + + @override + Widget build(BuildContext context) => Container( + padding: const EdgeInsets.all(12), + margin: const EdgeInsets.symmetric(horizontal: 12), + decoration: BoxDecoration( + color: log.color.withOpacity(0.1), + borderRadius: BorderRadius.circular(8), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildHeader(context), + Divider(thickness: 0.2, height: 12, color: log.color), + if (log.title != null) ...[ + _buildLogTitle(context), + const SizedBox(height: 8), + ], + _buildLogContent(context), + if (log.stackTrace != null) ...[ + const Divider(thickness: 0.5, height: 12), + _buildStackTrace(context), + ], + ], + ), + ); + + Widget _buildHeader(BuildContext context) => Row( + children: [ + Text( + log.level, + style: TextStyle(fontWeight: FontWeight.bold, color: log.color), + ), + const Spacer(), + const SizedBox(width: 16), + Text( + log.time, + style: theme.subtitleTextStyle + .copyWith(fontStyle: FontStyle.italic, color: log.color), + ), + const SizedBox(width: 16), + GestureDetector( + onTap: () => Clipboard.setData(ClipboardData(text: log.toString())), + child: Icon( + Icons.copy, + size: 18, + color: log.color, + ), + ), + ], + ); + + Widget _buildLogTitle(BuildContext context) => Text( + log.title!, + style: theme.bodyTextStyle + .copyWith(fontWeight: FontWeight.bold, color: log.color), + ); + + Widget _buildLogContent(BuildContext context) => + Text(log.text, style: theme.bodyTextStyle); + + Widget _buildStackTrace(BuildContext context) => Scrollbar( + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + physics: const BouncingScrollPhysics(), + child: Text( + log.stackTrace!, + style: theme.subtitleTextStyle.copyWith(), + maxLines: 10, + ), + ), + ); +} diff --git a/packages/deriv_logger/lib/views/debug_button.dart b/packages/deriv_logger/lib/views/debug_button.dart new file mode 100644 index 000000000..477962326 --- /dev/null +++ b/packages/deriv_logger/lib/views/debug_button.dart @@ -0,0 +1,109 @@ +import 'package:deriv_logger/views/logger_theme.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/physics.dart'; + +/// Button for debug overlay +class DebugOverlayButton extends StatefulWidget { + /// Instance of BUtton + const DebugOverlayButton({ + required this.child, + required this.onTap, + required this.theme, + super.key, + }); + final Widget child; + final Function() onTap; + final DebugOverlayTheme theme; + + @override + State createState() => _DebugOverlayButtonState(); +} + +class _DebugOverlayButtonState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + final SimulationCalculator _simulationCalculator = SimulationCalculator(); + Alignment _dragAlignment = Alignment.centerRight; + + void _runAnimation(Offset pixelsPerSecond, Size size) { + _controller + .drive(AlignmentTween(begin: _dragAlignment, end: _dragAlignment)); + _setSide(); + final SpringSimulation simulation = + _simulationCalculator.calculateSimulation(pixelsPerSecond, size); + _controller.animateWith(simulation); + } + + @override + void initState() { + super.initState(); + _controller = AnimationController(vsync: this); + _setSide(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.of(context).size; + + return GestureDetector( + onPanDown: (DragDownDetails details) => _controller.stop(), + onPanUpdate: (DragUpdateDetails details) => _setPosition(details, size), + onPanEnd: (DragEndDetails details) => + _runAnimation(details.velocity.pixelsPerSecond, size), + onTap: widget.onTap, + child: Align( + alignment: _dragAlignment, + child: DecoratedBox( + decoration: BoxDecoration( + color: widget.theme.primaryColor, + shape: BoxShape.circle, + ), + child: widget.child, + ), + ), + ); + } + + void _setSide() { + final bool isLeft = _dragAlignment.x < 0.0; + if (isLeft) { + setState(() => _dragAlignment = Alignment(-0.95, _dragAlignment.y)); + } else { + setState(() => _dragAlignment = Alignment(0.95, _dragAlignment.y)); + } + } + + void _setPosition(DragUpdateDetails details, Size size) { + setState( + () { + _dragAlignment += Alignment( + details.delta.dx / (size.width / 2), + details.delta.dy / (size.height / 2), + ); + }, + ); + } +} + +/// Simulation calculator for UI. +class SimulationCalculator { + /// Calculates the position of the gesture. + SpringSimulation calculateSimulation(Offset pixelsPerSecond, Size size) { + final double unitsPerSecondX = pixelsPerSecond.dx / size.width; + final double unitsPerSecondY = pixelsPerSecond.dy / size.height; + final Offset unitsPerSecond = Offset(unitsPerSecondX, unitsPerSecondY); + final double unitVelocity = unitsPerSecond.distance; + + const SpringDescription spring = + SpringDescription(mass: 30, stiffness: 1, damping: 1); + final SpringSimulation simulation = + SpringSimulation(spring, 0, 1, -unitVelocity); + return simulation; + } +} diff --git a/packages/deriv_logger/lib/views/debug_overlay.dart b/packages/deriv_logger/lib/views/debug_overlay.dart new file mode 100644 index 000000000..aaedd04e3 --- /dev/null +++ b/packages/deriv_logger/lib/views/debug_overlay.dart @@ -0,0 +1,81 @@ +import 'package:deriv_logger/controllers/logger_controller.dart'; +import 'package:deriv_logger/views/console_log_view.dart'; +import 'package:deriv_logger/views/debug_button.dart'; +import 'package:deriv_logger/views/logger_theme.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +/// DebugOverlay +class DebugOverlay extends StatefulWidget { + /// Overlay UI + const DebugOverlay({ + required this.builder, + super.key, + this.icon = const Icon(Icons.bug_report_outlined), + this.enabled = kDebugMode, + }); + + /// Widget that is displayed at DebugOverlay action header. + final Widget icon; + + /// Should return your application widget for which DebugOverlay is applied. + final WidgetBuilder builder; + + /// When this field is [true] - debug overlay is running in your app. + /// By default, this field get value from const [kDebugMode]. + final bool enabled; + + @override + State createState() => _DebugOverlayState(); +} + +class _DebugOverlayState extends State { + final ConsoleLogController consoleLogsController = ConsoleLogController(); + + @override + void initState() { + super.initState(); + + if (widget.enabled) { + WidgetsBinding.instance.addPostFrameCallback( + (Duration timeStamp) => _insertOverlay(context)); + } + + consoleLogsController.initialize(); + } + + @override + Widget build(BuildContext context) => widget.builder.call(context); + + void _insertOverlay(BuildContext context) { + const DebugOverlayTheme theme = DebugOverlayTheme(); + + return Overlay.of(context).insert( + OverlayEntry( + builder: (BuildContext context) => DebugOverlayButton( + theme: theme, + onTap: () => _onButtonTap(context, theme), + child: widget.icon, + ), + ), + ); + } + + void _onButtonTap(BuildContext context, DebugOverlayTheme theme) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + backgroundColor: theme.backgroundColor, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical(top: Radius.circular(12)), + ), + builder: (BuildContext ctx) => FractionallySizedBox( + heightFactor: 0.9, + child: ConsoleLogsView( + theme: theme, + consoleLogsController: consoleLogsController, + ), + ), + ); + } +} diff --git a/packages/deriv_logger/lib/views/logger_theme.dart b/packages/deriv_logger/lib/views/logger_theme.dart new file mode 100644 index 000000000..df3496a5c --- /dev/null +++ b/packages/deriv_logger/lib/views/logger_theme.dart @@ -0,0 +1,55 @@ +import 'package:flutter/material.dart'; + +/// Theme for debug. +class DebugOverlayTheme { + /// Creates a mini theme for debug UI. + const DebugOverlayTheme({ + this.primaryColor = Colors.green, + this.backgroundColor = Colors.white, + this.cardColor = Colors.white, + this.headerTextStyle = const TextStyle( + color: Colors.black, + fontSize: 20, + fontWeight: FontWeight.w600, + fontFamily: 'Monospace', + ), + this.bodyTextStyle = const TextStyle( + color: Colors.black, + fontSize: 14, + fontWeight: FontWeight.w400, + fontFamily: 'Monospace', + ), + this.subtitleTextStyle = const TextStyle( + color: Colors.black, + fontSize: 12, + fontWeight: FontWeight.w400, + fontFamily: 'Monospace', + ), + }); + + /// Primary color for the ui. + final Color primaryColor; + + /// Background color + final Color backgroundColor; + + ///color of the card. + final Color cardColor; + + /// Text style for the header. + final TextStyle headerTextStyle; + + /// Body text style + final TextStyle bodyTextStyle; + + /// subtitle text style. + final TextStyle subtitleTextStyle; +} + +final List defaultShadow = [ + BoxShadow( + blurRadius: 12, + offset: const Offset(0, 2), + color: Colors.black.withOpacity(0.1), + ) +]; diff --git a/packages/deriv_logger/lib/views/views.dart b/packages/deriv_logger/lib/views/views.dart new file mode 100644 index 000000000..a12c2f3cc --- /dev/null +++ b/packages/deriv_logger/lib/views/views.dart @@ -0,0 +1,4 @@ +export 'console_log_view.dart'; +export 'debug_button.dart'; +export 'debug_overlay.dart'; +export 'logger_theme.dart'; diff --git a/packages/deriv_logger/pubspec.yaml b/packages/deriv_logger/pubspec.yaml new file mode 100644 index 000000000..a339ff738 --- /dev/null +++ b/packages/deriv_logger/pubspec.yaml @@ -0,0 +1,53 @@ +name: deriv_logger +description: A debugging tool for deriv applications. +version: 0.0.1 + +environment: + sdk: ">=3.0.2 <4.0.0" + +dependencies: + flutter: + sdk: flutter + logger: ^2.3.0 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # To add assets to your package, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + # + # For details regarding assets in packages, see + # https://flutter.dev/assets-and-images/#from-packages + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # To add custom fonts to your package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/custom-fonts/#from-packages diff --git a/packages/update_checker/pubspec.lock b/packages/update_checker/pubspec.lock index 6a9f8499d..e0a3ee603 100644 --- a/packages/update_checker/pubspec.lock +++ b/packages/update_checker/pubspec.lock @@ -85,10 +85,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.17.1" convert: dependency: transitive description: @@ -316,18 +316,18 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.15" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.2.0" meta: dependency: transitive description: @@ -380,10 +380,10 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: cbff87676c352d97116af6dbea05aa28c4d65eb0f6d5677a520c11a69ca9a24d + sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "4.2.0" package_info_plus_platform_interface: dependency: transitive description: @@ -489,10 +489,10 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.9.1" stack_trace: dependency: transitive description: @@ -529,26 +529,26 @@ packages: dependency: "direct dev" description: name: test - sha256: "13b41f318e2a5751c3169137103b60c584297353d4b1761b66029bae6411fe46" + sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4" url: "https://pub.dev" source: hosted - version: "1.24.3" + version: "1.24.1" test_api: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.5.1" test_core: dependency: transitive description: name: test_core - sha256: "99806e9e6d95c7b059b7a0fc08f07fc53fabe54a829497f0d9676299f1e8637e" + sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93" url: "https://pub.dev" source: hosted - version: "0.5.3" + version: "0.5.1" typed_data: dependency: transitive description: @@ -581,14 +581,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" - web: - dependency: transitive - description: - name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 - url: "https://pub.dev" - source: hosted - version: "0.1.4-beta" web_socket_channel: dependency: transitive description: @@ -622,5 +614,5 @@ packages: source: hosted version: "3.1.1" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.0.0 <4.0.0" flutter: ">=3.10.2" From 6ed8b96a9b2c8bb7b1a7036bcf0acad4baf3e791 Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Thu, 20 Jun 2024 17:19:49 +0800 Subject: [PATCH 14/18] chore(deriv_logger): bump version and update changelog (#622) Co-authored-by: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: sagar-deriv --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ README.md | 2 +- packages/deriv_logger/CHANGELOG.md | 4 ++++ packages/deriv_logger/pubspec.yaml | 2 +- packages/update_checker/CHANGELOG.md | 4 ++++ packages/update_checker/pubspec.yaml | 2 +- 6 files changed, 37 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12d955c80..a87df2a72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,32 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2024-06-20 + +### Changes + +--- + +Packages with breaking changes: + + - There are no breaking changes in this release. + +Packages with other changes: + + - [`deriv_logger` - `v0.0.2`](#deriv_logger---v002) + - [`update_checker` - `v1.3.0`](#update_checker---v130) + +--- + +#### `deriv_logger` - `v0.0.2` + + - **FEAT**(deriv_logger): add ability to print prettified logs in console and UI ([#608](https://github.com/regentmarkets/flutter-deriv-packages/issues/608)). ([5a91c24b](https://github.com/regentmarkets/flutter-deriv-packages/commit/5a91c24bde607ff37940edf18f8dfac67d3fc4fa)) + +#### `update_checker` - `v1.3.0` + + - **FEAT**(deriv_logger): add ability to print prettified logs in console and UI ([#608](https://github.com/regentmarkets/flutter-deriv-packages/issues/608)). ([5a91c24b](https://github.com/regentmarkets/flutter-deriv-packages/commit/5a91c24bde607ff37940edf18f8dfac67d3fc4fa)) + + ## 2024-06-14 ### Changes diff --git a/README.md b/README.md index 564d181a1..28ded8060 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ deriv_ui: | [deriv_web_view](./packages/deriv_web_view) | Deriv web view package. | [v0.2.2+1](./packages/deriv_web_view/CHANGELOG.md) | | [deriv_widgetbook](./packages/deriv_widgetbook) |Storybook for Deriv UI Widgets and Components | [v0.0.2+6](./packages/deriv_widgetbook/CHANGELOG.md) | | [form_builder](./packages/form_builder) | A simpler and cleaner way to create, validate and submit forms. | [v1.0.0+1](./packages/form_builder/CHANGELOG.md) | -| [update_checker](./packages/update_checker) | Check and retrieve update information from the server for the given package. | [v1.2.2](./packages/update_checker/CHANGELOG.md) | +| [update_checker](./packages/update_checker) | Check and retrieve update information from the server for the given package. | [v1.3.0](./packages/update_checker/CHANGELOG.md) | | [deriv_feature_flag](./packages/deriv_feature_flag) | A package to provide feature flag functionality for apps. | [v0.1.1](./packages/deriv_feature_flag/CHANGELOG.md) | ## Environment Setup diff --git a/packages/deriv_logger/CHANGELOG.md b/packages/deriv_logger/CHANGELOG.md index 41cc7d819..ac0b885f0 100644 --- a/packages/deriv_logger/CHANGELOG.md +++ b/packages/deriv_logger/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.2 + + - **FEAT**(deriv_logger): add ability to print prettified logs in console and UI ([#608](https://github.com/regentmarkets/flutter-deriv-packages/issues/608)). ([5a91c24b](https://github.com/regentmarkets/flutter-deriv-packages/commit/5a91c24bde607ff37940edf18f8dfac67d3fc4fa)) + ## 0.0.1 * TODO: Describe initial release. diff --git a/packages/deriv_logger/pubspec.yaml b/packages/deriv_logger/pubspec.yaml index a339ff738..8b85a3d84 100644 --- a/packages/deriv_logger/pubspec.yaml +++ b/packages/deriv_logger/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_logger description: A debugging tool for deriv applications. -version: 0.0.1 +version: 0.0.2 environment: sdk: ">=3.0.2 <4.0.0" diff --git a/packages/update_checker/CHANGELOG.md b/packages/update_checker/CHANGELOG.md index b20c8edde..04eae25e0 100644 --- a/packages/update_checker/CHANGELOG.md +++ b/packages/update_checker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.3.0 + + - **FEAT**(deriv_logger): add ability to print prettified logs in console and UI ([#608](https://github.com/regentmarkets/flutter-deriv-packages/issues/608)). ([5a91c24b](https://github.com/regentmarkets/flutter-deriv-packages/commit/5a91c24bde607ff37940edf18f8dfac67d3fc4fa)) + ## 1.2.2 - **FIX**(update_checker): fix optional update issue in remote config [#475](https://github.com/regentmarkets/flutter-deriv-packages/issues/475). ([ac0dc26b](https://github.com/regentmarkets/flutter-deriv-packages/commit/ac0dc26b46b478248ea81d1dba6b7c6844b88995)) diff --git a/packages/update_checker/pubspec.yaml b/packages/update_checker/pubspec.yaml index 9f0fde39d..ea68d1f23 100644 --- a/packages/update_checker/pubspec.yaml +++ b/packages/update_checker/pubspec.yaml @@ -1,6 +1,6 @@ name: update_checker description: Check and retrieve update information from the server for the given package. -version: 1.2.2 +version: 1.3.0 homepage: https://deriv.com/ publish_to: "none" From d86b51e2fe4ca4d18768d0ba17567a388a8d360d Mon Sep 17 00:00:00 2001 From: naif-deriv <112558231+naif-deriv@users.noreply.github.com> Date: Thu, 20 Jun 2024 13:54:33 +0400 Subject: [PATCH 15/18] feat(deriv_passkeys): add user tracking events. (#607) --- melos.yaml | 1 + packages/deriv_passkeys/example/lib/main.dart | 4 +- .../constants/analytics_actions_enums.dart | 59 +++ .../tracking_event_params_helper.dart | 158 +++++++ .../extensions/context_extensions.dart | 0 .../passkey_analytics_repository.dart | 286 ++++++++++++ .../base_passkey_analytics_repository.dart | 47 ++ .../mixins/passkey_event_tracking_mixin.dart | 65 +++ .../pages/effortless_passkeys_login_page.dart | 349 ++++++++------- .../pages/learn_more_passkeys_page.dart | 421 +++++++++--------- .../pages/manage_passkeys_page.dart | 196 ++++---- .../pages/passkey_created_page.dart | 12 +- .../states/bloc/deriv_passkeys_bloc.dart | 8 + .../utils/handle_errors_utils.dart | 2 +- .../presentation/utils/platform_utils.dart | 2 +- .../widgets/continue_with_passkey_button.dart | 5 + .../passkey_created_call_to_action.dart | 2 +- .../presentation/widgets/passkey_widget.dart | 2 +- packages/deriv_passkeys/pubspec.yaml | 10 + .../tracking_event_params_helper_test.dart | 277 ++++++++++++ .../passkey_analytics_repository_test.dart | 168 +++++++ .../passkey_event_tracking_mixin_test.dart | 146 ++++++ .../pages/learn_more_passkeys_page_test.dart | 28 +- .../bloc/deriv_passkeys_bloc_setup.dart | 11 +- .../continue_with_passkey_button_test.dart | 10 +- 25 files changed, 1795 insertions(+), 474 deletions(-) create mode 100644 packages/deriv_passkeys/lib/src/core/constants/analytics_actions_enums.dart create mode 100644 packages/deriv_passkeys/lib/src/core/constants/tracking_event_params_helper.dart rename packages/deriv_passkeys/lib/src/{ => core}/extensions/context_extensions.dart (100%) create mode 100644 packages/deriv_passkeys/lib/src/data/repositories/passkey_analytics_repository.dart create mode 100644 packages/deriv_passkeys/lib/src/domain/base_repositories/base_passkey_analytics_repository.dart create mode 100644 packages/deriv_passkeys/lib/src/presentation/mixins/passkey_event_tracking_mixin.dart create mode 100644 packages/deriv_passkeys/test/core/constants/tracking_event_params_helper_test.dart create mode 100644 packages/deriv_passkeys/test/data/passkey_analytics_repository_test.dart create mode 100644 packages/deriv_passkeys/test/presentation/mixins/passkey_event_tracking_mixin_test.dart diff --git a/melos.yaml b/melos.yaml index 8e75065c7..256370441 100644 --- a/melos.yaml +++ b/melos.yaml @@ -43,3 +43,4 @@ scripts: ignore: # Ignore until we have a proper test. - "deriv_feature_flag" + - "deriv_auth" diff --git a/packages/deriv_passkeys/example/lib/main.dart b/packages/deriv_passkeys/example/lib/main.dart index 4baf1c3f8..8047aeed3 100644 --- a/packages/deriv_passkeys/example/lib/main.dart +++ b/packages/deriv_passkeys/example/lib/main.dart @@ -89,7 +89,9 @@ class MyPage extends StatelessWidget { body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - const ContinueWithPasskeyButton(), + ContinueWithPasskeyButton( + onTap: () {}, + ), SizedBox( width: double.infinity, child: Padding( diff --git a/packages/deriv_passkeys/lib/src/core/constants/analytics_actions_enums.dart b/packages/deriv_passkeys/lib/src/core/constants/analytics_actions_enums.dart new file mode 100644 index 000000000..4fa6a010b --- /dev/null +++ b/packages/deriv_passkeys/lib/src/core/constants/analytics_actions_enums.dart @@ -0,0 +1,59 @@ +/// The list of actions that can be performed on the Effortless page. +enum EffortlessPageActions { + /// The user opened the effortless login page. + openEffortlessLoginPage, + + /// The user closed the effortless login page. + closeEffortlessLoginPage, + + /// The user pressed the maybe later button. + maybeLater, +} + +/// The list of actions that can be performed on the Learn more page. +enum LearnMorePageActions { + /// The user opened the learn more page. + openLearnMorePage, + + /// The user closed the learn more page. + closeLearnMorePage, +} + +/// The list of actions that can be performed on the Create passkey page. +enum CreatePasskeyFlowActions { + /// The user pressed the create passkey button. + createPasskey, + + /// Create passkey success. + createPasskeySuccess, + + /// The user faces an error. + error, + + /// The user presses the continue trading button. + continueTrading, + + /// The user presses the add more passkeys button. + addMorePasskeys, +} + +/// The list of actions that can be performed on the Rename passkey page. +enum RenamePasskeyFlowActions { + /// The user presses the rename passkey button. + renamePasskey, + + /// The user cancels rename passkey. + cancelRenamePasskey, + + /// Rename passkey success. + renamePasskeySuccess, +} + +/// The list of actions that can be performed on the Manage Passkeys page. +enum ManagePasskeysPageActions { + /// The user opened the manage passkeys page. + openManagePasskeysPage, + + /// The user closed the manage passkeys page. + closeManagePasskeysPage, +} diff --git a/packages/deriv_passkeys/lib/src/core/constants/tracking_event_params_helper.dart b/packages/deriv_passkeys/lib/src/core/constants/tracking_event_params_helper.dart new file mode 100644 index 000000000..5693a7a83 --- /dev/null +++ b/packages/deriv_passkeys/lib/src/core/constants/tracking_event_params_helper.dart @@ -0,0 +1,158 @@ +import 'package:deriv_passkeys/src/core/constants/analytics_actions_enums.dart'; +import 'package:flutter/foundation.dart'; + +/// Platform type string. +String _platform = defaultTargetPlatform == TargetPlatform.android + ? 'Android' + : defaultTargetPlatform == TargetPlatform.iOS + ? 'IOS' + : 'other'; + +/// Function to get all the Effortless page params. +Map getEffortlessLoginTrackingParams(T eventName) => + switch (eventName) { + EffortlessPageActions.openEffortlessLoginPage => { + 'event_name': 'open', + 'params': { + 'form_name': 'ce_passkey_effortless_form_', + 'operating_system': _platform, + }, + }, + EffortlessPageActions.closeEffortlessLoginPage => { + 'event_name': 'close', + 'params': { + 'form_name': 'ce_passkey_effortless_form_', + 'operating_system': _platform, + }, + }, + EffortlessPageActions.maybeLater => { + 'event_name': 'maybe_later', + 'params': { + 'form_name': 'ce_passkey_effortless_form_', + 'operating_system': _platform, + }, + }, + _ => throw Exception('Invalid event name'), + }; + +/// Function to get all the Learn More page params. +Map getLearnMoreTrackingParams( + T eventName, + String mainFormName, +) => + switch (eventName) { + LearnMorePageActions.openLearnMorePage => { + 'event_name': 'info_open', + 'params': { + 'form_name': mainFormName, + 'operating_system': _platform, + }, + }, + LearnMorePageActions.closeLearnMorePage => { + 'event_name': 'info_back', + 'params': { + 'form_name': mainFormName, + 'operating_system': _platform, + }, + }, + _ => throw Exception('Invalid event name'), + }; + +/// Function to get all the Manage passkeys page params. +Map getManagePasskeysTrackingParams(T eventName) => + switch (eventName) { + ManagePasskeysPageActions.openManagePasskeysPage => { + 'event_name': 'open', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': _platform, + }, + }, + ManagePasskeysPageActions.closeManagePasskeysPage => { + 'event_name': 'close', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': _platform, + }, + }, + _ => throw Exception('Invalid event name'), + }; + +/// Function to get all the Create passkey page params. +Map getCreatePasskeyTrackingParams( + T eventName, { + String? mainFormName, + String? subFormName, + String? errorMessage, +}) => + switch (eventName) { + CreatePasskeyFlowActions.createPasskey => { + 'event_name': 'create_passkey_started', + 'params': { + 'form_name': mainFormName, + 'subform_name': subFormName, + 'operating_system': _platform, + }, + }, + CreatePasskeyFlowActions.createPasskeySuccess => { + 'event_name': 'create_passkey_finished', + 'params': { + 'form_name': mainFormName, + 'subform_name': subFormName, + 'operating_system': _platform, + }, + }, + CreatePasskeyFlowActions.error => { + 'event_name': 'error', + 'params': { + 'form_name': mainFormName, + 'subform_name': subFormName, + 'operating_system': _platform, + 'error_message': errorMessage, + }, + }, + CreatePasskeyFlowActions.continueTrading => { + 'event_name': 'create_passkey_continue_trading', + 'params': { + 'form_name': mainFormName, + 'subform_name': subFormName, + 'operating_system': _platform, + }, + }, + CreatePasskeyFlowActions.addMorePasskeys => { + 'event_name': 'create_passkey_add_more_passkeys', + 'params': { + 'form_name': mainFormName, + 'subform_name': subFormName, + 'operating_system': _platform, + }, + }, + _ => throw Exception('Invalid event name'), + }; + +/// Function to get all the Rename passkey page params. +Map getRenamePasskeyTrackingParams(T eventName) => + switch (eventName) { + RenamePasskeyFlowActions.renamePasskey => { + 'event_name': 'passkey_rename_open', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': _platform, + }, + }, + RenamePasskeyFlowActions.renamePasskeySuccess => { + 'event_name': 'passkey_rename_success', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': _platform, + }, + }, + RenamePasskeyFlowActions.cancelRenamePasskey => { + 'event_name': 'passkey_rename_back', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': _platform, + }, + }, + _ => throw Exception('Invalid event name'), + }; diff --git a/packages/deriv_passkeys/lib/src/extensions/context_extensions.dart b/packages/deriv_passkeys/lib/src/core/extensions/context_extensions.dart similarity index 100% rename from packages/deriv_passkeys/lib/src/extensions/context_extensions.dart rename to packages/deriv_passkeys/lib/src/core/extensions/context_extensions.dart diff --git a/packages/deriv_passkeys/lib/src/data/repositories/passkey_analytics_repository.dart b/packages/deriv_passkeys/lib/src/data/repositories/passkey_analytics_repository.dart new file mode 100644 index 000000000..a72f33172 --- /dev/null +++ b/packages/deriv_passkeys/lib/src/data/repositories/passkey_analytics_repository.dart @@ -0,0 +1,286 @@ +import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart'; +import 'package:deriv_passkeys/src/core/constants/analytics_actions_enums.dart'; +import 'package:deriv_passkeys/src/core/constants/tracking_event_params_helper.dart'; +import 'package:deriv_passkeys/src/domain/base_repositories/base_passkey_analytics_repository.dart'; + +/// [AnalyticsRepository] is an implementation of [BasePasskeyAnalyticsRepository]. +class AnalyticsRepository extends BasePasskeyAnalyticsRepository { + /// Constructor for [AnalyticsRepository]. + AnalyticsRepository._( + this._appId, { + required this.derivRudderstack, + }); + + static AnalyticsRepository? _instance; + + /// Singleton instance of [AnalyticsRepository]. + static AnalyticsRepository get instance => + _instance ??= throw Exception('AnalyticsRepository is not initialized'); + + /// Instance of [DerivRudderstack]. + final DerivRudderstack derivRudderstack; + + /// Initialize [AnalyticsRepository]. + static void init( + String appId, { + required DerivRudderstack derivRudderstack, + }) => + _instance = AnalyticsRepository._( + appId, + derivRudderstack: derivRudderstack, + ); + + String? _mainFormName; + + String? _subFormName; + + /// Deriv client app ID. + final String _appId; + + @override + void trackOpenEffortlessLoginPage() { + final Map trackingData = getEffortlessLoginTrackingParams( + EffortlessPageActions.openEffortlessLoginPage, + ); + + _mainFormName = trackingData['params']['form_name']; + _subFormName = 'passkey_effortless'; + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackCloseEffortlessLoginPage() { + final Map trackingData = getEffortlessLoginTrackingParams( + EffortlessPageActions.closeEffortlessLoginPage, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackMaybeLater() { + final Map trackingData = getEffortlessLoginTrackingParams( + EffortlessPageActions.maybeLater, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackOpenLearnMorePage() { + final Map trackingData = getLearnMoreTrackingParams( + LearnMorePageActions.openLearnMorePage, + _mainFormName ?? 'testing_main_form', + ); + + _subFormName = 'passkey_info'; + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackCloseLearnMorePage() { + final Map trackingData = getLearnMoreTrackingParams( + LearnMorePageActions.closeLearnMorePage, + _mainFormName ?? 'testing_main_form', + ); + + if (_mainFormName == null) { + _mainFormName = 'testing_main_form'; + } else { + _subFormName = _mainFormName!.contains('account_settings') + ? 'passkey_main' + : 'passkey_effortless'; + } + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackOpenManagePasskeysPage() { + final Map trackingData = getManagePasskeysTrackingParams( + ManagePasskeysPageActions.openManagePasskeysPage, + ); + + _mainFormName = trackingData['params']['form_name']; + _subFormName = 'passkey_main'; + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackCloseManagePasskeysPage() { + final Map trackingData = getManagePasskeysTrackingParams( + ManagePasskeysPageActions.closeManagePasskeysPage, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackCreatePasskey() { + final Map trackingData = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.createPasskey, + mainFormName: _mainFormName, + subFormName: _subFormName, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackCreatePasskeySuccess() { + final Map trackingData = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.createPasskeySuccess, + mainFormName: _mainFormName, + subFormName: _subFormName, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackPasskeyError(String errorMessage) { + final Map trackingData = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.error, + mainFormName: _mainFormName, + subFormName: _subFormName, + errorMessage: errorMessage, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackContinueTrading() { + final Map trackingData = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.continueTrading, + mainFormName: _mainFormName, + subFormName: _subFormName, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackAddMorePasskeys() { + final Map trackingData = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.addMorePasskeys, + mainFormName: _mainFormName, + subFormName: _subFormName, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackRenamePasskey() { + final Map trackingData = getRenamePasskeyTrackingParams( + RenamePasskeyFlowActions.renamePasskey, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackCancelRenamePasskey() { + final Map trackingData = getRenamePasskeyTrackingParams( + RenamePasskeyFlowActions.cancelRenamePasskey, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + @override + void trackRenamePasskeySuccess() { + final Map trackingData = getRenamePasskeyTrackingParams( + RenamePasskeyFlowActions.renamePasskeySuccess, + ); + + _addAppName(trackingData); + + derivRudderstack.track( + eventName: trackingData['event_name'], + properties: trackingData['params'], + ); + } + + void _addAppName(Map data) { + data['params']['form_name'] += _appId == '23789' + ? 'derivgo' + : _appId == '1408' + ? 'p2p' + : 'unsupported'; + } +} diff --git a/packages/deriv_passkeys/lib/src/domain/base_repositories/base_passkey_analytics_repository.dart b/packages/deriv_passkeys/lib/src/domain/base_repositories/base_passkey_analytics_repository.dart new file mode 100644 index 000000000..e1a4addc1 --- /dev/null +++ b/packages/deriv_passkeys/lib/src/domain/base_repositories/base_passkey_analytics_repository.dart @@ -0,0 +1,47 @@ +/// [BasePasskeyAnalyticsRepository] defines the interface for analytics repositories. +abstract class BasePasskeyAnalyticsRepository { + /// Track opening effortless login page. + void trackOpenEffortlessLoginPage(); + + /// Track closing effortless login page. + void trackCloseEffortlessLoginPage(); + + /// Track pressing maybe later button. + void trackMaybeLater(); + + /// Track opening learn more page. + void trackOpenLearnMorePage(); + + /// Track closing learn more page. + void trackCloseLearnMorePage(); + + /// Track opening manage passkeys page. + void trackOpenManagePasskeysPage(); + + /// Track closing manage passkeys page. + void trackCloseManagePasskeysPage(); + + /// Track pressing create passkey button. + void trackCreatePasskey(); + + /// Track create passkey success. + void trackCreatePasskeySuccess(); + + /// Track passkey error. + void trackPasskeyError(String errorMessage); + + /// Track pressing continue trading button. + void trackContinueTrading(); + + /// Track pressing add more passkeys button. + void trackAddMorePasskeys(); + + /// Track pressing rename passkey button. + void trackRenamePasskey(); + + /// Track cancel rename passkey. + void trackCancelRenamePasskey(); + + /// Track rename passkey success. + void trackRenamePasskeySuccess(); +} diff --git a/packages/deriv_passkeys/lib/src/presentation/mixins/passkey_event_tracking_mixin.dart b/packages/deriv_passkeys/lib/src/presentation/mixins/passkey_event_tracking_mixin.dart new file mode 100644 index 000000000..b5a8a4e51 --- /dev/null +++ b/packages/deriv_passkeys/lib/src/presentation/mixins/passkey_event_tracking_mixin.dart @@ -0,0 +1,65 @@ +import 'package:deriv_passkeys/src/data/repositories/passkey_analytics_repository.dart'; +import 'package:deriv_passkeys/src/domain/base_repositories/base_passkey_analytics_repository.dart'; +import 'package:flutter/foundation.dart'; + +/// Mixin that provides analytics tracking functions. +mixin PasskeyEventTrackingMixin implements BasePasskeyAnalyticsRepository { + /// The analytics repository. + @visibleForTesting + BasePasskeyAnalyticsRepository get analyticsRepository => + AnalyticsRepository.instance; + + @override + void trackOpenEffortlessLoginPage() => + analyticsRepository.trackOpenEffortlessLoginPage(); + + @override + void trackCloseEffortlessLoginPage() => + analyticsRepository.trackCloseEffortlessLoginPage(); + + @override + void trackMaybeLater() => analyticsRepository.trackMaybeLater(); + + @override + void trackOpenLearnMorePage() => analyticsRepository.trackOpenLearnMorePage(); + + @override + void trackCloseLearnMorePage() => + analyticsRepository.trackCloseLearnMorePage(); + + @override + void trackOpenManagePasskeysPage() => + analyticsRepository.trackOpenManagePasskeysPage(); + + @override + void trackCloseManagePasskeysPage() => + analyticsRepository.trackCloseManagePasskeysPage(); + + @override + void trackCreatePasskey() => analyticsRepository.trackCreatePasskey(); + + @override + void trackCreatePasskeySuccess() => + analyticsRepository.trackCreatePasskeySuccess(); + + @override + void trackPasskeyError(String errorMessage) => + analyticsRepository.trackPasskeyError(errorMessage); + + @override + void trackContinueTrading() => analyticsRepository.trackContinueTrading(); + + @override + void trackAddMorePasskeys() => analyticsRepository.trackAddMorePasskeys(); + + @override + void trackRenamePasskey() => analyticsRepository.trackRenamePasskey(); + + @override + void trackCancelRenamePasskey() => + analyticsRepository.trackCancelRenamePasskey(); + + @override + void trackRenamePasskeySuccess() => + analyticsRepository.trackRenamePasskeySuccess(); +} diff --git a/packages/deriv_passkeys/lib/src/presentation/pages/effortless_passkeys_login_page.dart b/packages/deriv_passkeys/lib/src/presentation/pages/effortless_passkeys_login_page.dart index 69b03215e..7fd1f0f51 100644 --- a/packages/deriv_passkeys/lib/src/presentation/pages/effortless_passkeys_login_page.dart +++ b/packages/deriv_passkeys/lib/src/presentation/pages/effortless_passkeys_login_page.dart @@ -1,5 +1,6 @@ -import 'package:deriv_passkeys/src/extensions/context_extensions.dart'; +import 'package:deriv_passkeys/src/core/extensions/context_extensions.dart'; import 'package:deriv_passkeys/src/presentation/constants/assets.dart'; +import 'package:deriv_passkeys/src/presentation/mixins/passkey_event_tracking_mixin.dart'; import 'package:deriv_passkeys/src/presentation/pages/learn_more_passkeys_page.dart'; import 'package:deriv_passkeys/src/presentation/pages/passkey_created_page.dart'; import 'package:deriv_passkeys/src/presentation/states/bloc/deriv_passkeys_bloc.dart'; @@ -13,14 +14,17 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; /// A stateless widget to build the Effortless Passkeys page. -class EffortlessPasskeysPage extends StatelessWidget { +class EffortlessPasskeysPage extends StatelessWidget + with PasskeyEventTrackingMixin { /// Creates a [EffortlessPasskeysPage]. - const EffortlessPasskeysPage({ + EffortlessPasskeysPage({ required this.onPageClosed, required this.addMorePasskeysNavigationCallback, required this.continueTradingNavigationCallback, super.key, - }); + }) { + trackOpenEffortlessLoginPage(); + } /// The route name for the effortless passkeys page. static const String routeName = 'effortless_passkeys_page'; @@ -34,180 +38,207 @@ class EffortlessPasskeysPage extends StatelessWidget { /// Callback to be called when the flow is complete. final void Function(BuildContext context) onPageClosed; - /// - @override - Widget build(BuildContext context) => - BlocListener( - listener: (BuildContext context, DerivPasskeysState state) { - if (state is DerivPasskeysCreatedSuccessfullyState) { - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (BuildContext context) => PasskeyCreatedPage( - onPageClose: onPageClosed, - bottomCallToAction: PasskeysCreatedCallToAction( - addMorePasskeysNavigationCallback: - addMorePasskeysNavigationCallback, - continueTradingNavigationCallback: - continueTradingNavigationCallback, - ), - )), - ); - } else if (state is DerivPasskeysErrorState) { - handlePasskeysError(context, state); - } + Widget build(BuildContext context) => WillPopScope( + onWillPop: () async { + trackCloseEffortlessLoginPage(); + return true; }, - child: Scaffold( - body: SafeArea( - child: LayoutBuilder( - builder: (_, BoxConstraints constraints) => - SingleChildScrollView( - child: ConstrainedBox( - constraints: BoxConstraints( - minWidth: constraints.maxWidth, - minHeight: constraints.maxHeight), - child: IntrinsicHeight( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - alignment: Alignment.topRight, - child: Padding( - padding: const EdgeInsets.all(16), - child: TextButton( - onPressed: () => onPageClosed(context), - child: Text( - context - .derivPasskeysLocalizations.maybeLater - .toUpperCase(), - style: TextStyle( - color: context.theme.colors.coral, + child: BlocListener( + listener: (BuildContext context, DerivPasskeysState state) { + if (state is DerivPasskeysCreatedSuccessfullyState) { + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (BuildContext context) => PasskeyCreatedPage( + onPageClose: (BuildContext context) { + onPageClosed(context); + }, + bottomCallToAction: PasskeysCreatedCallToAction( + addMorePasskeysNavigationCallback: + (BuildContext context) { + trackAddMorePasskeys(); + addMorePasskeysNavigationCallback(context); + }, + continueTradingNavigationCallback: + (BuildContext context) { + trackContinueTrading(); + continueTradingNavigationCallback(context); + }, + ), + )), + ); + } else if (state is DerivPasskeysErrorState) { + trackPasskeyError('${state.errorCode}: ${state.message}'); + handlePasskeysError(context, state); + } + }, + child: Scaffold( + body: SafeArea( + child: LayoutBuilder( + builder: (_, BoxConstraints constraints) => + SingleChildScrollView( + child: ConstrainedBox( + constraints: BoxConstraints( + minWidth: constraints.maxWidth, + minHeight: constraints.maxHeight), + child: IntrinsicHeight( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + alignment: Alignment.topRight, + child: Padding( + padding: const EdgeInsets.all(16), + child: TextButton( + onPressed: () { + trackMaybeLater(); + onPageClosed(context); + }, + child: Text( + context.derivPasskeysLocalizations + .maybeLater + .toUpperCase(), + style: TextStyle( + color: context.theme.colors.coral, + ), ), ), ), ), - ), - Expanded( - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 24, vertical: 96), - child: Column( - mainAxisAlignment: - MainAxisAlignment.spaceEvenly, - children: [ - SvgPicture.asset( - Assets.effortlessPasskeysIcon, - package: 'deriv_passkeys', - ), - Text( - context.derivPasskeysLocalizations - .effortlessLoginWithPasskeys, - style: const TextStyle(fontSize: 20), - ), - const SizedBox( - height: 24, - ), - IconTextRowWidget( - assetName: Assets.fingerPrintIcon, - text: context.derivPasskeysLocalizations - .noNeedToRememberPassword, - ), - Divider( - color: context.theme.colors.hover, - ), - IconTextRowWidget( - assetName: Assets.syncIcon, - text: context.derivPasskeysLocalizations - .syncAcrossDevices, - ), - Divider( - color: context.theme.colors.hover, - ), - IconTextRowWidget( - assetName: Assets.lockIcon, - text: context.derivPasskeysLocalizations - .useYourBiometrics, - ), - Divider( - color: context.theme.colors.hover, - ), - SizedBox( - width: double.infinity, - child: RichText( - text: TextSpan( - children: [ - TextSpan( - text: - '${context.derivPasskeysLocalizations.learnMoreAboutPasskeys} ', - style: TextStyle( - color: context - .theme.colors.general, - )), - WidgetSpan( - alignment: - PlaceholderAlignment.middle, - child: InkWell( - onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (_) => - LearnMorePasskeysPage( - onPageClosed: - (BuildContext - context) { + Expanded( + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 24, vertical: 96), + child: Column( + mainAxisAlignment: + MainAxisAlignment.spaceEvenly, + children: [ + SvgPicture.asset( + Assets.effortlessPasskeysIcon, + package: 'deriv_passkeys', + ), + Text( + context.derivPasskeysLocalizations + .effortlessLoginWithPasskeys, + style: const TextStyle(fontSize: 20), + ), + const SizedBox( + height: 24, + ), + IconTextRowWidget( + assetName: Assets.fingerPrintIcon, + text: context + .derivPasskeysLocalizations + .noNeedToRememberPassword, + ), + Divider( + color: context.theme.colors.hover, + ), + IconTextRowWidget( + assetName: Assets.syncIcon, + text: context + .derivPasskeysLocalizations + .syncAcrossDevices, + ), + Divider( + color: context.theme.colors.hover, + ), + IconTextRowWidget( + assetName: Assets.lockIcon, + text: context + .derivPasskeysLocalizations + .useYourBiometrics, + ), + Divider( + color: context.theme.colors.hover, + ), + SizedBox( + width: double.infinity, + child: RichText( + text: TextSpan( + children: [ + TextSpan( + text: + '${context.derivPasskeysLocalizations.learnMoreAboutPasskeys} ', + style: TextStyle( + color: context + .theme.colors.general, + )), + WidgetSpan( + alignment: + PlaceholderAlignment + .middle, + child: InkWell( + onTap: () { + Navigator.push( + context, + MaterialPageRoute< + Widget>( + builder: (_) => LearnMorePasskeysPage( + onPageClosed: + (BuildContext + context) { Navigator.pop( context); - }, - addMorePasskeysNavigationCallback: - addMorePasskeysNavigationCallback, - continueTradingNavigationCallback: - continueTradingNavigationCallback, + }, addMorePasskeysNavigationCallback: + (BuildContext + context) { + trackAddMorePasskeys(); + addMorePasskeysNavigationCallback( + context); + }, continueTradingNavigationCallback: + (BuildContext + context) { + trackContinueTrading(); + continueTradingNavigationCallback( + context); + }), ), - ), - ); - }, - child: Text( - '${context.derivPasskeysLocalizations.here}.', - style: TextStyle( - color: context.theme - .colors.coral), + ); + }, + child: Text( + '${context.derivPasskeysLocalizations.here}.', + style: TextStyle( + color: context.theme + .colors.coral), + ), ), ), - ), - ], + ], + ), ), - ), - ) - ], + ) + ], + ), ), ), - ), - Container( - width: double.infinity, - child: Padding( - padding: const EdgeInsets.all(16), - child: PrimaryButton( - onPressed: () { - context.read().add( - DerivPasskeysCreateCredentialEvent()); - }, - child: Text( - context.derivPasskeysLocalizations - .createPasskey, - style: TextStyle( - color: context.theme.colors.prominent, + Container( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.all(16), + child: PrimaryButton( + onPressed: () { + trackCreatePasskey(); + context.read().add( + DerivPasskeysCreateCredentialEvent()); + }, + child: Text( + context.derivPasskeysLocalizations + .createPasskey, + style: TextStyle( + color: context.theme.colors.prominent, + ), ), ), ), - ), - ) - ], + ) + ], + ), ), ), - ), - )), + )), + ), ), ), ); diff --git a/packages/deriv_passkeys/lib/src/presentation/pages/learn_more_passkeys_page.dart b/packages/deriv_passkeys/lib/src/presentation/pages/learn_more_passkeys_page.dart index d4cf3f49b..3dc033233 100644 --- a/packages/deriv_passkeys/lib/src/presentation/pages/learn_more_passkeys_page.dart +++ b/packages/deriv_passkeys/lib/src/presentation/pages/learn_more_passkeys_page.dart @@ -1,6 +1,7 @@ import 'package:deriv_passkeys/deriv_passkeys.dart'; -import 'package:deriv_passkeys/src/extensions/context_extensions.dart'; +import 'package:deriv_passkeys/src/core/extensions/context_extensions.dart'; import 'package:deriv_passkeys/src/presentation/constants/assets.dart'; +import 'package:deriv_passkeys/src/presentation/mixins/passkey_event_tracking_mixin.dart'; import 'package:deriv_passkeys/src/presentation/pages/passkey_created_page.dart'; import 'package:deriv_passkeys/src/presentation/widgets/passkey_created_call_to_action.dart'; import 'package:deriv_passkeys/src/presentation/widgets/section_title_and_content.dart'; @@ -12,14 +13,17 @@ import 'package:flutter_svg/svg.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; /// A stateless widget to build the Learn More Passkeys page. -class LearnMorePasskeysPage extends StatelessWidget { +class LearnMorePasskeysPage extends StatelessWidget + with PasskeyEventTrackingMixin { /// Creates a [LearnMorePasskeysPage]. - const LearnMorePasskeysPage({ + LearnMorePasskeysPage({ required this.onPageClosed, required this.addMorePasskeysNavigationCallback, required this.continueTradingNavigationCallback, super.key, - }); + }) { + trackOpenLearnMorePage(); + } /// Callback to be called when the flow is complete. final void Function(BuildContext context) onPageClosed; @@ -31,231 +35,238 @@ class LearnMorePasskeysPage extends StatelessWidget { final void Function(BuildContext context) continueTradingNavigationCallback; @override - Widget build(BuildContext context) => - BlocListener( - listener: (BuildContext context, DerivPasskeysState state) { - if (state is DerivPasskeysCreatedSuccessfullyState) { - Navigator.pop(context); - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (BuildContext context) => PasskeyCreatedPage( - onPageClose: onPageClosed, - bottomCallToAction: PasskeysCreatedCallToAction( - addMorePasskeysNavigationCallback: - addMorePasskeysNavigationCallback, - continueTradingNavigationCallback: - continueTradingNavigationCallback, - ), - )), - ); - } + Widget build(BuildContext context) => WillPopScope( + onWillPop: () async { + trackCloseLearnMorePage(); + return true; }, - child: Scaffold( - appBar: AppBar(), - body: Column( - children: [ - Expanded( - child: SingleChildScrollView( - child: SafeArea( - child: Padding( - padding: const EdgeInsets.all(24), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 14), - child: SvgPicture.asset( - Assets.effortlessPasskeysIcon, - package: 'deriv_passkeys', - ), + child: BlocListener( + listener: (BuildContext context, DerivPasskeysState state) { + if (state is DerivPasskeysCreatedSuccessfullyState) { + Navigator.pop(context); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (BuildContext context) => PasskeyCreatedPage( + onPageClose: onPageClosed, + bottomCallToAction: PasskeysCreatedCallToAction( + addMorePasskeysNavigationCallback: + addMorePasskeysNavigationCallback, + continueTradingNavigationCallback: + continueTradingNavigationCallback, ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 24), - child: Text( - context - .derivPasskeysLocalizations.effortlessLogin, - style: const TextStyle(fontSize: 20), + )), + ); + } + }, + child: Scaffold( + appBar: AppBar(), + body: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: SafeArea( + child: Padding( + padding: const EdgeInsets.all(24), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 14), + child: SvgPicture.asset( + Assets.effortlessPasskeysIcon, + package: 'deriv_passkeys', + ), ), - ), - SectionTitleAndContent( - title: context - .derivPasskeysLocalizations.whatArePasskeys, - texts: [ - context.derivPasskeysLocalizations - .whatArePasskeysDescriptionPoint1, - context.derivPasskeysLocalizations - .whatArePasskeysDescriptionPoint2 - ], - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 16), - child: Divider( - color: context.theme.colors.hover, + Padding( + padding: const EdgeInsets.symmetric(vertical: 24), + child: Text( + context + .derivPasskeysLocalizations.effortlessLogin, + style: const TextStyle(fontSize: 20), + ), ), - ), - SectionTitleAndContent( - title: - context.derivPasskeysLocalizations.whyPasskeys, - texts: [ - context.derivPasskeysLocalizations - .whyPasskeysDescription1, - context.derivPasskeysLocalizations - .whyPasskeysDescription2 - ], - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 16), - child: Divider( - color: context.theme.colors.hover, + SectionTitleAndContent( + title: context + .derivPasskeysLocalizations.whatArePasskeys, + texts: [ + context.derivPasskeysLocalizations + .whatArePasskeysDescriptionPoint1, + context.derivPasskeysLocalizations + .whatArePasskeysDescriptionPoint2 + ], ), - ), - SectionTitleAndContent( - title: context.read().isDp2p - ? context.derivPasskeysLocalizations - .p2pHowToCreatePasskey - : context.derivPasskeysLocalizations - .howToCreatePasskey, - texts: [ - context.read().isDp2p - ? context.derivPasskeysLocalizations - .p2pHowToCreatePasskeyDescription1 - : context.derivPasskeysLocalizations - .howToCreatePasskeyDescription1, - context.read().isDp2p + Padding( + padding: const EdgeInsets.symmetric(vertical: 16), + child: Divider( + color: context.theme.colors.hover, + ), + ), + SectionTitleAndContent( + title: context + .derivPasskeysLocalizations.whyPasskeys, + texts: [ + context.derivPasskeysLocalizations + .whyPasskeysDescription1, + context.derivPasskeysLocalizations + .whyPasskeysDescription2 + ], + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 16), + child: Divider( + color: context.theme.colors.hover, + ), + ), + SectionTitleAndContent( + title: context.read().isDp2p ? context.derivPasskeysLocalizations - .p2pHowToCreatePasskeyDescription2 + .p2pHowToCreatePasskey : context.derivPasskeysLocalizations - .howToCreatePasskeyDescription2 - ], - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 16), - child: Divider( - color: context.theme.colors.hover, + .howToCreatePasskey, + texts: [ + context.read().isDp2p + ? context.derivPasskeysLocalizations + .p2pHowToCreatePasskeyDescription1 + : context.derivPasskeysLocalizations + .howToCreatePasskeyDescription1, + context.read().isDp2p + ? context.derivPasskeysLocalizations + .p2pHowToCreatePasskeyDescription2 + : context.derivPasskeysLocalizations + .howToCreatePasskeyDescription2 + ], ), - ), - SectionTitleAndContent( - title: context.derivPasskeysLocalizations - .whereArePasskeysSaved, - texts: [ - context.derivPasskeysLocalizations - .whereArePasskeysSavedDescriptionAndroid, - context.derivPasskeysLocalizations - .whereArePasskeysSavedDescriptionIOS - ], - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 16), - child: Divider( - color: context.theme.colors.hover, + Padding( + padding: const EdgeInsets.symmetric(vertical: 16), + child: Divider( + color: context.theme.colors.hover, + ), ), - ), - SectionTitleAndContent( - title: context.derivPasskeysLocalizations - .whatHappensIfEmailChanged, - texts: [ - context.derivPasskeysLocalizations - .whatHappensIfEmailChangedDescription1, - context.derivPasskeysLocalizations - .whatHappensIfEmailChangedDescription2 - ], - ), - Container( - width: double.infinity, - padding: const EdgeInsets.all(16), - margin: const EdgeInsets.only(top: 16), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - border: Border.all( - color: context.theme.colors.active, + SectionTitleAndContent( + title: context.derivPasskeysLocalizations + .whereArePasskeysSaved, + texts: [ + context.derivPasskeysLocalizations + .whereArePasskeysSavedDescriptionAndroid, + context.derivPasskeysLocalizations + .whereArePasskeysSavedDescriptionIOS + ], + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 16), + child: Divider( + color: context.theme.colors.hover, ), ), - child: FittedBox( - fit: BoxFit.scaleDown, - alignment: Alignment.centerLeft, - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SvgPicture.asset( - Assets.lightBulbIcon, - package: 'deriv_passkeys', - ), - const SizedBox( - width: 8, - ), - Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Text( - '${context.derivPasskeysLocalizations.tips}:', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w500, - color: context.theme.colors.prominent, + SectionTitleAndContent( + title: context.derivPasskeysLocalizations + .whatHappensIfEmailChanged, + texts: [ + context.derivPasskeysLocalizations + .whatHappensIfEmailChangedDescription1, + context.derivPasskeysLocalizations + .whatHappensIfEmailChangedDescription2 + ], + ), + Container( + width: double.infinity, + padding: const EdgeInsets.all(16), + margin: const EdgeInsets.only(top: 16), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + border: Border.all( + color: context.theme.colors.active, + ), + ), + child: FittedBox( + fit: BoxFit.scaleDown, + alignment: Alignment.centerLeft, + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SvgPicture.asset( + Assets.lightBulbIcon, + package: 'deriv_passkeys', + ), + const SizedBox( + width: 8, + ), + Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + '${context.derivPasskeysLocalizations.tips}:', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: + context.theme.colors.prominent, + ), + ), + Text( + '${context.derivPasskeysLocalizations.beforeUsingPasskeys}:', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: context.theme.colors.general, + ), ), - ), - Text( - '${context.derivPasskeysLocalizations.beforeUsingPasskeys}:', - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - color: context.theme.colors.general, + const SizedBox( + height: 4, ), - ), - const SizedBox( - height: 4, - ), - UnorderedList( - texts: [ - context.derivPasskeysLocalizations - .enableScreenLock, - context.derivPasskeysLocalizations - .signInGoogleOrIcloud, - context.derivPasskeysLocalizations - .enableBluetooth - ], - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - color: context.theme.colors.general, + UnorderedList( + texts: [ + context.derivPasskeysLocalizations + .enableScreenLock, + context.derivPasskeysLocalizations + .signInGoogleOrIcloud, + context.derivPasskeysLocalizations + .enableBluetooth + ], + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: context.theme.colors.general, + ), ), - ), - ], - ), - ], + ], + ), + ], + ), ), ), - ), - ], + ], + ), ), ), ), ), - ), - Container( - color: context.theme.colors.secondary, - width: double.infinity, - child: Padding( - padding: const EdgeInsets.only( - left: 24, right: 24, bottom: 24, top: 16), - child: PrimaryButton( - onPressed: () { - context - .read() - .add(DerivPasskeysCreateCredentialEvent()); - }, - child: Text( - context.derivPasskeysLocalizations.createPasskey, - style: TextStyle( - color: context.theme.colors.prominent, + Container( + color: context.theme.colors.secondary, + width: double.infinity, + child: Padding( + padding: const EdgeInsets.only( + left: 24, right: 24, bottom: 24, top: 16), + child: PrimaryButton( + onPressed: () { + context + .read() + .add(DerivPasskeysCreateCredentialEvent()); + }, + child: Text( + context.derivPasskeysLocalizations.createPasskey, + style: TextStyle( + color: context.theme.colors.prominent, + ), ), ), ), ), - ), - ], + ], + ), ), ), ); diff --git a/packages/deriv_passkeys/lib/src/presentation/pages/manage_passkeys_page.dart b/packages/deriv_passkeys/lib/src/presentation/pages/manage_passkeys_page.dart index fa28503bb..86071a04b 100644 --- a/packages/deriv_passkeys/lib/src/presentation/pages/manage_passkeys_page.dart +++ b/packages/deriv_passkeys/lib/src/presentation/pages/manage_passkeys_page.dart @@ -1,5 +1,6 @@ -import 'package:deriv_passkeys/src/extensions/context_extensions.dart'; +import 'package:deriv_passkeys/src/core/extensions/context_extensions.dart'; import 'package:deriv_passkeys/src/presentation/constants/assets.dart'; +import 'package:deriv_passkeys/src/presentation/mixins/passkey_event_tracking_mixin.dart'; import 'package:deriv_passkeys/src/presentation/pages/learn_more_passkeys_page.dart'; import 'package:deriv_passkeys/src/presentation/pages/passkey_created_page.dart'; import 'package:deriv_passkeys/src/presentation/states/bloc/deriv_passkeys_bloc.dart'; @@ -34,110 +35,137 @@ class ManagePasskeysPage extends StatefulWidget { State createState() => _ManagePasskeysPageState(); } -class _ManagePasskeysPageState extends State { +class _ManagePasskeysPageState extends State + with PasskeyEventTrackingMixin { @override void initState() { super.initState(); + trackOpenManagePasskeysPage(); context .read() .add(const DerivPasskeysGetPasskeysListEvent()); } @override - Widget build(BuildContext context) => Scaffold( - backgroundColor: context.theme.colors.primary, - appBar: AppBar( - title: const Text('Passkeys', style: TextStyle(fontSize: 20)), - actions: [ - InkWell( - child: Padding( - padding: const EdgeInsets.all(16), - child: SvgPicture.asset( - Assets.learnMorePasskeysIcon, - package: 'deriv_passkeys', + Widget build(BuildContext context) => WillPopScope( + onWillPop: () async { + trackCloseManagePasskeysPage(); + return true; + }, + child: Scaffold( + backgroundColor: context.theme.colors.primary, + appBar: AppBar( + title: const Text('Passkeys', style: TextStyle(fontSize: 20)), + actions: [ + InkWell( + child: Padding( + padding: const EdgeInsets.all(16), + child: SvgPicture.asset( + Assets.learnMorePasskeysIcon, + package: 'deriv_passkeys', + ), ), - ), - onTap: () { - Navigator.push( - context, - MaterialPageRoute( + onTap: () { + Navigator.push( + context, + MaterialPageRoute( builder: (BuildContext context) => LearnMorePasskeysPage( - onPageClosed: (BuildContext context) { - Navigator.pop(context); - }, - addMorePasskeysNavigationCallback: - widget.addMorePasskeysNavigationCallback, - continueTradingNavigationCallback: - widget.continueTradingNavigationCallback, - )), - ); - }, - ), - ], - ), - body: BlocConsumer( - listener: (BuildContext context, DerivPasskeysState state) { - if (state is DerivPasskeysCreatedSuccessfullyState) { - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => PasskeyCreatedPage( - onPageClose: (BuildContext context) { + onPageClosed: (BuildContext context) { Navigator.pop(context); }, - bottomCallToAction: PasskeysCreatedCallToAction( - addMorePasskeysNavigationCallback: - widget.addMorePasskeysNavigationCallback, - continueTradingNavigationCallback: - widget.continueTradingNavigationCallback, - ), - )), - ); - } else if (state is DerivPasskeysErrorState) { - handlePasskeysError(context, state); - } - }, builder: (BuildContext context, DerivPasskeysState state) { - if (state is DerivPasskeysLoadedState) { - return SafeArea( - child: SizedBox( - width: double.infinity, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _buildDerivPasskeysLoadedContent( - context, - state, + addMorePasskeysNavigationCallback: + (BuildContext context) { + trackAddMorePasskeys(); + widget.addMorePasskeysNavigationCallback(context); + }, + continueTradingNavigationCallback: + (BuildContext context) { + trackContinueTrading(); + widget.continueTradingNavigationCallback(context); + }, + ), ), - Container( - width: double.infinity, - child: Padding( - padding: const EdgeInsets.all(16), - child: PrimaryButton( - onPressed: () { - context - .read() - .add(DerivPasskeysCreateCredentialEvent()); - }, - child: Text( - context.derivPasskeysLocalizations.createPasskey, - style: TextStyle( - color: context.theme.colors.prominent, + ); + }, + ), + ], + ), + body: BlocConsumer( + listener: (BuildContext context, DerivPasskeysState state) { + if (state is DerivPasskeysCreatedSuccessfullyState) { + trackCreatePasskeySuccess(); + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => PasskeyCreatedPage( + onPageClose: (BuildContext context) { + Navigator.pop(context); + }, + bottomCallToAction: PasskeysCreatedCallToAction( + addMorePasskeysNavigationCallback: + (BuildContext context) { + trackAddMorePasskeys(); + widget.addMorePasskeysNavigationCallback(context); + }, + continueTradingNavigationCallback: + (BuildContext context) { + trackContinueTrading(); + widget.continueTradingNavigationCallback(context); + }, + ), + ), + ), + ); + } else if (state is DerivPasskeysErrorState) { + trackPasskeyError('${state.errorCode}: ${state.message}'); + handlePasskeysError(context, state); + } + }, builder: (BuildContext context, DerivPasskeysState state) { + if (state is DerivPasskeysLoadedState) { + return SafeArea( + child: SizedBox( + width: double.infinity, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + _buildDerivPasskeysLoadedContent( + context, + state, + ), + Container( + width: double.infinity, + child: Padding( + padding: const EdgeInsets.all(16), + child: PrimaryButton( + onPressed: () { + trackCreatePasskey(); + context + .read() + .add(DerivPasskeysCreateCredentialEvent()); + }, + child: Text( + context.derivPasskeysLocalizations.createPasskey, + style: TextStyle( + color: context.theme.colors.prominent, + ), ), ), ), - ), - ) - ], + ) + ], + ), ), - ), - ); - } - return const SizedBox(); - }), + ); + } + return const SizedBox(); + }), + ), ); Widget _buildDerivPasskeysListContent( - BuildContext context, DerivPasskeysLoadedState state) => + BuildContext context, + DerivPasskeysLoadedState state, + ) => Expanded( child: Padding( padding: const EdgeInsets.all(24), diff --git a/packages/deriv_passkeys/lib/src/presentation/pages/passkey_created_page.dart b/packages/deriv_passkeys/lib/src/presentation/pages/passkey_created_page.dart index b9000812e..db9b0c3fc 100644 --- a/packages/deriv_passkeys/lib/src/presentation/pages/passkey_created_page.dart +++ b/packages/deriv_passkeys/lib/src/presentation/pages/passkey_created_page.dart @@ -1,18 +1,22 @@ -import 'package:deriv_passkeys/src/extensions/context_extensions.dart'; +import 'package:deriv_passkeys/src/core/extensions/context_extensions.dart'; import 'package:deriv_passkeys/src/presentation/constants/assets.dart'; +import 'package:deriv_passkeys/src/presentation/mixins/passkey_event_tracking_mixin.dart'; import 'package:deriv_passkeys/src/presentation/utils/platform_utils.dart'; import 'package:deriv_theme/deriv_theme.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; /// A stateless widget to build the passkey created successfully page. -class PasskeyCreatedPage extends StatelessWidget { +class PasskeyCreatedPage extends StatelessWidget + with PasskeyEventTrackingMixin { /// Creates a [PasskeyCreatedPage]. - const PasskeyCreatedPage({ + PasskeyCreatedPage({ required this.onPageClose, required this.bottomCallToAction, super.key, - }); + }) { + trackCreatePasskeySuccess(); + } /// A callback function that will be called when the user clicks on the 'Continue' button. final void Function(BuildContext context) onPageClose; diff --git a/packages/deriv_passkeys/lib/src/presentation/states/bloc/deriv_passkeys_bloc.dart b/packages/deriv_passkeys/lib/src/presentation/states/bloc/deriv_passkeys_bloc.dart index cbe09a784..ea167db91 100644 --- a/packages/deriv_passkeys/lib/src/presentation/states/bloc/deriv_passkeys_bloc.dart +++ b/packages/deriv_passkeys/lib/src/presentation/states/bloc/deriv_passkeys_bloc.dart @@ -1,5 +1,7 @@ import 'dart:io'; +import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart'; +import 'package:deriv_passkeys/src/data/repositories/passkey_analytics_repository.dart'; import 'package:deriv_passkeys/src/exceptions/platform_exceptions.dart'; import 'package:deriv_passkeys/src/domain/entities/passkeys_connection_info_entity.dart'; import 'package:deriv_passkeys/src/domain/entities/deriv_passkey_entity.dart'; @@ -145,6 +147,12 @@ class DerivPasskeysBloc extends Bloc { add(const SetDerivPasskeysNotSupportedEvent()); } }); + + /// Initialize the analytics repository. + AnalyticsRepository.init( + connectionInfo.appId, + derivRudderstack: DerivRudderstack(), + ); } /// Passkeys connection info entity. diff --git a/packages/deriv_passkeys/lib/src/presentation/utils/handle_errors_utils.dart b/packages/deriv_passkeys/lib/src/presentation/utils/handle_errors_utils.dart index 192db00e2..7358e6d8f 100644 --- a/packages/deriv_passkeys/lib/src/presentation/utils/handle_errors_utils.dart +++ b/packages/deriv_passkeys/lib/src/presentation/utils/handle_errors_utils.dart @@ -1,6 +1,6 @@ //handlePasskeysError import 'package:deriv_passkeys/deriv_passkeys.dart'; -import 'package:deriv_passkeys/src/extensions/context_extensions.dart'; +import 'package:deriv_passkeys/src/core/extensions/context_extensions.dart'; import 'package:deriv_ui/widgets/popup_alert_dialog.dart'; import 'package:flutter/material.dart'; diff --git a/packages/deriv_passkeys/lib/src/presentation/utils/platform_utils.dart b/packages/deriv_passkeys/lib/src/presentation/utils/platform_utils.dart index 4dbd2c265..1e217a7e9 100644 --- a/packages/deriv_passkeys/lib/src/presentation/utils/platform_utils.dart +++ b/packages/deriv_passkeys/lib/src/presentation/utils/platform_utils.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:deriv_passkeys/src/extensions/context_extensions.dart'; +import 'package:deriv_passkeys/src/core/extensions/context_extensions.dart'; import 'package:flutter/widgets.dart'; /// Returns the platform name. diff --git a/packages/deriv_passkeys/lib/src/presentation/widgets/continue_with_passkey_button.dart b/packages/deriv_passkeys/lib/src/presentation/widgets/continue_with_passkey_button.dart index ff9a58655..9bbfa6ca0 100644 --- a/packages/deriv_passkeys/lib/src/presentation/widgets/continue_with_passkey_button.dart +++ b/packages/deriv_passkeys/lib/src/presentation/widgets/continue_with_passkey_button.dart @@ -11,9 +11,13 @@ import 'package:flutter_bloc/flutter_bloc.dart'; class ContinueWithPasskeyButton extends StatelessWidget { /// constructs a [ContinueWithPasskeyButton] const ContinueWithPasskeyButton({ + required this.onTap, super.key, }); + /// Function to handle on tap event. + final VoidCallback onTap; + @override Widget build(BuildContext context) => BlocConsumer( @@ -71,6 +75,7 @@ class ContinueWithPasskeyButton extends StatelessWidget { ), ), onTap: () async { + onTap(); context .read() .add(DerivPasskeysVerifyCredentialEvent()); diff --git a/packages/deriv_passkeys/lib/src/presentation/widgets/passkey_created_call_to_action.dart b/packages/deriv_passkeys/lib/src/presentation/widgets/passkey_created_call_to_action.dart index 50591285c..2555e0bf1 100644 --- a/packages/deriv_passkeys/lib/src/presentation/widgets/passkey_created_call_to_action.dart +++ b/packages/deriv_passkeys/lib/src/presentation/widgets/passkey_created_call_to_action.dart @@ -1,4 +1,4 @@ -import 'package:deriv_passkeys/src/extensions/context_extensions.dart'; +import 'package:deriv_passkeys/src/core/extensions/context_extensions.dart'; import 'package:deriv_theme/deriv_theme.dart'; import 'package:deriv_ui/deriv_ui.dart'; import 'package:flutter/material.dart'; diff --git a/packages/deriv_passkeys/lib/src/presentation/widgets/passkey_widget.dart b/packages/deriv_passkeys/lib/src/presentation/widgets/passkey_widget.dart index f6d1a7340..5b7f954f5 100644 --- a/packages/deriv_passkeys/lib/src/presentation/widgets/passkey_widget.dart +++ b/packages/deriv_passkeys/lib/src/presentation/widgets/passkey_widget.dart @@ -1,5 +1,5 @@ import 'package:deriv_passkeys/src/domain/entities/deriv_passkey_entity.dart'; -import 'package:deriv_passkeys/src/extensions/context_extensions.dart'; +import 'package:deriv_passkeys/src/core/extensions/context_extensions.dart'; import 'package:deriv_passkeys/src/presentation/constants/assets.dart'; import 'package:deriv_passkeys/src/presentation/utils/date_time_utils.dart'; import 'package:deriv_theme/deriv_theme.dart'; diff --git a/packages/deriv_passkeys/pubspec.yaml b/packages/deriv_passkeys/pubspec.yaml index a5fe81267..a4c7ecab5 100644 --- a/packages/deriv_passkeys/pubspec.yaml +++ b/packages/deriv_passkeys/pubspec.yaml @@ -10,26 +10,36 @@ dependencies: flutter: sdk: flutter + analytics: + git: + url: git@github.com:regentmarkets/flutter-deriv-packages.git + path: packages/analytics + ref: analytics-v2.0.0 + deriv_theme: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_theme ref: deriv_theme-v2.5.0 + deriv_localizations: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_localizations ref: deriv_localizations-v1.4.4 + deriv_ui: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_ui ref: deriv_ui-v0.0.7+6 + deriv_http_client: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_http_client ref: deriv_http_client-v2.0.1 + flutter_deriv_api: git: url: git@github.com:deriv-com/flutter-deriv-api.git diff --git a/packages/deriv_passkeys/test/core/constants/tracking_event_params_helper_test.dart b/packages/deriv_passkeys/test/core/constants/tracking_event_params_helper_test.dart new file mode 100644 index 000000000..183505ba9 --- /dev/null +++ b/packages/deriv_passkeys/test/core/constants/tracking_event_params_helper_test.dart @@ -0,0 +1,277 @@ +import 'package:deriv_passkeys/src/core/constants/analytics_actions_enums.dart'; +import 'package:deriv_passkeys/src/core/constants/tracking_event_params_helper.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + group('getTrackingParams tests:\n\t', () { + group('efforless login flow -> ', () { + test('should return correct params for openEffortlessLoginPage', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getEffortlessLoginTrackingParams( + EffortlessPageActions.openEffortlessLoginPage, + ); + + expect(result, { + 'event_name': 'open', + 'params': { + 'form_name': 'ce_passkey_effortless_form_', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for closeEffortlessLoginPage', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getEffortlessLoginTrackingParams( + EffortlessPageActions.closeEffortlessLoginPage, + ); + + expect(result, { + 'event_name': 'close', + 'params': { + 'form_name': 'ce_passkey_effortless_form_', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for maybeLater', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getEffortlessLoginTrackingParams( + EffortlessPageActions.maybeLater, + ); + + expect(result, { + 'event_name': 'maybe_later', + 'params': { + 'form_name': 'ce_passkey_effortless_form_', + 'operating_system': 'IOS', + }, + }); + }); + }); + + group('tracking learn more page actions ->', () { + test('should return correct params for openLearnMorePage', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getLearnMoreTrackingParams( + LearnMorePageActions.openLearnMorePage, + 'main_form_name', + ); + + expect(result, { + 'event_name': 'info_open', + 'params': { + 'form_name': 'main_form_name', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for closeLearnMorePage', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getLearnMoreTrackingParams( + LearnMorePageActions.closeLearnMorePage, + 'main_form_name', + ); + + expect(result, { + 'event_name': 'info_back', + 'params': { + 'form_name': 'main_form_name', + 'operating_system': 'IOS', + }, + }); + }); + }); + + group('tracking manage passkeys page actions ->', () { + test('should return correct params for openManagePasskeysPage', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getManagePasskeysTrackingParams( + ManagePasskeysPageActions.openManagePasskeysPage, + ); + + expect(result, { + 'event_name': 'open', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for closeManagePasskeysPage', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getManagePasskeysTrackingParams( + ManagePasskeysPageActions.closeManagePasskeysPage, + ); + + expect(result, { + 'event_name': 'close', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': 'IOS', + }, + }); + }); + }); + + group('tracking create passkey actions ->', () { + test('should return correct params for createPasskey', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.createPasskey, + mainFormName: 'main_form_name', + subFormName: 'sub_form_name', + ); + + expect(result, { + 'event_name': 'create_passkey_started', + 'params': { + 'form_name': 'main_form_name', + 'subform_name': 'sub_form_name', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for createPasskeySuccess', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.createPasskeySuccess, + mainFormName: 'main_form_name', + subFormName: 'sub_form_name', + ); + + expect(result, { + 'event_name': 'create_passkey_finished', + 'params': { + 'form_name': 'main_form_name', + 'subform_name': 'sub_form_name', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for error', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.error, + mainFormName: 'main_form_name', + subFormName: 'sub_form_name', + errorMessage: 'error_message', + ); + + expect(result, { + 'event_name': 'error', + 'params': { + 'form_name': 'main_form_name', + 'subform_name': 'sub_form_name', + 'error_message': 'error_message', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for continueTrading', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.continueTrading, + mainFormName: 'main_form_name', + subFormName: 'sub_form_name', + ); + + expect(result, { + 'event_name': 'create_passkey_continue_trading', + 'params': { + 'form_name': 'main_form_name', + 'subform_name': 'sub_form_name', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for addMorePasskeys', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getCreatePasskeyTrackingParams( + CreatePasskeyFlowActions.addMorePasskeys, + mainFormName: 'main_form_name', + subFormName: 'sub_form_name', + ); + + expect(result, { + 'event_name': 'create_passkey_add_more_passkeys', + 'params': { + 'form_name': 'main_form_name', + 'subform_name': 'sub_form_name', + 'operating_system': 'IOS', + }, + }); + }); + }); + + group('tracking rename passkey page actions ->', () { + test('should return correct params for renamePasskey', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getRenamePasskeyTrackingParams( + RenamePasskeyFlowActions.renamePasskey, + ); + + expect(result, { + 'event_name': 'passkey_rename_open', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for cancelRenamePasskey', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getRenamePasskeyTrackingParams( + RenamePasskeyFlowActions.cancelRenamePasskey, + ); + + expect(result, { + 'event_name': 'passkey_rename_back', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': 'IOS', + }, + }); + }); + + test('should return correct params for renamePasskeySuccess', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final Map result = getRenamePasskeyTrackingParams( + RenamePasskeyFlowActions.renamePasskeySuccess, + ); + + expect(result, { + 'event_name': 'passkey_rename_success', + 'params': { + 'form_name': 'ce_passkey_account_settings_form_', + 'operating_system': 'IOS', + }, + }); + }); + }); + }); +} diff --git a/packages/deriv_passkeys/test/data/passkey_analytics_repository_test.dart b/packages/deriv_passkeys/test/data/passkey_analytics_repository_test.dart new file mode 100644 index 000000000..3ea8f51fc --- /dev/null +++ b/packages/deriv_passkeys/test/data/passkey_analytics_repository_test.dart @@ -0,0 +1,168 @@ +import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart'; +import 'package:deriv_passkeys/src/data/repositories/passkey_analytics_repository.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; + +final class MockDerivRudderstack extends Mock implements DerivRudderstack {} + +void main() { + group('AnalyticsRepository test.', () { + /// [AnalyticsRepository] instance. + late final AnalyticsRepository analyticsRepository; + + /// [MockDerivRudderstack] instance. + late final MockDerivRudderstack mockDerivRudderstack; + + setUpAll(() { + mockDerivRudderstack = MockDerivRudderstack(); + + when(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).thenAnswer( + (_) => Future.value(true), + ); + + AnalyticsRepository.init( + 'test', + derivRudderstack: mockDerivRudderstack, + ); + + analyticsRepository = AnalyticsRepository.instance; + }); + + test('should track opening effortlessLoginPage.', () { + analyticsRepository.trackOpenEffortlessLoginPage(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track closing effortlessLoginPage.', () { + analyticsRepository.trackCloseEffortlessLoginPage(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track maybe later is pressed.', () { + analyticsRepository.trackMaybeLater(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track opening learn more page.', () { + analyticsRepository.trackOpenLearnMorePage(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track closing learn more page.', () { + analyticsRepository.trackCloseLearnMorePage(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track opening manage passkeys page.', () { + analyticsRepository.trackOpenManagePasskeysPage(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track closing manage passkeys page.', () { + analyticsRepository.trackCloseManagePasskeysPage(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track create passkey.', () { + analyticsRepository.trackCreatePasskey(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + test('should track passkey error.', () { + analyticsRepository.trackPasskeyError('error message'); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track continue trading.', () { + analyticsRepository.trackContinueTrading(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track add more passkeys.', () { + analyticsRepository.trackAddMorePasskeys(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track create passkey success.', () { + analyticsRepository.trackCreatePasskeySuccess(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track rename passkey.', () { + analyticsRepository.trackRenamePasskey(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track cancel rename passkey.', () { + analyticsRepository.trackCancelRenamePasskey(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + + test('should track rename passkey success.', () { + analyticsRepository.trackRenamePasskeySuccess(); + + verify(() => mockDerivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).called(1); + }); + }); +} diff --git a/packages/deriv_passkeys/test/presentation/mixins/passkey_event_tracking_mixin_test.dart b/packages/deriv_passkeys/test/presentation/mixins/passkey_event_tracking_mixin_test.dart new file mode 100644 index 000000000..c04e8aa07 --- /dev/null +++ b/packages/deriv_passkeys/test/presentation/mixins/passkey_event_tracking_mixin_test.dart @@ -0,0 +1,146 @@ +import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart'; +import 'package:deriv_passkeys/src/data/repositories/passkey_analytics_repository.dart'; +import 'package:deriv_passkeys/src/presentation/mixins/passkey_event_tracking_mixin.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mocktail/mocktail.dart'; + +final class MockDerivRudderstack extends Mock implements DerivRudderstack {} + +// class AnalyticsMixinObject = Object with AnalyticsMixin; + +class AnalyticsMixinObject with PasskeyEventTrackingMixin {} + +void main() { + group('Analytics mixin tests:\n', () { + late final MockDerivRudderstack mockRudderStack; + late final AnalyticsMixinObject analyticsMixin; + + setUpAll(() { + analyticsMixin = AnalyticsMixinObject(); + mockRudderStack = MockDerivRudderstack(); + + AnalyticsRepository.init( + 'test', + derivRudderstack: mockRudderStack, + ); + when( + () => mockRudderStack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + ), + ).thenAnswer( + (_) => Future.value(true), + ); + }); + + test('Analytics mixin has a AnalyticsRepository parameter.', () { + expect( + analyticsMixin.analyticsRepository, + AnalyticsRepository.instance, + ); + }); + + test('should track opening effortlessLoginPage.', () { + analyticsMixin.trackOpenEffortlessLoginPage(); + + verify(() => AnalyticsRepository.instance.trackOpenEffortlessLoginPage()) + .called(1); + }); + + test('should track closing effortlessLoginPage.', () { + analyticsMixin.trackCloseEffortlessLoginPage(); + + verify(() => AnalyticsRepository.instance.trackCloseEffortlessLoginPage()) + .called(1); + }); + + test('should track maybe later is pressed.', () { + analyticsMixin.trackMaybeLater(); + + verify(() => AnalyticsRepository.instance.trackMaybeLater()).called(1); + }); + + test('should track opening learn more page.', () { + analyticsMixin.trackOpenLearnMorePage(); + + verify(() => AnalyticsRepository.instance.trackOpenLearnMorePage()) + .called(1); + }); + + test('should track closing learn more page.', () { + analyticsMixin.trackCloseLearnMorePage(); + + verify(() => AnalyticsRepository.instance.trackCloseLearnMorePage()) + .called(1); + }); + + test('should track opening manage passkeys page.', () { + analyticsMixin.trackOpenManagePasskeysPage(); + + verify(() => AnalyticsRepository.instance.trackOpenManagePasskeysPage()) + .called(1); + }); + + test('should track closing manage passkeys page.', () { + analyticsMixin.trackCloseManagePasskeysPage(); + + verify(() => AnalyticsRepository.instance.trackCloseManagePasskeysPage()) + .called(1); + }); + + test('should track create passkey.', () { + analyticsMixin.trackCreatePasskey(); + + verify(() => AnalyticsRepository.instance.trackCreatePasskey()).called(1); + }); + + test('should track create passkey success.', () { + analyticsMixin.trackCreatePasskeySuccess(); + + verify(() => AnalyticsRepository.instance.trackCreatePasskeySuccess()) + .called(1); + }); + + test('should track passkey error.', () { + analyticsMixin.trackPasskeyError('error message'); + + verify(() => + AnalyticsRepository.instance.trackPasskeyError('error message')) + .called(1); + }); + + test('should track continue trading.', () { + analyticsMixin.trackContinueTrading(); + + verify(() => AnalyticsRepository.instance.trackContinueTrading()) + .called(1); + }); + + test('should track add more passkeys.', () { + analyticsMixin.trackAddMorePasskeys(); + + verify(() => AnalyticsRepository.instance.trackAddMorePasskeys()) + .called(1); + }); + + test('should track rename passkey.', () { + analyticsMixin.trackRenamePasskey(); + + verify(() => AnalyticsRepository.instance.trackRenamePasskey()).called(1); + }); + + test('should track cancel rename passkey.', () { + analyticsMixin.trackCancelRenamePasskey(); + + verify(() => AnalyticsRepository.instance.trackCancelRenamePasskey()) + .called(1); + }); + + test('should track rename passkey success.', () { + analyticsMixin.trackRenamePasskeySuccess(); + + verify(() => AnalyticsRepository.instance.trackRenamePasskeySuccess()) + .called(1); + }); + }); +} diff --git a/packages/deriv_passkeys/test/presentation/pages/learn_more_passkeys_page_test.dart b/packages/deriv_passkeys/test/presentation/pages/learn_more_passkeys_page_test.dart index adc491d2a..f6abb7bbe 100644 --- a/packages/deriv_passkeys/test/presentation/pages/learn_more_passkeys_page_test.dart +++ b/packages/deriv_passkeys/test/presentation/pages/learn_more_passkeys_page_test.dart @@ -1,7 +1,8 @@ -import 'package:bloc_test/bloc_test.dart'; +import 'package:analytics/sdk/rudderstack/sdk/deriv_rudderstack_sdk.dart'; import 'package:deriv_localizations/l10n/generated/deriv_passkeys/deriv_passkeys_localizations.dart'; import 'package:deriv_localizations/l10n/generated/deriv_passkeys/deriv_passkeys_localizations_en.dart'; import 'package:deriv_passkeys/deriv_passkeys.dart'; +import 'package:deriv_passkeys/src/data/repositories/passkey_analytics_repository.dart'; import 'package:deriv_passkeys/src/presentation/widgets/section_title_and_content.dart'; import 'package:deriv_passkeys/src/presentation/widgets/unordered_list_widget.dart'; import 'package:flutter/material.dart'; @@ -11,9 +12,9 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:deriv_passkeys/src/presentation/pages/learn_more_passkeys_page.dart'; import 'package:mocktail/mocktail.dart'; -class MockDerivPasskeysBloc - extends MockBloc - implements DerivPasskeysBloc {} +import '../states/bloc/deriv_passkeys_bloc_setup.dart'; + +final class MockDerivRudderstack extends Mock implements DerivRudderstack {} class _TestPage extends StatelessWidget { const _TestPage(); @@ -35,16 +36,23 @@ class _TestPage extends StatelessWidget { } void main() { + late MockDerivRudderstack derivRudderstack; group('LearnMorePasskeysPage', () { - late MockDerivPasskeysBloc derivPasskeysBloc; setUp(() { - derivPasskeysBloc = MockDerivPasskeysBloc(); + setupDerivPasskeysBloc(); + + derivRudderstack = MockDerivRudderstack(); - when(() => derivPasskeysBloc.state).thenReturn( - DerivPasskeysInitializedState(), + when(() => derivRudderstack.track( + eventName: any(named: 'eventName'), + properties: any(named: 'properties'), + )).thenAnswer( + (_) => Future.value(true), ); - when(() => derivPasskeysBloc.isDp2p).thenReturn( - false, + + AnalyticsRepository.init( + 'test', + derivRudderstack: derivRudderstack, ); }); diff --git a/packages/deriv_passkeys/test/presentation/states/bloc/deriv_passkeys_bloc_setup.dart b/packages/deriv_passkeys/test/presentation/states/bloc/deriv_passkeys_bloc_setup.dart index 6f96991a7..0c8e906c7 100644 --- a/packages/deriv_passkeys/test/presentation/states/bloc/deriv_passkeys_bloc_setup.dart +++ b/packages/deriv_passkeys/test/presentation/states/bloc/deriv_passkeys_bloc_setup.dart @@ -3,8 +3,10 @@ import 'package:mocktail/mocktail.dart'; class MockDerivPasskeysService extends Mock implements DerivPasskeysService {} -class MockPasskeysConnectionInfoEntity extends Mock - implements PasskeysConnectionInfoEntity {} +class MockPasskeysConnectionInfoEntity extends PasskeysConnectionInfoEntity { + MockPasskeysConnectionInfoEntity( + {required super.endpoint, required super.appId}); +} late DerivPasskeysBloc derivPasskeysBloc; late MockDerivPasskeysService mockDerivPasskeysService; @@ -12,7 +14,10 @@ late MockPasskeysConnectionInfoEntity mockPasskeysConnectionInfoEntity; void setupDerivPasskeysBloc() { mockDerivPasskeysService = MockDerivPasskeysService(); - mockPasskeysConnectionInfoEntity = MockPasskeysConnectionInfoEntity(); + mockPasskeysConnectionInfoEntity = MockPasskeysConnectionInfoEntity( + appId: 'appId', + endpoint: '', + ); when(() => mockDerivPasskeysService.isSupported()) .thenAnswer((_) async => true); derivPasskeysBloc = DerivPasskeysBloc( diff --git a/packages/deriv_passkeys/test/presentation/widgets/continue_with_passkey_button_test.dart b/packages/deriv_passkeys/test/presentation/widgets/continue_with_passkey_button_test.dart index 70c973c68..f3f580ed6 100644 --- a/packages/deriv_passkeys/test/presentation/widgets/continue_with_passkey_button_test.dart +++ b/packages/deriv_passkeys/test/presentation/widgets/continue_with_passkey_button_test.dart @@ -17,13 +17,15 @@ class _TestPage extends StatelessWidget { const _TestPage(); @override - Widget build(BuildContext context) => const MaterialApp( - localizationsDelegates: >[ + Widget build(BuildContext context) => MaterialApp( + localizationsDelegates: const >[ DerivPasskeysLocalizations.delegate, ], - locale: Locale('en'), + locale: const Locale('en'), home: Scaffold( - body: ContinueWithPasskeyButton(), + body: ContinueWithPasskeyButton( + onTap: () {}, + ), ), ); } From a28ecab9de16a212a3ce29ac63067f33c093b476 Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Thu, 20 Jun 2024 20:46:25 +0800 Subject: [PATCH 16/18] chore(deriv_localizations): Crowdin Localization Updated (#619) --- .../deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb | 6 +++--- .../deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb | 4 ++-- .../deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb | 6 +++--- .../deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb index dc5e97cbb..97df1c81e 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_pt.arb @@ -26,9 +26,9 @@ "howToCreatePasskey": "Como criar uma chave de acesso?", "howToCreatePasskeyDescription1": "Aceda às \"Definições de conta\" na Deriv.", "howToCreatePasskeyDescription2": "Pode criar uma passkey por dispositivo.", - "p2pHowToCreatePasskey": "Como criar uma chave de acesso?", - "p2pHowToCreatePasskeyDescription1": "Vá para 'Perfil' em seu aplicativo Deriv P2P.", - "p2pHowToCreatePasskeyDescription2": "Toque em “Chaves de acesso” para criar sua chave de acesso.", + "p2pHowToCreatePasskey": "Como pode criar uma passkey?", + "p2pHowToCreatePasskeyDescription1": "Aceda à secção \"Perfil\" na sua aplicação Deriv P2P.", + "p2pHowToCreatePasskeyDescription2": "Selecione \"Passkeys\" para criar a sua chave de acesso.", "whereArePasskeysSaved": "Onde são guardadas as chaves de acesso?", "whereArePasskeysSavedDescriptionAndroid": "Android: Gestor de palavras-passe do Google.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud keychain.", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb index b4a8d5c12..60425dc8b 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_th.arb @@ -26,9 +26,9 @@ "howToCreatePasskey": "จะสร้าง Passkey ได้อย่างไร?", "howToCreatePasskeyDescription1": "ไปที่ 'การตั้งค่าบัญชี' บน Deriv", "howToCreatePasskeyDescription2": "คุณสามารถสร้างหนึ่ง Passkey ต่ออุปกรณ์", - "p2pHowToCreatePasskey": "วิธีการสร้างรหัสผ่าน", + "p2pHowToCreatePasskey": "จะสร้าง Passkey ได้อย่างไร?", "p2pHowToCreatePasskeyDescription1": "ไปที่ 'โปรไฟล์' ในแอป Deriv P2P ของคุณ", - "p2pHowToCreatePasskeyDescription2": "แตะ 'รหัสผ่าน' เพื่อสร้างรหัสผ่านของคุณ", + "p2pHowToCreatePasskeyDescription2": "แตะ 'Passkeys' เพื่อสร้าง Passkey ของคุณ", "whereArePasskeysSaved": "Passkey จะถูกบันทึกไว้ที่ไหน?", "whereArePasskeysSavedDescriptionAndroid": "Android: ตัวจัดการรหัสผ่าน Google", "whereArePasskeysSavedDescriptionIOS": "iOS: พวงกุญแจ iCloud", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb index 5fd54dbdc..d6b3ed6b1 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_tr.arb @@ -26,9 +26,9 @@ "howToCreatePasskey": "Passkey nasıl oluşturulur?", "howToCreatePasskeyDescription1": "Deriv'de 'Hesap Ayarları'na gidin.", "howToCreatePasskeyDescription2": "Cihaz başına bir passkey oluşturabilirsiniz.", - "p2pHowToCreatePasskey": "Parola nasıl oluşturulur?", + "p2pHowToCreatePasskey": "Passkey nasıl oluşturulur?", "p2pHowToCreatePasskeyDescription1": "Deriv P2P uygulamanızdaki 'Profil' bölümüne gidin.", - "p2pHowToCreatePasskeyDescription2": "Parola anahtarınızı oluşturmak için 'Parola Tuşları'na dokunun.", + "p2pHowToCreatePasskeyDescription2": "Passkey'inizi oluşturmak için \"Passkeys\" ögesine dokunun.", "whereArePasskeysSaved": "Passkeys nereye kaydedilir?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google şifre yöneticisi.", "whereArePasskeysSavedDescriptionIOS": "iOS: iCloud anahtar zinciri.", @@ -55,7 +55,7 @@ "rename": "Yeniden Adlandır", "revoke": "İptal", "continueTradingButtonText": "Alım satıma devam", - "addMorePasskeysButtonText": "Daha fazla passkeys", + "addMorePasskeysButtonText": "Daha fazla passkeys ekle", "unableToSetupPasskey": "Passkey ayarlanamıyor", "unableToSetupPasskeyDescription": "Passkey ayarlarken bir sorunla karşılaştık. İşlem yarıda kesilmiş veya oturum zaman aşımına uğramış olabilir. Lütfen tekrar deneyin.", "passkeysOffErrorTitle": "Passkeys hizmeti kullanılamıyor", diff --git a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb index a49322481..670eaea44 100644 --- a/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb +++ b/packages/deriv_localizations/lib/l10n/deriv_passkeys/app_zh.arb @@ -26,9 +26,9 @@ "howToCreatePasskey": "如何建立金鑰?", "howToCreatePasskeyDescription1": "轉到 Deriv 的‘帳戶設定‘。", "howToCreatePasskeyDescription2": "可以為每個裝置建立一個金鑰。", - "p2pHowToCreatePasskey": "如何建立密碼?", - "p2pHowToCreatePasskeyDescription1": "在您的 Deriv P2P 應用程序中轉到「個人資料」。", - "p2pHowToCreatePasskeyDescription2": "點擊「密碼」以建立您的密碼。", + "p2pHowToCreatePasskey": "如何建立金鑰?", + "p2pHowToCreatePasskeyDescription1": "在 Deriv P2P 應用程式中轉到‘個人資料‘。", + "p2pHowToCreatePasskeyDescription2": "點選‘密鑰‘以建立密鑰。", "whereArePasskeysSaved": "金鑰儲存在哪裡?", "whereArePasskeysSavedDescriptionAndroid": "Android: Google 密碼管理器。", "whereArePasskeysSavedDescriptionIOS": "iOS:iCloud 鑰匙圈。", From 2fdc28f20b8efe2ddc3a9a261c40b533307f25e3 Mon Sep 17 00:00:00 2001 From: abedelaziz-deriv <135210555+abedelaziz-deriv@users.noreply.github.com> Date: Fri, 21 Jun 2024 10:18:18 +0800 Subject: [PATCH 17/18] refactor(deriv_passkeys): Removed deprecated linter rules (#625) --- melos.yaml | 1 + packages/deriv_passkeys/analysis_options.yaml | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/melos.yaml b/melos.yaml index 256370441..c2d73fcdb 100644 --- a/melos.yaml +++ b/melos.yaml @@ -36,6 +36,7 @@ scripts: description: Run flutter test for all packages. run: flutter test --coverage exec: + concurrency: 6 failFast: true packageFilters: dirExists: diff --git a/packages/deriv_passkeys/analysis_options.yaml b/packages/deriv_passkeys/analysis_options.yaml index fb40ccd5d..aea7c9654 100644 --- a/packages/deriv_passkeys/analysis_options.yaml +++ b/packages/deriv_passkeys/analysis_options.yaml @@ -7,7 +7,6 @@ linter: - always_declare_return_types - always_put_control_body_on_new_line - always_put_required_named_parameters_first - - always_require_non_null_named_parameters - always_specify_types - annotate_overrides - avoid_bool_literals_in_conditional_expressions @@ -24,8 +23,6 @@ linter: - avoid_relative_lib_imports - avoid_renaming_method_parameters - avoid_return_types_on_setters - - avoid_returning_null - - avoid_returning_null_for_future - avoid_returning_null_for_void - avoid_setters_without_getters - avoid_shadowing_type_parameters From 90260eabb92d851d7f77ac45e4caffb5ca66429b Mon Sep 17 00:00:00 2001 From: mobile-apps-deriv <134251399+mobile-apps-deriv@users.noreply.github.com> Date: Fri, 21 Jun 2024 11:29:32 +0800 Subject: [PATCH 18/18] chore(version): bump version and update changelog (#623) --- CHANGELOG.md | 29 ++++++++++++++++++++++++++++ packages/deriv_auth/CHANGELOG.md | 4 ++++ packages/deriv_auth/pubspec.yaml | 4 ++-- packages/deriv_passkeys/CHANGELOG.md | 5 +++++ packages/deriv_passkeys/pubspec.yaml | 2 +- 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a87df2a72..f149e381e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,35 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## 2024-06-21 + +### Changes + +--- + +Packages with breaking changes: + + - There are no breaking changes in this release. + +Packages with other changes: + + - [`deriv_passkeys` - `v0.0.2`](#deriv_passkeys---v002) + - [`deriv_auth` - `v6.6.8`](#deriv_auth---v668) + +Packages with dependency updates only: + +> Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project. + + - `deriv_auth` - `v6.6.8` + +--- + +#### `deriv_passkeys` - `v0.0.2` + + - **REFACTOR**(deriv_passkeys): Removed deprecated linter rules ([#625](https://github.com/regentmarkets/flutter-deriv-packages/issues/625)). ([2fdc28f2](https://github.com/regentmarkets/flutter-deriv-packages/commit/2fdc28f20b8efe2ddc3a9a261c40b533307f25e3)) + - **FEAT**(deriv_passkeys): add user tracking events. ([#607](https://github.com/regentmarkets/flutter-deriv-packages/issues/607)). ([d86b51e2](https://github.com/regentmarkets/flutter-deriv-packages/commit/d86b51e2fe4ca4d18768d0ba17567a388a8d360d)) + + ## 2024-06-20 ### Changes diff --git a/packages/deriv_auth/CHANGELOG.md b/packages/deriv_auth/CHANGELOG.md index c6e1aba6d..f6108faa2 100644 --- a/packages/deriv_auth/CHANGELOG.md +++ b/packages/deriv_auth/CHANGELOG.md @@ -1,3 +1,7 @@ +## 6.6.8 + + - Update a dependency to the latest release. + ## 6.6.7 - Update a dependency to the latest release. diff --git a/packages/deriv_auth/pubspec.yaml b/packages/deriv_auth/pubspec.yaml index 1f953e4b9..7d058b6b5 100644 --- a/packages/deriv_auth/pubspec.yaml +++ b/packages/deriv_auth/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_auth description: Provides deriv authentication functionalities for dart/flutter apps. -version: 6.6.7 +version: 6.6.8 environment: sdk: ">=3.0.0 <4.0.0" @@ -51,7 +51,7 @@ dependencies: git: url: git@github.com:regentmarkets/flutter-deriv-packages.git path: packages/deriv_passkeys - ref: deriv_passkeys-v0.0.1+8 + ref: deriv_passkeys-v0.0.2 deriv_language_selector: git: diff --git a/packages/deriv_passkeys/CHANGELOG.md b/packages/deriv_passkeys/CHANGELOG.md index 467720e5b..4a8a4e3b9 100644 --- a/packages/deriv_passkeys/CHANGELOG.md +++ b/packages/deriv_passkeys/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.0.2 + + - **REFACTOR**(deriv_passkeys): Removed deprecated linter rules ([#625](https://github.com/regentmarkets/flutter-deriv-packages/issues/625)). ([2fdc28f2](https://github.com/regentmarkets/flutter-deriv-packages/commit/2fdc28f20b8efe2ddc3a9a261c40b533307f25e3)) + - **FEAT**(deriv_passkeys): add user tracking events. ([#607](https://github.com/regentmarkets/flutter-deriv-packages/issues/607)). ([d86b51e2](https://github.com/regentmarkets/flutter-deriv-packages/commit/d86b51e2fe4ca4d18768d0ba17567a388a8d360d)) + ## 0.0.1+8 - Update a dependency to the latest release. diff --git a/packages/deriv_passkeys/pubspec.yaml b/packages/deriv_passkeys/pubspec.yaml index a4c7ecab5..f51b9c42d 100644 --- a/packages/deriv_passkeys/pubspec.yaml +++ b/packages/deriv_passkeys/pubspec.yaml @@ -1,6 +1,6 @@ name: deriv_passkeys description: Deriv Passkeys Flutter Plugin -version: 0.0.1+8 +version: 0.0.2 publish_to: "none" environment: