January 15, 2024
- Updated onGenerateRoute() & onRoutes() in app_statex.dart
- Added the getter, routesGenerated, in app_statex.dart
- displayErrorWidget() & onUnknownRoute() in error_handler.dart
- Updated translations directory
January 10, 2024
- DevToolsSettings.column() in Example app
January 08, 2024
- Moved class app_drawer to its own Dart file In app_statex.dart:
- new getter, NavigatorState? get navigatorState
- Route? onGenerateRoute(RouteSettings settings)
- Route? onUnknownRoute(RouteSettings settings) New 'in-line' functions allowing the dynamic use of development tools:
- super.inDebugPaintSizeEnabled,
- super.inDebugPaintBaselinesEnabled,
- super.inDebugPaintPointersEnabled,
- super.inDebugPaintLayerBordersEnabled,
- super.inDebugRepaintRainbowEnabled,
- super.inDebugRepaintTextRainbowEnabled,
- super.inDebugPrintRebuildDirtyWidgets,
- super.inDebugOnRebuildDirtyWidget,
- super.inDebugPrintBuildScope,
- super.inDebugPrintScheduleBuildForStacks,
- super.inDebugPrintGlobalKeyedWidgetLifecycle,
- super.inDebugProfileBuildsEnabled,
- super.inDebugProfileBuildsEnabledUserWidgets,
- super.inDebugEnhanceBuildTimelineArguments,
- super.inDebugHighlightDeprecatedWidgets,
- More tests for mixin RouteNavigatorMethodsMixin
- Introduced typedef ReturnRouteFunctionType
- mixin DebugPaintPrintProfileOptionsMixin supplies development tools. For example: debug.debugPaintSizeEnabled = debugPaintSizeEnabled ?? onDebugPaintSizeEnabled() ?? false;
- app_drawer.dart contains the class, AppDrawer
- Further changes to tests in test_navigator_mixin.dart
January 04, 2025
- extension ColorExts on Color to overcome Flutter 3.27 conversion issue
- Addressed Dart Analysis issues: e.g. /// Missing documentation for public members
January 04, 2025
- Flexible() introduced in radiobutton_widget.dart
January 03, 2025
- Avoid, Unable to load asset: "assets/images/meow.gif", during testing App.inFlutterTest ? null : const SplashScreen();
December 30, 2024
- Correctly cast the Fluttery Framework version of StateX; not state_extended version. getter appState gets Fluttery version; getter rootState gets state_extended version. StateX get state in app_statex_controller.dart StateX? get firstState, StateX? get lastState in app_statex_controller.dart StateX? stateOf() in app_statex_controller.dart stateOf() in app_statex_controller.dart
- Corrected changeApp() in example_controller.dart
December 29, 2024
- Recognize only 'Testing Errors' in app_statex.dart details.exception is TestFailure || details.exception is Error
- Tests for RouteNavigatorMethodsMixin in app_navigation.dart
- app_navigation.dart renamed app_navigator_mixin.dart
- Add a Navigation listener with addNavigationListener() in app_statex.dart
December 27, 2024
- Corrected image_api.dart in example app
- Acknowledge any Testng errors in app_statex.dart
- More testing with test_navigation.dart
December 25, 2024
- class StateX has AppStateX? get rootState => super.rootState as AppStateX; StateXController? get controller { final con = super.controller; return con as StateXController;
- class AppStateXController has AppStateX? get rootState => super.rootState as AppStateX;
- class StateXController has AppStateX? get rootState => super.rootState as AppStateX;
- AppObject, AppStateX, and StateX uses Mixin in app_navigation.dart
- Introduce testing of app_navigation.dart with navigating_screens.dart
- Future testFiles(WidgetTester tester) async {
December 16, 2024
- App.inFlutterTest
- Tests are updated
December 14, 2024
- Introduce Splash screen to example app
- deferFirstFrame() in initState() in app_statefulwidget.dart
- Add mixins: class AppErrorHandler with HandleError, StateXonErrorMixin {
- Update the function, runApp(), with optional error handling void runApp(m.Widget app, {FlutterExceptionHandler? onError, bool? runZoneGuard}) {
December 11, 2024
- Introduced parameter, themeAnimationStyle,for class MaterialApp
- @protected @factory v.AppStateX createAppState();
December 11, 2024
- BUGFIX Moved Sizer() from app_statex.dart to app_statefulwidget.dart
- app.dart renamed app_object.dart
- app_state.dart renamed app_statex.dart
- app.dart renamed app_statex_controller.dart
- Deprecated AppState() and AppController() class are deprecated.
- class AppState renamed class AppStateX
- class AppController renamed AppStateXController
- sizer: ^3.0.0
- Removed unnecessary_library_name in radiobutton_widget.dart
December 04, 2024
- Optional type argument, T, was not specified. .pushNamed(routeName, arguments: arguments); .restorablePushNamed(routeName, arguments: arguments);
October 14, 2024
- AppState class now has the notifyClientsInBuild parameter. Defaults to true. This then notifies any dependencies when calling for a rebuild
- The runInitAsync() function in every StateX object now allows their initAsync() functions to be conditionally called with every rebuild.
- Translations for 'Material Ver.'
- Updated the README.md
- Updated device_info_plus 10.1.2 to 11.0.0
October 07, 2024
- Correct onInitAsync() in app_state.dart and default to returning true
October 06, 2024
- BUGFIX Removed 'default' Error Handler mistakenly left in Production.
- BUGFIX Removed 'default' Error Widget Builder mistakenly left in Production.
- A default Error Screen, defaultErrorWidgetBuilder, available during development
- Getters, errorHandler, oldOnError and oldBuilder, offered now in error_handler.dart
- Null error correction in example app
October 01, 2024
- getDeviceInfo() not called during testing
- onErrorHandler() and inErrorHandler() are called in turn in app_state.dart
- if (inFlutterTest) { for initInternal() in app.dart
September 29, 2024
- handler.reset() in app_statefulwidget.dart
- Testing the test files
September 26, 2024
- Restore Error handler with deactivate() in error_handler.dart
- throw Exception('Error in builder!'); in testing
- onCatchAsyncError() wrapped in try..catch in app_state.dart
- inCatchAsyncError() wrapped in try..catch
- Integration Tests Only
- Builder Error Test Only
- Async Error Test
September 20, 2024
- Screen Width and Height without BuildContext
- bool get appInApp in app_state.dart
- Print() changed to debugPrint()
- Rewrite of radiobutton_widget.dart
September 12, 2024
- Removed reactive code: view/rx_core/
- Test class AppMenu
- if (!App.inFlutterTest) in test_app.dart
- Uncomment include: package:flutter_lints/flutter.yaml
- Addressed 'Dangling library doc comment'
- Addressed Dart Analyst
- export 'model/files.dart' if (dart.library.html) in model.dart export 'model/installfile.dart' if (dart.library.html)
- Tighten dependencies: dart pub upgrade --tighten
- import '/view.dart' show in error_handler.dart
September 09, 2024
- app.dart
- app_appstate.dart
- app_navigation.dart
- app_state.dart
- app_statefulwidget.dart
- rx_impl.dart
- Corrected Dart Analysis warnings
- Include more unit tests
August 07, 2024
- textButtonOption() in dialog_box.dart
- 'Recreated' example app
- super(useInherited: useInherited ?? true) {
August 06, 2024
- state_extended.dart change, void didUpdateWidget(covariant T oldWidget) { requires correction in example app: void didUpdateWidget(RandomDog oldWidget) { void didUpdateWidget(CounterPage oldWidget) { void didUpdateWidget(WordPairs oldWidget) {
July 26, 2024
- Deprecate more public getter properties for further security and cohesion scaffoldMessengerKey locale supportedLocales
- inErrorHandler parameter and onErrorHandler() function in example app
- Deprecated App.errorHandler
- class AppErrorHandler new parameters: bool? presentError, ParagraphStyle? paragraphStyle, TextStyle? textStyle, EdgeInsets? padding, double? minimumWidth, Color? backgroundColor,
- static Future delete(String fileName, {bool? recursive}) async {
- void go(String location, {Object? extra}) {
- test_app.dart removed deprecated getters
June 28, 2024
- Fluttery becoming more popular in more enterprise-wide projects, tighter cohesion is necessary for more effective functionality and for more security: Therefore some 40 properties once readily accessible now have their getters deprecated: home routeInformationProvider routeInformationParser routerDelegate backButtonDispatcher routerConfig routes initialRoute onGenerateRoute onUnknownRoute navigatorObservers builder/transitBuilder onGenerateTitle onNavigationNotification darkTheme highContrastTheme highContrastDarkTheme themeMode themeAnimationDuration themeAnimationCurve color localeListResolutionCallback localizationsDelegates localeResolutionCallback debugShowMaterialGrid showPerformanceOverlay checkerboardRasterCacheImages checkerboardOffscreenLayers showSemanticsDebugger debugShowWidgetInspector debugShowCheckedModeBanner debugPaintSizeEnabled debugPaintBaselinesEnabled debugPaintPointersEnabled debugPaintLayerBordersEnabled debugRepaintRainbowEnabled shortcuts actions restorationScopeId scrollBehavior
June 22, 2024
- inError parameter deprecated use inErrorHandler instead Both onErrorHandler and inErrorHandler can be implemented
- class, MsgBox, in dialog_box.dart includes parameters from showDialog and AlertDialog
- Function, radioButtonsBuilder, in radiobutton_widget.dart includes parameters from Radio, Text, Flexible and Flex
June 11, 2024
- AppState's setiOSThemeData() function made public and now called app_statefulwidget.dart's initAsync() function: _appState?.setiOSThemeData(context);
June 11, 2024
- AppState's setThemeData() function made public and now called app_statefulwidget.dart's initAsync() function: _appState?.setThemeData(context);
June 11, 2024
- connectivity_plus: ^5.0.0 to ^6.0.0 StreamSubscription? _connectivitySubscription to StreamSubscription<List>? _connectivitySubscriptionList
- device_info_plus: ^9.0.0 to ^10.0.0
- go_router: ^13.0.0 to ^14.0.0
- package_info_plus: ^5.0.0 to ^8.0.0
- flutter_lints: ^3.0.0 to ^4.0.0
June 05, 2024
- Use buildIn() to work with the built-in InheritedWidget like 'useInherited: true'
- getter builder renamed transitBuilder
May 27, 2024
- Updated sdk: '>=3.0.0 <4.0.0'
- Deprecated StateIn() and StateF() class are deprecated. Use the StateX parameters, runAsync and useInherited, instead.
- class StatesRouteObserver extends RouteObserver<Route>
- import 'package:flutter/widgets.dart' for the following debug tools: debugPrintRebuildDirtyWidgets debugOnRebuildDirtyWidget debugPrintBuildScope debugPrintScheduleBuildForStacks debugPrintGlobalKeyedWidgetLifecycle debugProfileBuildsEnabled debugProfileBuildsEnabledUserWidgets debugEnhanceBuildTimelineArguments debugHighlightDeprecatedWidgets
- Removed the parameters, inOnGenerateRoute and inOnUnknownRoute, in app_state.dart Use parameter onGenerateRoute or method onOnGenerateRoute() equivalent instead.
- class StateX():super(useInherited: useInherited ?? false); Use of Built-in InheritedWidget defaults to false
- new getter, builderOverridden, in StateX class.
- Tests StateX class if uses the buildIn() function but its 'useInherited' parameter is not true.
- Cat and Bird images now come from https:\api.sefinek.net
April 23, 2024
- showDialogBox() in dialog_box.dart
- Replace endState with lastState
- Removed from testing: App.buildInherited(); context.textScaleFactor;
- Update analysis_options.yaml
April 18, 2024
- _isAppInApp() in app_statefulwidget.dart
- _errorHandler?.dispose() in app.dart
April 17, 2024
- catchError() in app_appstate.dart takes in FlutterErrorDetails parameters
- Additional dialog window, Future<T?> showDialogBox()
April 15, 2024
- Since Flutter 3.10, runApp() must now run in the 'root' zone Removed runZonedGuarded() from run_webapp.dart
April 15, 2024
- Since Flutter 3.10, runApp() must now run in the 'root' zone Removed runZonedGuarded() from run_app.dart
- Call WidgetsFlutterBinding.ensureInitialized() right away in AppStatefulWidget
April 01, 2024
- New getters for App object: allowChangeTheme, allowChangeLocale, allowChangeUI, switchUI
- if (widget.loadingScreen != null) { in app_statefulwidget.dart
- Allows you to set an error handler more than once.
- Removed deprecated errorHandler from runApp()
- Commented out _materialColor() in app.dart
- Updated show clause in run_app.dart
- Removed dangling library doc comment: /// to //
February 09, 2023
- App.baseTheme = Theme.of(context); // Retain the original theme
- MainAxisAlignment? actionsAlignment in dialog_box.dart // Left-handed IU
February 06, 2023
- allowChangeTheme: true, // Explicitly allow the App's theme to change
- In setThemeData(), adjusted how and app's general Theme is acquired
- content = content ?? Text(text ?? ' '); in dialog_box.dart
- Example app: All import statements made more effective New menu option: Material Design version 2 and 3
February 05, 2023
- Adjusted how the app sets its theme: _setThemeData(context)
- Corrected showCupertinoDialog() to take in the 'content' widget
February 03, 2023
- App.allowChangeTheme, App.allowChangeLocale, App.allowChangeUI
- showBox(useRootNavigator: false
- Custom widget, SpinnerCupertino
January 25, 2023
- abstract class RadioButtons extends StatefulWidget {
- Removed package name from import statements: import 'package:fluttery_framework/...'
January 13, 2023
- Reorganised example app
- Supplied hash code capability in hash.dart
December 19, 2023
- Supply Reactive capabilities: mixin RxStates on State and type Rx
- Adjusted code testing
December 11, 2023
- 'textScaleFactorOf' is deprecated
December 02, 2023
- AppErrorHandler.allowNewErrorHandlers once set false new handlers are not allowed
- AppState.useRouterConfig set true if home == null
- Updated example app
December 01, 2023
- Continue to insert relative paths in the example app
November 30, 2023
- Updated example app
- localPath is current working directory depending on platform
- Additional directory changes to example app
November 23, 2023
- app_state.dart build() function incorrectly wrapped in Builder()
- Removed unused classes FieldWidgets InheritedStates and ScheduleNotifications
- Corrected Testing of a 'Close' button with if (button.evaluate().isEmpty) {
November 21, 2023
- Upgraded to go_router
12.0.0
and package_info_plus5.0.0
- Removed deprecated Text widget field, textScaleFactorOf, from use.
- Changed class, PopupMenuController, to a mixin, PopupMenuFunctionsMixin
- Corrected pubspec.yaml to state_extended ^4.0.0
October 15, 2023
- con.onItems() in app_menu.dart
October 15, 2023
- AppPopupMenu not displayed if no menu items
October 13, 2023
- AppMenu renamed to AppPopupMenu Removed popupbutton property
- package_info_plus: ^5.0.0 was removed?? Back to ^4.0.0
- device_info_plus: ^10.0.0 was removed?? Back to ^9.0.0
October 10, 2023
- Rewrote App's menu: AppPopupMenu, PopupMenuWidget, AppPopupMenuController, PopupMenuController
- AppState setter locale includes _supportedLocales
- Introduced builder() as the default 'build' function
- buildiOS() defaults to buildAndroid() if not implemented
- Continue updating documentation
- Updated dependencies: connectivity_plus, device_info_plus, package_info_plus
- find.byType(Scrollable) and find.widgetWithText(SimpleDialogOption, 'OK') in locale_menu.dart
September 24, 2023
- Corrected get localizationsDelegates in _AppState
September 18, 2023
- AppState parameters have corresponding getters
- AppState.buildApp();
- Removed parameter inAppBuilder in AppState
- Included App.standAloneApp
- enhanced getter iOSThemeData
- bool? onDebugShowWidgetInspector()
- Included Widget builder(BuildContext context) in StateX
- Entered more translations
- Updated to state_extended: ^4.6.0
July 28, 2023
- Supply a third alternative to the MaterialApp or CupertinoApp in the class, AppState inAppBuilder and onAppBuilder
- Continue updating documentation
July 24, 2023
- Introduced allowChangeTheme, allowChangeLocale and allowChangeUI for AppState
- Added getter preferredLocale and saveLocale() save and retrieve a preferred Locale for AppState
- Majority of AppState parameters now immutable to retain scope
- Removed some 11 AppState setters to again tightening the code's scope
- Continue updating documentation
July 20, 2023
- Implemented onInitAsync() in app_state.dart
- Adjusted onError() in app_state.dart to call State object's onError()
- Introduced FlutterError.presentError(details); in App.onError()
- All the 'error' parameters are deprecated.
- Continue updating documentation
July 03, 2023
- /// Retrieve and cast as this Framework's own particular 'controller' type. StateXController? controllerById(String? id) StateXController? get rootCon { AppState? get rootState { StateXController? get controller {
- Extend the Counter example app
- dartdoc category: App object & Device info.
- Continue updating documentation
June 15, 2023
- BREAKING CHANGE Removed GetX to instead use go_router
- Static reference to GoRouter object: App.goRouter
- Updated to include new MaterialApp properties: highContrastTheme, highContrastDarkTheme, themeAnimationDuration, themeAnimationCurve,
- extension GoRouterExtension on BuildContext to utilize App.goRouter
- Providing extensive documentation with the README.md
June 03, 2023 // Locale must explicitly be assigned to Get.locale as well.
- Get.locale = _locale;
May 23, 2023
- StateX class with a built-in InheritedWidget
- dependOnInheritedWidget() in StateXController
- Corrected example app, controller: TemplateController()
- Removed abstract class View
- Update Counter Example app and Grid example app
- semanticsDismissible ?? true for latest Flutter version
- IMPORTANT dispose() runs late and cancels the new timer deactivate() is more reliable.
April 13, 2023
- BREAKING CHANGE Upgrade to Flutter v.3.0
- Incorporate GetX v.4 into this framework
- Upgrade to state_extended v.3
- Introduce class StateIn and class StateX
- Update example app
April 01, 2023
- NavigatorStateMethodsMixin supplies a Global Navigator without context
March 30, 2023
- Commented out class NavBottomBar in nav_bottom_bar.dart
- Added dependency device_info_plus_web
- then removed dependency device_info_plus_web finding it insufficient.
March 29, 2023
- Updated parameters in class AppDrawer
- Included class AppDrawer in testing
- Included class SimpleBottomAppBar in testing
- Included dialog windows from dialog_box.dart in testing
March 26, 2023
- T get widget => (parentState?.widget ?? super.widget) as T;
- if (_routerDelegate == null && _routerConfig == null)
- RouteObserver class for RouteAware objects
March 21, 2023
- Assets class with a factory constructor
- More extensive tests introduced
- super.key in constructors
March 17, 2023
- App.inWidgetsFlutterBinding // Indicating Flutter framework binding with WidgetsFlutterBinding
- App.inFlutterTest // Indicating if running under a 'Flutter Test' environment
- if (!v.App.inFlutterTest) { // Prevents MethodChannel() calls in a test environment.
March 16, 2023
- All source code is now under 2-clause BSD License.
- Conditional imports to make this Web compatible using fake_classes_for_web.dart
- Removed timezone.dart to make this Windows compatible.
- SharedPreferences.setMockInitialValues({}); in test directory to ready plugin.
March 15, 2023
- Widget buildChild(BuildContext context) { renamed Widget buildIn(BuildContext context) {
- field_widgets.dart updated to some 40+ more fields in Flutter
- // The 'error' parameters are deprecated. runApp(errorHandler: , errorScreen: , errorReport: ,) changed to runApp(newErrorHandlers: ) AppStatefulWidget(errorHandler: , errorScreen: , errorReport: ,) unused constructor parameters App(errorHandler: , errorScreen: , errorReport: ,) unused constructor parameters
- AppErrorHandler.allowNewHandlers renamed AppErrorHandler.newErrorHandlers
- Errors in App's FutureBuilder are not handled; merely reported
- class AppWidgetErrorDisplayed { // A simple 'Widget Error' Screen if widget fails to display
- class AppState now has 'inline' error functions
- If a widget fails to display, call the latest SateX object's error routine
- rebuildLastState(); and refreshLastState() are deprecated
- Removed the incompatible package: unique_identifier: ^0.3.0
February 04, 2023
- // Refresh the 'current/latest' State object and 'root/first' State object.
- static refresh() in class App
January 30, 2023 With Flutter 3.7.0 release:
- class CupertinoListTile finally replaces my own version
- TextStyle, headline4, is deprecated
- Lint rule, invariant_booleans, is deprecated New Lint rules:
- use_build_context_synchronously
- library_private_types_in_public_api
- A value for optional parameter isn't ever given
- // ignore_for_file: unused_element
January 21, 2023
- Removed 'final' from Appstate property: theme
- Introduced debugRepaintTextRainbowEnabled
- Moved debug.debugPaintSizeEnabled to buildChild()
- Upgrade unique_identifier: ^0.3.0
January 19, 2023
- BUG FIX Removed: routes ??= const <String, WidgetBuilder>{};
- Upgrade to state_extended: ^2.0.0
December 30, 2022
- Return boolean init from appState initAsync()
- value is! Color in getter iOSTheme
- Default iOSTheme to CupertinoThemeData(brightness: Brightness.light);
- getter isOnline is corrected
- class App with ConnectivityListener
- getters turnedOnInternet and turnedOffInternet
November 25, 2022
- get INSTANCE
- Corrected setNewRoutePath()
- hyperlink.dart & webpage_wrapper.dart
November 19, 2022
- theme: themeData(),
- _routerConfig = routerConfig ?? onRouterConfig();
- DeviceInfoPlugin().deviceInfo;
- if (_routerDelegate == null)
November 11, 2022
- theme: v.App.themeData = theme ?? onTheme(),
- Introduces https://pub.dev/packages/sizer
- _AppState.con property was removed (StateX.controller will do)
- New class, AppMenu
- class PopupMenu extends StatelessWidget {
- static v.AppMenu get menu => /// A mutable menu
- showBox() function improved.
- sdk: '>=2.18.1 <3.0.0'
- locale: locale ?? onLocale(), to locale: onLocale() ?? locale,
- localeListResolutionCallback ?? onLocaleListResolutionCallback,
- localeResolutionCallback ?? onLocaleResolutionCallback,
- Static Color? setThemeData({ColorSwatch<int?>? swatch, Color? color,}) { // Reset if there was a 'hot reload'.
- v.App.hotReload = false;
- unique_identifier: ^0.2.0
- AppErrorHandler({ ,ErrorWidgetBuilder? screen,
- Allow 'in' functions to return null e.g. ThemeData? Function()? inTheme
- conditional export corrected: dart.library.io) 'package:fluttery_framework
- Lengthened pubspec.yaml description field
- Removed StateX InheritedStateMixin reference from lib\view.dart
- Class ScheduleNotifications removed dropping dependency to flutter_local_notifications
- supportedLocales: v.App.supportedLocales = supportedLocales ?? onSupportedLocales()
- Updated widget_test.dart
- Removed deprecated refresh() and buildInherited().
- Introduced L10n.locale in example app.
- Introduced initAsync() and inInitState().
September 10, 2022
- Correct typo: extension ContextExtensionss
September 10, 2022
- AppState class now with controller, materialApp, and cupertinoApp parameter
- AppStatefulWidget class now with circularProgressIndicator parameter
- Updated README.MD
August 24, 2022
- Production release
August 21, 2022
- import '../example/test/widget_test.dart';
- Supply continuous integration testing
July 18, 2022
- Initial Development Release