xwidget 0.5.2
xwidget: ^0.5.2 copied to clipboard
A package for building dynamic UIs in Flutter using an expressive, XML based markup language.
0.5.2 #
- BREAKING: Changed
XWidget.navigateToFragment()to makeBuildContextoptional. Passcontext:as a named argument when you need to use a specific navigator; otherwise assignXWidget.navigatorKeyto your root app and let XWidget navigate without a context. - BREAKING: Replaced
Resources.instance.clearXmlCache()withResources.instance.clearFragmentCache().XWidget.clearXmlCache()remains as a deprecated compatibility wrapper. - Added
XRouterfor context-free navigation by route path or name. - Added route definitions through value resource files with a
<routes>root, standalone<route>entries, and grouped<routeGroup>entries. - Added route groups with callback navigation for
PageView,TabBarView,IndexedStack, and similar multi-view widgets. - Added route names, group-qualified names, group path aliases, default group routes, path parameters, query parameters, and per-route browser history control.
- Added web URL sync for callback route groups, including History API updates, browser back/forward handling, query-string preservation, and startup deep-link support after the first Flutter frame.
- Added
XWidget.navigatorKeyand exportedXRouterfrompackage:xwidget/xwidget.dart. - Added XML navigation helpers registered during
XWidget.initialize():routeTo(target, [action]),routePop(),routePopAll(), andnavigatorKey(). - Refactored resource handling into
FragmentResourceBundleandValueResourceBundle, moving fragment XML caching into the fragment bundle and value parsing into the value bundle. - Added route loading to value resources so
routes.xmlis loaded alongside other value resource files for local and cloud resources. - Deprecated
XWidget.registerControllerFactory<T>()in favor ofregisterControllerFactoryForName()becauseT.toString()is not stable under dart2js minification.
0.5.1 #
- Added guard system to
Controller—guard()runs beforeinit()to enforce preconditions like authentication and authorization. Whenguard()returnsfalse,init()is skipped andonGuardFailed()provides the rendered widget. guard()supports both synchronous (bool) and asynchronous (Future<bool>) return types viaFutureOr<bool>.- Added
onGuardFailed()toController— override to provide a widget or schedule side effects (e.g. navigation redirect) when the guard denies access. - Added
navigateToFragment()toXWidgetwith configurableNavigatorAction— supportspush,pushReplacement,pushAndRemoveAll, andpushAndRemoveUntil. - Deprecated
pushFragment()in favor ofnavigateToFragment().
0.5.0 #
- BREAKING: Resource configuration moved from
XWidget.initialize()intoLocalResourcesandCloudResources. Construct the appropriate instance and pass it to the newresourcesparameter. ThefragmentsPath,valuesPath,projectKey,storageKey,channel,version,downloadTimeout, andassetBundleparameters have been removed fromXWidget.initialize(). - Hot reload of fragments and values in debug builds.
LocalResourcesregisters VM service extensions that the XWidget IntelliJ plugin and VSCode extension invokes to apply edits without restarting. Resourcesis now an extensible abstract base class. Subclass it for custom loading strategies. The built-in subclasses areLocalResources(asset bundle, default) andCloudResources(XWidget Cloud content server).- Added
LocalResources.withAnalyticsfor local resource delivery with XWidget Cloud analytics. - Added
registerparameter toXWidget.initialize(). Pass the generatedregisterXWidgetComponentsfunction to populateXWidget.configand register inflaters, icons, and controllers. - Deprecated
XWidget.xmlCacheEnabledandXWidget.clearXmlCache(). Parsed XML caching is now managed byResources— useResources.instance.clearXmlCache(). - Upgraded
xwidget_eldependency to 0.5.0.
0.4.1 #
- Added EL resource accessor functions. The following functions are
now registered globally during
XWidget.initialize(), making value resources accessible directly in EL expressions:resBool(name)— returns a bool resourceresColor(name)— returns a Color resourceresColorString(name)— returns a color resource as a stringresDouble(name)— returns a double resourceresInt(name)— returns an int resourceresString(name)— returns a string resource
<Text data="${resString('app_title')}"/>
<Container color="${resColor('primary')}"/>
- Upgraded
xwidget_eldependency to 0.4.0.
0.4.0 #
- BREAKING: Removed
nullableattribute from<builder>tag. - BREAKING: Requires
xwidget_builder0.4.0. Regenerate inflaters after upgrading. - Simplified
<builder>tag by removing typed wrapper functions. Type adaptation is now handled by the generated inflater. - Added
verboseErrorsparameter toXWidget.initialize(). Defaults tofalse. - Added fragment name to
XWidget.dump()error diagnostic output. - Fixed
platformLogHandleron IO and web to includerecord.errorandrecord.stackTracein log output.
0.3.0 (Mar 31, 2026) #
- BREAKING:
Resources.instance.loadResources()has been replaced withXWidget.initialize(). - BREAKING: Replaced
package:logger/logger.dartdependency withpackage:logging/logging.dart. - BREAKING: Updated minimum Dart SDK to 3.8.
- Cloud resource loading — download fragment and value bundles from XWidget Cloud at runtime with ETag-based caching and offline fallback.
- Automatic analytics — fragment renders, bundle downloads, errors, and navigation transitions tracked with zero instrumentation.
AnalyticsNavigatorObserverauto-injected intoMaterialApp,CupertinoApp, andNavigatorwhen inflated from XML.- Session-based navigation tracking with configurable timeout.
XWidget.initialize()— unified initialization for resources, cloud configuration, and analytics.- Fragment and value resource folder resolution.
0.2.0 (Jan 22, 2026) #
BREAKING CHANGES: Please run dart run xwidget_builder:generate after upgrading.
- Support AssetManifest.bin with fallback to .json for older Flutter versions
- Increased Flutter version constraint from >=1.17.0 to >=3.10.0
- Increased Dart SDK constraint from >=2.19.6 to >=3.0.0
- Updated xwidget_el dependency from 0.2.0 to 0.2.2
- New documentation preview at docs.xwidget.dev
0.1.1 (Nov 20, 2025) #
- Minor documentation updates
0.1.0 (Nov 20, 2025) #
BREAKING CHANGES: After upgrading, please run the following commands:
$ flutter pub add dev:xwidget_builder
$ dart run xwidget_builder:generate
- Moved code generators and initializers to their own dev package. XWidget Builder
0.0.52 (Aug 23, 2025) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Fixed an issue with inflater generator where it was not generating deprecated, required constructor parameters.
- Upgraded
xwidget_eldependency to ^0.2.0 - Upgraded
analyzerdependency to ^7.7.1
0.0.51 (Feb 22, 2025) #
- Removed deprecated usages
- Fixed package dependencies
0.0.50 (Feb 22, 2025) #
- Removed deprecated usages
- Documentation updates
- Package updates
0.0.49 (Feb 9, 2025) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Moved EL functionality to it's own project. XWidget EL
- Improved documentation
0.0.48 (Oct 21, 2024) #
- Fixed a bug where duplicate inflater declarations would generate invalid code.
- Fixed a bug where duplicate icon declarations would generate duplicate code.
0.0.47 (Oct 8, 2024) #
- Fixed project initialization script bug.
- Created an Android Studio plugin for XWidget. Go to 'Settings' -> 'Plugins' -> 'Marketplace' and search for 'XWidget'. It's free, so check it out! Flutter XWidget plugin
0.0.46 (Sep 28, 2024) #
- Fixed
parseIntbug.
0.0.45 (Sep 28, 2024) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Added EL functions to references i.e.
${person.name.toUpperCase()}. - Added EL functions to parenthesis expressions i.e.
${('abc' + 'xyz').toUpperCase()}. - Minor performance improvements to EL parsing. Using a singleton instead of creating a new
parser for each
Dependenciesinstance. - Documentation
0.0.44 (Sep 21, 2024) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Added ability for models to transform data during import using
PropertyTransformerandPropertyTranslation. This lays the groundwork for auto generating models. Please see the Loading Data guide for more information. - Export math and misc functions.
- Allow EL
==expressions to compareenumtoString. - Fixed
<param>bug where null values were defaulted to an empty string (""). - Documentation updates
0.0.43 (Jul 16, 2024) #
Please run dart run xwidget:generate after upgrading.
- Added
WidgetStatePropertyOf<T>class to replaceMaterialStatePropertyOf<T>, which is now deprecated. - Added directional alignment options to
AlignmentGeometryparser. - Added
TextInputTypeparser. - Added
firstandlastEL functions. - Updated EL arithmetic operators (
+,-,*,/,%,~/) to work with any class that overrides them.
0.0.42 (Jul 2, 2024) #
Please run dart run xwidget:generate after upgrading.
- Added an initialization command to setup a new XWidget project. Please see the Quick Start guide.
- Updated Example project to use Material3.
0.0.41 (May 26, 2024) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
This is a big release with many changes. Please read the release notes carefully.
- Reorganized utility functions to eliminate duplication, clarify purpose, and better
support reuse. They are divided into the following groups: converters, math, parsers, validators,
and misc. All parsing function now only parse
Stringvalues; conversion function convertdynamicvalues and may call a parsing function if the value is aString. - Added the following EL functions:
formatDurationisBlankisNotBlanktoColortoDaystoHourstoMillistoMinutestoSecondstryToBooltryToColortryToDateTimetryToDaystryToDoubletryToDurationtryToHourstryToInttryToMillistryToMinutestryToSeconds
- Added the following parsing functions:
parseIntparseDoubletryParseBooltryParseDateTimetryParseDoubletryParseDurationtryParseEnumtryParseInt
- You can now listen changes to nested model properties with
<ValueListener>,Model.listenForChangesorDependencies.listenForChangeswhen usingModel.setValueorDependencies.setValue. For example:final user = Model({ "first": "Mike", "last": "Smith", "email": "test@example.com" }); dependecies.setValue("profile", user);
Any changes to<ValueListener varName="profile"> <Row> <Text data="${profile.first}"/> <Text data="${profile.last}"/> <Text data="${profile.email}"/> </Row> </ValueListener>first,lastoremailusingsetValuewill trigger the<ValueListener>to rebuild. Modelinstances now default to mutable.- Added named constructor
Model.immutable. - Added
<Item>tag to<List>for situations where you want to build a list from values stored inDependenciesor EL functions.<List for="..."> <Item value="${color}"/> <Item value="${toColor('0xFF272727')}"/> <Item value="${backgroundColor}"/> </List> - You can now pass
intvalues to inflaters that previously requireddoublesand they will be automatically converted todoublesi.e. any widget that takeswidthandheight. - Updated EL Functions and Tips & Tricks documentation.
- Removed the following EL functions:
durationInDays- usetoDaysinsteaddurationInHours- usetoHoursinsteaddurationInMinutes- usetoMinutesinsteaddurationInSeconds- usetoSecondsinsteaddurationInMills- usetoMillisinstead - Removed the following parser functions:
parseWidth- useparseDoubleinsteadparseHeight- useparseDoubleinstead
0.0.40 (May 9, 2024) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Added
abs,ceil,floor, androundEL functions. - Added grouping functionality to
forEachtag. Useful for creating simple multi-column layouts.<!-- forEach grouping example --> <forEach var="group" items="${items}" groupSize="2"> <Row> <forEach var="item" items="${group}"> <Text data="${item.title}"/> </forEach> </Row> </forEach> - Added
returnTypeattribute tobuildertag. Valid values areWidget,Widget?,List:Widget, andList:PopupMenuEntry. Defaults toWidgetif empty. - Added return type
List<PopupMenuEntry>(display nameList:PopupMenuEntry) tobuildertag. - Added support for defining inflaters with generic types i.e.
AlwaysStoppedAnimation<T>,MaterialStatePropertyOf<T>, etc.// inflater_spec.dart example const inflaters = [ AlwaysStoppedAnimation<Color> MaterialStatePropertyOf<Color>, MaterialStatePropertyOf<Size>, MaterialStatePropertyOf<TextStyle>, ];<!-- simple fragment examples --> <AlwaysStoppedAnimationColor for="..." value="@color/primary"/> <MaterialStatePropertyOfColor for="..." primary="#272727" disabled="#676767"/> <MaterialStatePropertyOfSize for="..." primary="8x8" focused="12x12" error="x24"/> <MaterialStatePropertyOfTextStyle for="..."> <TextStyle for="primary" fontWeight="400"/> <TextStyle for="selected" fontWeight="600"/> </MaterialStatePropertyOfTextStyle> - Removed
nullableandmultiChildattributes frombuildertag. UsereturnTypeinstead. - Removed erroneous
start,endattributes fromforEachschema definition. - Removed previously added
MaterialStateXXXcustom inflaters. UseMaterialStatePropertyOf<T>instead. - Removed support for original inflater specification format. Use the new specification format.
// old format - no longer supported const Column? _column = null; const Text? _text = null; const TextStyle? _textStyle = null; // new format const inflaters = [ Column, Text, TextStyle, ];
0.0.39 (May 6, 2024) #
Please run dart run xwidget:generate --only inlfaters after upgrading.
- Added default inflater constructor value for
BoxShadow:color. parseBoolnow parsesints. Zero isfalse, non-zero values aretrue.- Added custom
MaterialStateimplementations and parsers to better supportMaterialStateproperties.// inflater_spec.dart example const inflaters = [ MaterialStateBorderSide, MaterialStateColor, MaterialStateDouble, MaterialStateEdgeInsets MaterialStateMouseCursor, MaterialStateOutlineBorder, MaterialStateSize, MaterialStateTextStyle, ];
Configured default parsers:<!-- simple fragment examples --> <MaterialStateColor for="..." primary="#272727" disabled="#676767"/> <MaterialStateSize for="..." primary="8x8" focused="12x12" error="x24"/> <MaterialStateTextStyle for="..."> <TextStyle for="primary" fontWeight="400"/> <TextStyle for="selected" fontWeight="600"/> </MaterialStateTextStyle># default_config.yaml "MaterialStateProperty<Color>": "parseMaterialStateColor(value)" "MaterialStateProperty<double>": "parseMaterialStateDouble(value)" "MaterialStateProperty<EdgeInsetsGeometry>": "parseMaterialStatePadding(value)" "MaterialStateProperty<Size>": "parseMaterialStateSize(value)"
0.0.38 (Apr 29, 2024) #
- Fixed EL
RangeErrorwhen referencing data using an out of range index i.e.${items[2].name}whereitems.length == 2now returns a null. This is consistent with how null property references are handled i.e${person.name}whereperson == null. Maybe in the future we'll add astrictmode that throws Exceptions.
0.0.37 (Mar 28, 2024) #
- Added
toDoubleandtoIntEL functions. - Minor documentation updates
0.0.36 (Feb 11, 2024) #
Please run dart run xwidget:generate after upgrading.
- Added
EventNotifiercomponent.<EventNotifier event="UserEvents.login"> ... </EventNotifier> - Added mapped
Controlleroptions.<Controller name="..."> <Map for="options"> <Entry key="name" value="${value}"/> </Map> </Controller> - Added arguments to
XWidget.inflateXmlElementChildrenthat optionally include or exclude the processing of attributes defined as children i.e.for='<parent_attribute>' - Removed
ValueListener'sonChangecallback.
0.0.35 (Feb 2, 2024) #
- Fixed readability issues with README.md file.
- Added documentation builder tool (internal).
0.0.34 (Feb 2, 2024) #
BREAKING CHANGES: Please up all usages of Data to Model.
- Renamed
DatatoModelto more accurately represent its purpose. - Fixed a bug where
Modeloperators[]and[]=were incorrectly callinggetValueandsetValuerespectively. They now directly access the underlying collection. - Added static instance management methods to
Modelto help with state management:singleInstance,keyedInstance,clearInstances,hasInstance - Reorganized documentation.
0.0.33 (Jan 28, 2024) #
- Fixed dot/bracket notation parsing of
Listpaths. - Fixed relative
importstatements. - Export
MediaQueryWidget.
0.0.32 (Jan 23, 2024) #
Please run dart run xwidget:generate after upgrading.
- Fixed issues with code generator not recognizing some
Listtypes. - Improved EL dot notation path resolution error messages.
- Changed
<builder/>'sforattribute from required to optional. This is needed for creating lists of builders as required byBottomNavLayout.pages. - Added
innerListsattribute to<List/>for configuration of how inner lists are handled. The options areaddandspread.add(default) will add the inner list object.spreadwill add the inner list's items to the containing list. - Added
visibleattribute to<fragment/>. - Added new EL functions:
randomDouble,randomInt,replaceAll,replaceFirst - Improved code generator's handling of private constant defaults.
- Added
<Media/>component. Writes MediaQuery values toDependencies. - Added
createMaterialColor,parseMaterialColorutility functions.
0.0.31 (Jan 1, 2024) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Renamed
ListOfelement toListfor consistency - Added
Mapelement. Example usage:<Map for="attribute"> <Entry key="name" value="name"/> <Entry value="description">description</Entry> </Map> - Allow
param,forEach, andifelements as optional children offragmentelement. Example usage:<fragment name="header"> <param name="bottom" value="tab_bar"/> </fragment> - Auto scope dependencies for elements that support the
dependenciesScopeattribute. - Updated minimum
petitparserversion to6.0.0. - Removed deprecated imports.
0.0.30 (Dec 12, 2023) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Controller now extends
StatefulWidget. This allows Controllers to use mixins designed for stateful widgets such asTickerProviderStateMixin. - Renamed
Controller.initializetoController.init. - Removed
buildparameter from Controller constructor. - Removed multi-controller support from Controllers.
- Some code cleanup
0.0.29 (Nov 8, 2023) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Renamed
executionparameter tobuildinControllerWidgetconstructor. - Fixed
ControllerWidget's async build. - Enhanced
parseDurationfunction to acceptm,min,mins,h,hr,hrs,d,day,daysduration suffixes i.e.5m,1hr,3days. - Added
isTrue,isFalse, andlogDebugEL functions. - Improved invalid EL function error message.
- Minor XML parsing performance improvements.
0.0.28 (Oct 31, 2023) #
- Fixed reference parser 'null' error.
- Fixed
parseEnummethod signature.
0.0.27 (Oct 2, 2023) #
- Added
varDisposaloption toValueListener. Possible values arenone,byOwner, andbyLastListener. - Added
onChangecallback toValueListener. - Updated
DataValueNotifierto be owner and listener aware. - Added
removeValuemethod toDependenciesandMapBracketsextension. This method is dot/bracket notation aware. - Deleted
removemethod fromDependencies. UseremoveValueinstead.
0.0.26 (Sep 17, 2023) #
- Updated dependencies.
0.0.25 (Sep 17, 2023) #
- Updated documentation.
0.0.24 (Sep 12, 2023) #
- Added EL functions
isTrueOrNullandisFalseOrNull. - Updated documentation.
0.0.23 (Sep 8, 2023) #
- Removed
disposeOfDependenciesparameter fromDynamicBuilderconstructor. Inflater.parseAttributenow returns the unparsed value if the value is not parsed.
0.0.22 (Sep 5, 2023) #
- Updated analyzer and linter rules
- Minor code formatting
- Added publishing tool
0.0.21 (Aug 22, 2023) #
- Improved inflater builder's generation of default values from variables.
- Added new built-in EL function
toBool. - Updated documentation.
0.0.20 (Aug 16, 2023) #
BREAKING CHANGES: Please run dart run xwidget:generate after upgrading.
- Changed
Inflater.inflatesignature to pass a list of unprocessed child strings instead of a single preprocessed string. The inflater's implementation now determines how to process the strings i.e.Textinflater usesXWidgetUtils.joinStrings(text). - Removed
includeAttributesargument fromXWidget.inflateXmlElementChildrensignature. UseexcludeAttributesargument instead. - Removed
XWidget.inflateFromXmlconvenience method. UseXWidget.inflateFromXmlElementinstead. - Added an
excutionoption to theControllerinflater that specifies its inflation method, either asynchronous or synchronous. Valid values areasyncandsync. The default issync. - Minor performance improvements when setting or retrieving
Dependenciesvalues and parsing certain attribute types. - Added
XWidgetUtils.joinStringsutility function. - Added fragment XML caching to improve inflater performance. Use
XWidget.xmlCacheEnabledto enable or disable the cache. Enabled by default.
0.0.19 (Aug 9, 2023) #
- Attribute parsing performance improvements.
- Documentation updates and additions.
- Minor code cleanup.
0.0.18 (Aug 3, 2023) #
- Added support for a simplified inflater and icon specification format. See the 'Inflaters Configuration' and 'Icons Configuration' README sections.
- Updated documentation.
0.0.17 (Jul 7, 2023) #
- Substantially increased attribute value parsing performance.
- Added embedded expression parsing to attribute values i.e.
<Text data="Dear ${name},"/> - Removed
@fragmentattribute directive. Use thefragmenttag accompanied with theforattribute instead. - Replaced
copyDependenciesoption withdependenciesScope. Can benew,copy, orinherit. - Added
dependenciesScopeoption tofrgamenttag. - Updated documentation.
0.0.16 (Jul 4, 2023) #
- Improved fragment XML validation.
- Auto generate inflater attribute restrictions for enum types.
- Removed ability to override built-in functions.
- Controller no longer extends
WidgetsBindingObserver. Subclasses can add it as a mixin, if needed. - Added
callbackschema element. - Updated documentation
0.0.15 (Jul 2, 2023) #
- Overhauled EL functions to simplify implementation.
- Renamed
handlertag tocallback. - Fixed
actionattribute evaluation incallbacktag. - Added
returnVarattribute tocallbacktag. - Deleted deprecated
attributetag. UseListOfinflater instead. - Documentation updates and additions.
0.0.14 (Jun 23, 2023) #
- Inflater parsers now return the unparsed value if there's no attribute name match.
- Inflater builder now skips deprecated elements by default.
- Resources
can now use an alternate AssetBundle,
when passed to
loadResourcesmethod. Otherwise, it uses rootBundle. - Documentation updates.
- Added
fragmenttag unit tests.
0.0.13 (Jun 18, 2023) #
- Removed unnecessary import that was causing a web compatibility issue.
- Updated
vartag to allow dot/bracket notation in name attribute. - Continued work on documentation.
0.0.12 (Jun 15, 2023) #
- Improved CommonLog callback feature. Callback now returns a bool to continue or skip logging.
- Updated xwidget dependency in example 'pubspec.yaml' to point to pub.dev.
- Fixed invalid identifier parsing error.
- Fixed deprecated usages.
0.0.11 (Jun 12, 2023) #
- Improved log messages from code generator.
- Replaced deprecated commands in documentation.
0.0.10 (Jun 12, 2023) #
- Continued work on documentation.
- Added license.
0.0.9 (Jun 10, 2023) #
- ControllerWidget now supports multiple controllers.
- Initialize CommonLog with callback functions instead of class instance.
- EL parser now capable of referencing global dependencies.
- Improved Dependencies toString() format.
- Added more unit tests.
0.0.8 (Jun 5, 2023) #
- Fixed inflater builder getOnlyChild function call.
- Fixed example inflaters.
0.0.7 (Jun 4, 2023) #
- Renamed logging class from Log to CommonLog.
- Created XWidgetUtils to hold XWidget helper functions.
- Created CommonUtils to hold common helper functions.
- Cleaned up messy exports.
- Documentation updates.
0.0.6 (Jun 4, 2023) #
- Added example folder.
- Fixed async resources loading issue.
0.0.5 (Jun 4, 2023) #
- Fixed inflater builder's default imports.
- Fixed default inflater config location.
- Fixed controller builder's type scanner.
- Export EL parser.
- Export custom widgets.
- Export logger.
0.0.4 (Jun 4, 2023) #
- Restructured project files.
- Statically create required inflaters.
- Added InvalidType checks to inflater builder.
- Added inflater test.
0.0.3 (Jun 3, 2023) #
- Fixed library resolution issue.
0.0.2 (Jun 2, 2023) #
- Continued work on documentation.
- Fixed an issue with source analysis.
- Automatically scan 'lib/xwidget/controllers' for controllers.
0.0.1 (May 31, 2023) #
- Initial release.
- Fully functional, but lacking proper documentation and unit tests.