mirror of
https://github.com/hanskokx/arcane_framework.git
synced 2026-05-14 02:19:08 +02:00
d4b6c5467d
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
11 KiB
11 KiB
2.0.0-dev
Arcane
- [FIX] The
Arcaneclass is nowabstract
ArcaneEnvironment
- [CHANGE] The dependency on
flutter_blochas been removed. - [CHANGE] The feature has been completely rewritten as an inherited widget, rather than using a
Cubit. - [NEW] The
ArcaneEnvironmentwidget now includes themaybeOf(context)andof(context)service locators. - [NEW] An
ArcaneEnvironmentProviderwidget has been added. This is used byArcaneAppbut can also be used independently when not using theArcaneAppwidget. - [NEW] The
ArcaneEnvironment
ArcaneServiceProvider
- [BREAKING]
ArcaneServiceProvider.of(context)now returns a nullable instance, rather than throwing an exception.
Authentication Service (ArcaneAuth)
- [FIX] Switching between
Environment.normalandEnvironment.debugnow correctly notifies subscribers - [BREAKING] Switching between environments now remembers the previous authentication status (e.g., switching to debug mode and then back to normal mode will now remember whether you were authenticated or unauthenticated in normal mode when you switched to debug mode.)
Feature Flags Service (ArcaneFeatureFlags)
- [NEW] A
resetmethod has been added, which will remove all enabled features and de-initialize the service.
Logging Service (ArcaneLogger)
- [NEW] A
logStreamhas been added. This will stream all log messages that are sent toArcaneLogger. These messages are not processed by any registeredLoggingInterface. - [BREAKING] Invoking the
logmethod no longer throws an exception ifArcaneLoggerhas not been initialized. Log messages will always be sent to thelogStreamand will only be sent to the registeredLoggingInterfaces if theinitmethod has ben invoked. - [FIX] Automatic file and line number detection has been improved, both in terms of performance and in reliability.
- [NEW] In addition to the existing
registerInterfacesmethod, a newregisterInterfacemethod has been added. - [NEW] The following methods have been added:
unregisterInterface,unregisterInterfaces, andunregisterAllInterfaces. - [NEW] Added a
resetmethod that clears all registered interfaces, clears all persistent metadata, and de-initializesArcaneLogger
Theme (ArcaneTheme)
- [NEW] Added the
ArcaneThemeinherited widget - [NEW] Added
themeModeextension toBuildContextto get the currentThemeMode(e.g., light/dark) - [BREAKING] Completely rewrote
ArcaneReactiveTheme - [NEW] Added the
ArcaneThemeSwitcherwidget.
ArcaneReactiveTheme
- [NEW] The
isFollowingSystemThemegetter has been added. - [NEW] The
themeModeChangesgetter will stream events when theThemeModechanges (e.g., light/dark) - [NEW] The
themeDataChangesgetter will stream events when the currentThemeDatachanges - [NEW] The
systemThemeModegetter will return the OS-level brightness (e.g., light/dark) - [BREAKING] The
currentModegetter was renamed tocurrentThemeMode - [NEW] The
currentThemegetter was added to retrieve the currentThemeData. - [BREAKING] The
systemThemegetter was replaced by thesystemThemeModegetter - [NEW] A
currentModeOf(context)getter was added. Using this value will trigger a rebuild when the mode changes. - [CHANGE] The
switchThememethod now (optionally) takes in aThemeModeparameter. If it is omitted, the new mode will be automatically determined. - [FIX] The
followSystemThememethod will now correctly trigger widget rebuilds under the correct circumstances. - [FIX] Invoking the
setDarkThemeandsetLightThememethods will trigger widget rebuilds under the correct circumstances.
ArcaneThemeSwitcher
- [NEW] This new widget will, when added to the widget tree, trigger rebuilds when the theme mode or theme style is updated via
ArcaneTheme/ArcaneReactiveTheme. - [NEW] This widget has been added to
ArcaneApp.
Testing
- [NEW] Tests have been written for much of the framework.
Example
- [FIX] The example has been completely reworked. It now includes examples of all features that Arcane has to offer
1.2.5
- Improved automatic metadata detection in
ArcaneLogger
1.2.4
- Update package dependencies
1.2.3
- Added
ValueNotifiers to both theArcaneAuthenticationServiceandArcaneFeatureFlags. This enables the possibility of listening for changes to either service.
Example
// Listen to changes in the authentication status
Arcane.auth.isSignedIn.addListener(() {
if (Arcane.auth.isSignedIn.value) {
Arcane.log("User is signed in");
} else {
Arcane.log("User is signed out");
}
});
// Listen to changes in the enabled/disabled features
Arcane.features.notifier.addListener(() {
Arcane.log("Enabled features have been updated: ${Arcane.features.notifier.value}");
});
1.2.2
- Lowered minimum required collection dependency version to prevent forcing users into the latest Flutter release
1.2.1
- Lowered minimum required SDK version to prevent forcing users into the latest Flutter release
1.2.0
- Removed flutter_secure_storage dependency as it was unused
Breaking Changes
The following methods have been moved outside of the ArcaneAuthInterface base class:
- resendVerificationCode
- register
- confirmSignup
- resetPassword
These methods have been moved to mixin classes. To continue using them, please update your ArcaneAuthInterface implementations.
- To use
resendVerificationCode,registerandconfirmSignup, use the newArcaneAuthAccountRegistrationmixin. - To use
resetPassword, use the newArcaneAuthPasswordManagementmixin.
Migration
In order to migrate your existing interfaces, update them from:
class MyAuthInterface implements ArcaneAuthInterface {}
to:
class MyAuthInterface
with ArcaneAuthAccountRegistration, ArcaneAuthPasswordManagement
implements ArcaneAuthInterface {}
If the methods that these mixins provide are not being used, the mixins can safely be omitted. If only one of these mixins is required, the other can be safely omitted.
This change should result in fewer lines of code for interface implementations that do not require these additional features.
1.1.7
- Fixed an issue with the
ArcaneAuthenticationServicewhere an exception would be thrown when attempting to access an authentication token while noArcaneAuthInterfacewas registered.
1.1.6
- Updated logging feature to indicate the feature which was enabled or disabled within the log message, instead of only in the metadata.
1.1.5
- Update package dependencies. No code changes.
1.1.4
- Update package dependencies. No code changes.
1.1.3
- Arcane Auth no longer throws exceptions when log out fails, instead returning
a
Result<void, String>. This behavior matches the login method.
1.1.2
- Removed Flutter exception handling from
ArcaneLoggingService, as this functionality should be defined by a users' interface.
Migration
Add the following to your ArcaneLoggingInterface's init method to replicate
the previous behavior:
// Handles unhandled Flutter errors by logging them.
FlutterError.onError = (errorDetails) {
Arcane.log(
errorDetails.exceptionAsString(),
level: Level.error,
module: errorDetails.library,
stackTrace: errorDetails.stack,
);
};
// Handles unhandled platform-specific errors by logging them.
PlatformDispatcher.instance.onError = (error, stack) {
Arcane.log(
"$error",
level: Level.error,
stackTrace: stack,
);
return false;
};
1.1.1+2
- Updated example in README
1.1.1+1
- Updated example in README
1.1.1
- [BREAKING] Updated ArcaneAuthInterface to make the
resendVerificationCode,confirmSignup, andresetPasswordmethods more versatile
Migration:
| Class | Migration path |
|---|---|
| ArcaneAuthInterface | resendVerificationCode(String email) -> resendVerificationCode<T>({T? input}) |
| ArcaneAuthInterface | confirmSignup({String email, String password}) -> confirmSignup({String? email, String? password}) |
| ArcaneAuthInterface | resetPassword({String email, String? newPassword, String? code}) -> resetPassword({String? email, String? newPassword, String? code}) |
1.1.0
- [BREAKING] Updated the authentication service and interface to be more versatile
Migration:
| Class | Migration path |
|---|---|
| ArcaneAuthInterface | loginWtihEmailAndPassword({String email, String password}) -> login<T>({T? input}) |
| ArcaneAuthInterface | signup({String email, String password}) -> register<T>({T? input}) |
1.0.8
- Added the
extraparameter to theArcane.logshortcut method
1.0.7
- Added the
extraparameter to theLoggingInterface
1.0.6+1
- Migrated linting rules to new arcane_analysis package.
1.0.6
- Removed get_it as a dependency
1.0.5+2
- Updated README and example project documentation
1.0.5+1
- Marked the
loginWithEmailAndPasswordmethod inArcaneAuthenticationServiceas deprecated and updated example project
1.0.5
- Added the ability to use a generic type for the login method in ArcaneAuthenticationService
- Added the ability to reset the ArcaneAuthenticationService, which will unregister the current interface and clear the authentication state
- Removed unused testing tooling (e.g.,
@visibleForTesting) from the codebase- Migration guide: Remove usages of
setMockedin your tests
- Migration guide: Remove usages of
1.0.4
- Resolved an issue with authentication using the ArcaneAuthenticationService when logging in with an email and password
1.0.3+1
- Added example project
1.0.3
- Added the ability to switch back to the normal environment from the debug environment in ArcaneEnvironment
- (breaking) Made the optional
onLoggedOutcallback a Future instead of a void function in ArcaneAuthenticationService - Added additional error handling to the login method in ArcaneAuthenticationService
- Added support for following the system's theme in ArcaneTheme
- Removed the BuildContext parameter from the
switchThememethod in ArcaneTheme
1.0.2
- Migrated ArcaneAuthenticationService's isSignedIn to a ValueListenable
1.0.1+1
- Removed ID and secure storage services to improve platform compatibility
1.0.0
- Initial release