xwidget 0.0.51
xwidget: ^0.0.51 copied to clipboard
A package for building dynamic UIs in Flutter using an expressive, XML based markup language.
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.flutter-io.cn.
- 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.