Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 159 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,113 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## 2026-03-30

### Changes

---

Packages with breaking changes:

- There are no breaking changes in this release.

Packages with other changes:

- [`ensemble` - `v1.2.38-beta.2`](#ensemble---v1238-beta2)
- [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)

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.

- `ensemble_stripe` - `v1.0.1`
- `ensemble_chat` - `v0.0.1+1`
- `ensemble_contacts` - `v0.0.1+1`
- `ensemble_auth` - `v1.0.1`
- `ensemble_camera` - `v0.0.1+1`
- `ensemble_location` - `v0.0.1+1`
- `ensemble_file_manager` - `v0.0.1+1`
- `ensemble_bluetooth` - `v0.0.1+1`
- `ensemble_face_camera` - `v0.0.1+1`
- `ensemble_connect` - `v0.0.1+1`
- `ensemble_deeplink` - `v0.0.1+1`
- `ensemble_network_info` - `v0.0.1+1`

---

#### `ensemble` - `v1.2.38-beta.2`

- Releasing new beta version 1.2.38.2


## 2026-03-27

### Changes

---

Packages with breaking changes:

- There are no breaking changes in this release.

Packages with other changes:

- [`ensemble` - `v1.2.38-beta.1`](#ensemble---v1238-beta1)
- [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)
- [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)

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.

- `ensemble_stripe` - `v1.0.1`
- `ensemble_chat` - `v0.0.1+1`
- `ensemble_bluetooth` - `v0.0.1+1`
- `ensemble_file_manager` - `v0.0.1+1`
- `ensemble_deeplink` - `v0.0.1+1`
- `ensemble_connect` - `v0.0.1+1`
- `ensemble_auth` - `v1.0.1`
- `ensemble_location` - `v0.0.1+1`
- `ensemble_camera` - `v0.0.1+1`
- `ensemble_contacts` - `v0.0.1+1`
- `ensemble_face_camera` - `v0.0.1+1`
- `ensemble_network_info` - `v0.0.1+1`

---

#### `ensemble` - `v1.2.38-beta.1`

- **FIX**(phone_contact): replace RuntimeError with debugPrint for missing contact photo. ([b36b399d](https://github.com/ensembleUI/ensemble/commit/b36b399d91fad26e46e14f0845c624a3f8b768c9))
- **FIX**(firestore_types): handle FirestoreTimestamp conversion in EnsembleFieldValue class. ([a4e8dba0](https://github.com/ensembleUI/ensemble/commit/a4e8dba0142250eee12b09fd012ae85e5ac18f2f))
- **FIX**(page_model): convert keys to strings in merged global actions. ([4dcb7e4a](https://github.com/ensembleUI/ensemble/commit/4dcb7e4a888a6259cb4f1a8daceb6338731ec6c8))
- **FEAT**(action): add ActionType.executeAction to ActionInvokable class. ([b5cc5a4a](https://github.com/ensembleUI/ensemble/commit/b5cc5a4af5ac95b0ed4971349f5cf5ab9a481672))
- **FEAT**(lottie): add custom Lottie decoder for .lottie file ext support. ([cc73e7cf](https://github.com/ensembleUI/ensemble/commit/cc73e7cf87475a7e538b0c88a099a90c5c63af21))
- **FEAT**(env): enhance environment variable loading and parsing. ([b7666ceb](https://github.com/ensembleUI/ensemble/commit/b7666ceb292427ad24445cc3080a68e9aca8c47a))
- **FEAT**(cdn_provider): add runtime translation refresh and testing capabilities. ([c9ba1fd2](https://github.com/ensembleUI/ensemble/commit/c9ba1fd23c34031c96e2248f1b05cf2ba2b4bc88))
- **FEAT**(secure_storage): enhance secure storage actions with optional encryption parameters. ([dee0bb57](https://github.com/ensembleUI/ensemble/commit/dee0bb571152e95b4cdc658924b2399c6b4f58b4))


## 2026-03-18

### Changes
Expand Down Expand Up @@ -257,6 +364,58 @@ Packages with dependency updates only:
- **FEAT**(actions): introduce reusable action execution framework. ([482d7de9](https://github.com/ensembleUI/ensemble/commit/482d7de922433bb41a282cfdd018f13866fe511f))


## 2026-03-06

### Changes

---

Packages with breaking changes:

- There are no breaking changes in this release.

Packages with other changes:

- [`ensemble` - `v1.2.35-beta.1`](#ensemble---v1235-beta1)
- [`ensemble_auth` - `v1.0.1`](#ensemble_auth---v101)
- [`ensemble_camera` - `v0.0.1+1`](#ensemble_camera---v0011)
- [`ensemble_stripe` - `v1.0.1`](#ensemble_stripe---v101)
- [`ensemble_chat` - `v0.0.1+1`](#ensemble_chat---v0011)
- [`ensemble_file_manager` - `v0.0.1+1`](#ensemble_file_manager---v0011)
- [`ensemble_deeplink` - `v0.0.1+1`](#ensemble_deeplink---v0011)
- [`ensemble_network_info` - `v0.0.1+1`](#ensemble_network_info---v0011)
- [`ensemble_location` - `v0.0.1+1`](#ensemble_location---v0011)
- [`ensemble_face_camera` - `v0.0.1+1`](#ensemble_face_camera---v0011)
- [`ensemble_connect` - `v0.0.1+1`](#ensemble_connect---v0011)
- [`ensemble_contacts` - `v0.0.1+1`](#ensemble_contacts---v0011)
- [`ensemble_bluetooth` - `v0.0.1+1`](#ensemble_bluetooth---v0011)

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.

- `ensemble_auth` - `v1.0.1`
- `ensemble_camera` - `v0.0.1+1`
- `ensemble_stripe` - `v1.0.1`
- `ensemble_chat` - `v0.0.1+1`
- `ensemble_file_manager` - `v0.0.1+1`
- `ensemble_deeplink` - `v0.0.1+1`
- `ensemble_network_info` - `v0.0.1+1`
- `ensemble_location` - `v0.0.1+1`
- `ensemble_face_camera` - `v0.0.1+1`
- `ensemble_connect` - `v0.0.1+1`
- `ensemble_contacts` - `v0.0.1+1`
- `ensemble_bluetooth` - `v0.0.1+1`

---

#### `ensemble` - `v1.2.35-beta.1`

- **FIX**(execute_action): update payload key from 'action' to 'body' in ExecuteActionAction class. ([7e1b8466](https://github.com/ensembleUI/ensemble/commit/7e1b846611b4da27f21fa3474d8a6de05b40b768))
- **FIX**(page_model): add 'Actions' to the list of available types in PageModel. ([6dc07f06](https://github.com/ensembleUI/ensemble/commit/6dc07f06e447c5cdbf49be6f29a54e74fa6987e5))
- **FEAT**(actions): introduce reusable action execution framework. ([482d7de9](https://github.com/ensembleUI/ensemble/commit/482d7de922433bb41a282cfdd018f13866fe511f))


## 2026-03-02

### Changes
Expand Down
2 changes: 1 addition & 1 deletion modules/adobe_analytics/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ dependencies:
ensemble:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/ensemble

flutter_aepcore: ^5.0.0
Expand Down
2 changes: 1 addition & 1 deletion modules/auth/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ dependencies:
ensemble:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/ensemble

ensemble_ts_interpreter: ^1.0.7
Expand Down
2 changes: 1 addition & 1 deletion modules/bracket/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ dependencies:
ensemble:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/ensemble

dev_dependencies:
Expand Down
4 changes: 2 additions & 2 deletions modules/camera/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ dependencies:
ensemble:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/ensemble
ensemble_ts_interpreter: ^1.0.7

# QR Code scanner module (for backward compatibility re-export)
ensemble_qr_scanner:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/qr_scanner

collection: ^1.17.1
Expand Down
2 changes: 1 addition & 1 deletion modules/chat/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ dependencies:
ensemble:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/ensemble

ensemble_ts_interpreter: ^1.0.7
Expand Down
2 changes: 1 addition & 1 deletion modules/connect/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ dependencies:
ensemble:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/ensemble

plaid_flutter: ^3.1.2
Expand Down
2 changes: 1 addition & 1 deletion modules/contacts/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ dependencies:
ensemble:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/ensemble

flutter_contacts: ^1.1.7+1
Expand Down
2 changes: 1 addition & 1 deletion modules/deeplink/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ dependencies:
ensemble:
git:
url: https://github.com/EnsembleUI/ensemble.git
ref: ensemble-v1.2.38
ref: ensemble-v1.2.38-beta.2
path: modules/ensemble

flutter_branch_sdk: ^7.0.1
Expand Down
21 changes: 21 additions & 0 deletions modules/ensemble/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
## 1.2.38-beta.2

- Releasing new beta version 1.2.38.2

## 1.2.38-beta.1

- **FIX**(phone_contact): replace RuntimeError with debugPrint for missing contact photo. ([b36b399d](https://github.com/ensembleUI/ensemble/commit/b36b399d91fad26e46e14f0845c624a3f8b768c9))
- **FIX**(firestore_types): handle FirestoreTimestamp conversion in EnsembleFieldValue class. ([a4e8dba0](https://github.com/ensembleUI/ensemble/commit/a4e8dba0142250eee12b09fd012ae85e5ac18f2f))
- **FIX**(page_model): convert keys to strings in merged global actions. ([4dcb7e4a](https://github.com/ensembleUI/ensemble/commit/4dcb7e4a888a6259cb4f1a8daceb6338731ec6c8))
- **FEAT**(action): add ActionType.executeAction to ActionInvokable class. ([b5cc5a4a](https://github.com/ensembleUI/ensemble/commit/b5cc5a4af5ac95b0ed4971349f5cf5ab9a481672))
- **FEAT**(lottie): add custom Lottie decoder for .lottie file ext support. ([cc73e7cf](https://github.com/ensembleUI/ensemble/commit/cc73e7cf87475a7e538b0c88a099a90c5c63af21))
- **FEAT**(env): enhance environment variable loading and parsing. ([b7666ceb](https://github.com/ensembleUI/ensemble/commit/b7666ceb292427ad24445cc3080a68e9aca8c47a))
- **FEAT**(cdn_provider): add runtime translation refresh and testing capabilities. ([c9ba1fd2](https://github.com/ensembleUI/ensemble/commit/c9ba1fd23c34031c96e2248f1b05cf2ba2b4bc88))
- **FEAT**(secure_storage): enhance secure storage actions with optional encryption parameters. ([dee0bb57](https://github.com/ensembleUI/ensemble/commit/dee0bb571152e95b4cdc658924b2399c6b4f58b4))

## 1.2.38

- **FEAT**(env): enhance environment variable loading and parsing. ([b7666ceb](https://github.com/ensembleUI/ensemble/commit/b7666ceb292427ad24445cc3080a68e9aca8c47a))
Expand All @@ -22,6 +37,12 @@
- **FIX**(page_model): add 'Actions' to the list of available types in PageModel. ([6dc07f06](https://github.com/ensembleUI/ensemble/commit/6dc07f06e447c5cdbf49be6f29a54e74fa6987e5))
- **FEAT**(actions): introduce reusable action execution framework. ([482d7de9](https://github.com/ensembleUI/ensemble/commit/482d7de922433bb41a282cfdd018f13866fe511f))

## 1.2.35-beta.1

- **FIX**(execute_action): update payload key from 'action' to 'body' in ExecuteActionAction class. ([7e1b8466](https://github.com/ensembleUI/ensemble/commit/7e1b846611b4da27f21fa3474d8a6de05b40b768))
- **FIX**(page_model): add 'Actions' to the list of available types in PageModel. ([6dc07f06](https://github.com/ensembleUI/ensemble/commit/6dc07f06e447c5cdbf49be6f29a54e74fa6987e5))
- **FEAT**(actions): introduce reusable action execution framework. ([482d7de9](https://github.com/ensembleUI/ensemble/commit/482d7de922433bb41a282cfdd018f13866fe511f))

## 1.2.34

- **FEAT**(remote_config): add Firebase Remote Config integration. ([906f0133](https://github.com/ensembleUI/ensemble/commit/906f013322dcda45a1740db24b5e21f63ea372e5))
Expand Down
31 changes: 31 additions & 0 deletions modules/ensemble/lib/ensemble_app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import 'package:ensemble/framework/event/change_locale_events.dart';
import 'package:ensemble/framework/storage_manager.dart';
import 'package:ensemble/framework/theme/theme_loader.dart';
import 'package:ensemble/framework/theme_manager.dart';
import 'package:ensemble/framework/tv/tv_focus_provider.dart';
import 'package:ensemble/framework/widget/error_screen.dart';
import 'package:ensemble/framework/widget/screen.dart';
import 'package:ensemble/ios_deep_link_manager.dart';
Expand Down Expand Up @@ -108,6 +109,7 @@ class EnsembleApp extends StatefulWidget {
this.onAppLoad,
this.forcedLocale,
this.child,
this.tvFocusProvider,
GlobalKey<NavigatorState>? navigatorKey,
ScrollController? screenScroller,
}) {
Expand Down Expand Up @@ -139,6 +141,12 @@ class EnsembleApp extends StatefulWidget {
/// use this if you want the App to start out with this local
final Locale? forcedLocale;

/// Optional TV focus provider from host app.
/// When provided, Ensemble widgets will use the host app's focus system
/// instead of Ensemble's built-in TVFocusWidget. This enables seamless
/// D-pad navigation between host app and Ensemble content.
final TVFocusProvider? tvFocusProvider;

@override
State<StatefulWidget> createState() => EnsembleAppState();
}
Expand Down Expand Up @@ -421,6 +429,19 @@ class EnsembleAppState extends State<EnsembleApp> with WidgetsBindingObserver {
EnsembleThemeManager().currentTheme()?.appThemeData == null) {
//backward compatibility in case apps are using the old style of App level theming that is at the root level
theme = config.getAppTheme();

// Preserve tvFocusTheme from EnsembleThemeManager if available
// This ensures TV focus styling works even with legacy themes
final currentThemeData = EnsembleThemeManager().currentTheme()?.appThemeData;
final tvFocusTheme = currentThemeData?.extension<EnsembleThemeExtension>()?.tvFocusTheme;
if (tvFocusTheme != null) {
final existingExtension = theme.extension<EnsembleThemeExtension>();
if (existingExtension != null) {
theme = theme.copyWith(
extensions: [existingExtension.copyWith(tvFocusTheme: tvFocusTheme)],
);
}
}
} else {
theme = EnsembleThemeManager().currentTheme()!.appThemeData;
}
Expand Down Expand Up @@ -472,6 +493,16 @@ class EnsembleAppState extends State<EnsembleApp> with WidgetsBindingObserver {
// child: app,
// );
// }

// Wrap with TV focus provider if provided by host app
// This enables host app's focus system to manage Ensemble widgets
if (widget.tvFocusProvider != null) {
app = TVFocusProviderScope(
provider: widget.tvFocusProvider!,
child: app,
);
}

return app;
}

Expand Down
Loading
Loading