{"id":17859297,"url":"https://github.com/zeshuaro/json_theme_plus","last_synced_at":"2025-04-07T22:12:07.220Z","repository":{"id":253945645,"uuid":"845021817","full_name":"zeshuaro/json_theme_plus","owner":"zeshuaro","description":null,"archived":false,"fork":false,"pushed_at":"2024-10-24T16:51:02.000Z","size":16089,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-10-25T06:46:50.474Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zeshuaro.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["zeshuaro"],"ko_fi":"zeshuaro","liberapay":"zeshuaro","patreon":"zeshuaro","custom":["https://www.buymeacoffee.com/zeshuaro","https://paypal.me/JoshuaTang"]}},"created_at":"2024-08-20T12:34:56.000Z","updated_at":"2024-10-24T12:54:36.000Z","dependencies_parsed_at":"2024-09-17T11:42:22.974Z","dependency_job_id":"fe47d96f-b122-4dfa-8f4f-16afac0f6d32","html_url":"https://github.com/zeshuaro/json_theme_plus","commit_stats":null,"previous_names":["zeshuaro/json_theme_plus"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeshuaro%2Fjson_theme_plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeshuaro%2Fjson_theme_plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeshuaro%2Fjson_theme_plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zeshuaro%2Fjson_theme_plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zeshuaro","download_url":"https://codeload.github.com/zeshuaro/json_theme_plus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247737788,"owners_count":20987721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-28T06:42:17.838Z","updated_at":"2025-04-07T22:12:07.212Z","avatar_url":"https://github.com/zeshuaro.png","language":"Dart","funding_links":["https://github.com/sponsors/zeshuaro","https://ko-fi.com/zeshuaro","https://liberapay.com/zeshuaro","https://patreon.com/zeshuaro","https://www.buymeacoffee.com/zeshuaro","https://paypal.me/JoshuaTang","https://liberapay.com/zeshuaro/"],"categories":[],"sub_categories":[],"readme":"# json_theme\n\n[![pub package](https://img.shields.io/pub/v/json_theme_plus.svg)](https://pub.dartlang.org/packages/json_theme_plus)\n[![docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://pub.dev/documentation/json_theme_plus/latest/)\n[![MIT License](https://img.shields.io/github/license/zeshuaro/json_theme_plus.svg)](https://github.com/zeshuaro/json_theme_plus/blob/main/LICENSE)\n[![GitHub Actions](https://github.com/zeshuaro/json_theme_plus/actions/workflows/github-actions.yml/badge.svg?branch=main\u0026event=push)](https://github.com/zeshuaro/json_theme_plus/actions/workflows/github-actions.yml?query=event%3Apush+branch%3Amain)\n[![codecov](https://codecov.io/gh/zeshuaro/json_theme_plus/graph/badge.svg?token=fTee4yxTHL)](https://codecov.io/gh/zeshuaro/json_theme_plus)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/ed5ba95fc34843139cf4c42021997c5c)](https://app.codacy.com/gh/zeshuaro/json_theme_plus/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n[![style: flutter_lints](https://img.shields.io/badge/style-flutter__lints-4BC0F5.svg)](https://pub.dev/packages/flutter_lints)\n\n[![Github-sponsors](https://img.shields.io/badge/sponsor-30363D?style=for-the-badge\u0026logo=GitHub-Sponsors\u0026logoColor=#EA4AAA)](https://github.com/sponsors/zeshuaro)\n[![BuyMeACoffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-ffdd00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://www.buymeacoffee.com/zeshuaro)\n[![Ko-Fi](https://img.shields.io/badge/Ko--fi-F16061?style=for-the-badge\u0026logo=ko-fi\u0026logoColor=white)](https://ko-fi.com/zeshuaro)\n[![LiberaPay](https://img.shields.io/badge/Liberapay-F6C915?style=for-the-badge\u0026logo=liberapay\u0026logoColor=black)](https://liberapay.com/zeshuaro/)\n[![Patreon](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge\u0026logo=patreon\u0026logoColor=white)](https://patreon.com/zeshuaro)\n[![PayPal](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge\u0026logo=paypal\u0026logoColor=white)](https://paypal.me/JoshuaTang)\n\n\u003e This is a fork of [json_theme](https://pub.dev/packages/json_theme) to keep it up to date with newer Flutter versions.\n\n\u003e For users migrating from the `json_theme` package the only changes required are changing your `pubspec.yaml` file to point to `json_theme_plus` and changing any import statements to point to the updated `package:json_theme_plus/json_theme_plus.dart`.\n\nLibrary to encode and decode `ThemeData` and associated objects to / from JSON.  This is currently an early release of the library.\n\nThis provides two main classes.\n* `ThemeDecoder` -- Provides functionality to decode theme related objects from JSON maps.\n* `ThemeEncoder` -- Provides functionality to encode theme related objects into JSON maps.\n\n**Note**: Encoding and decoding is _mostly_ bi-directionally compatible, but it is not fully bi-directionally compatible.  That's because there are some properties in theme objects that exist on the constructors, but are not re-exposed as properties and only exposed as dynamic calculated values.  Likewise, there are some dynamic classes (specifically custom `Shape`, `Slider`, and `Decoration` classes) that have no meaningful way of being encoded to JSON nor decoded from JSON.\n\nThe decodes utilize a JSON Schema validator to ensure the JSON is well formed.  This validation is enabled by default in debug mode and disabled in release mode for performance reasons.  Even in development mode, you can disable the validation by setting the optional `validate` parameter to `false`.\n\n**Important Note**\n\nBecause this library allows for icons to be dynamically referenced, Flutter cannot tree shake icons because it has no way of knowing what icons may or may not be referenced.  If you include this library, then you will need to add the `--no-tree-shake-icons` flag to your Flutter build or you will get an error stating that Flutter cannot tree shake the icons.\n\n## Getting Started\n\nAdd this to your project's `pubspec.yaml` file:\n\n```yml\ndependencies:\n  json_theme_plus: ^6.8.1\n```\n\n# Live Example\n\n* [Web](https://peiffer-innovations.github.io/json_theme/web)\n\n\n# Decoding\n\nThe framework accepts both JSON-compatible objects as well as actual concrete instances being passed to the `decode` functions.  For example, the following will properly decode:\n\n```dart\nvar appBarTheme = ThemeDecoder.decodeAppBarTheme({\n    'brightness': Brightness.dark,\n    'color': '#ffdddddd'\n  }, \n  validate: false,\n);\n```\n\n\n# Schema Validation\n\nThe framework comes with a built-in JSON Schema validator.  This validator is set to be enabled by default in debug mode but disabled in release and profile mode.\n\nThe JSON Schema validator can only validate pure JSON based objects.  It cannot validate mixed JSON and concrete objects.  If your application uses mixed JSON and concrete objects in the implementation you will either need to disable validation in the decode calls where mixed objects can be used (as is done in the example above) or disable validation globally for the entire application via:\n\n```dart\nimport 'package:json_theme_plus/json_theme_schemas.dart';\n\nvoid main() {\n  SchemaValidator.enabled = false;\n\n  /// rest of app initialization goes here\n}\n\n```\n\n\n\n# Class Selection\n\nAs close as possible, the names used in the Dart APIs are replicated.  However, there are instances where the class is different for things like `Shape` objects, or there's an enum like `VerticalDirection`.  Those are all documented in this section.\n\n\n**Alignment**\n\nPlain string that must be one of:\n* `bottomCenter` ==\u003e `Alignment.bottomCenter`\n* `bottomLeft` ==\u003e `Alignment.bottomLeft`\n* `bottomRight` ==\u003e `Alignment.bottomRight`\n* `center` ==\u003e `Alignment.center`\n* `centerLeft` ==\u003e `Alignment.centerLeft`\n* `centerRight` ==\u003e `Alignment.centerRight`\n* `topCenter` ==\u003e `Alignment.topCenter`\n* `topLeft` ==\u003e `Alignment.topLeft`\n* `topRight` ==\u003e `Alignment.topRight`\n\n\n**AutovalidateMode**\n\nPlain string that must be one of:\n* `always` ==\u003e `AutovalidateMode.always`\n* `disabled` ==\u003e `AutovalidateMode.disabled`\n* `onUserInteraction` ==\u003e `AutovalidateMode.onUserInteraction`\n\n\n**Axis**\n\nPlain string that must be one of:\n* `horizontal` ==\u003e `Axis.horizontal`\n* `vertical` ==\u003e `Axis.vertical`\n\n\n**BlendMode**\n\nPlain string that must be one of:\n* `clear` ==\u003e `BlendMode.clear`\n* `color` ==\u003e `BlendMode.color`\n* `colorBurn` ==\u003e `BlendMode.colorBurn`\n* `colorDodge` ==\u003e `BlendMode.colorDodge`\n* `darken` ==\u003e `BlendMode.darken`\n* `difference` ==\u003e `BlendMode.difference`\n* `dst` ==\u003e `BlendMode.dst`\n* `dstATop` ==\u003e `BlendMode.dstATop`\n* `dstIn` ==\u003e `BlendMode.dstIn`\n* `dstOut` ==\u003e `BlendMode.dstOut`\n* `dstOver` ==\u003e `BlendMode.dstOver`\n* `exclusion` ==\u003e `BlendMode.exclusion`\n* `hardLight` ==\u003e `BlendMode.hardLight`\n* `hue` ==\u003e `BlendMode.hue`\n* `lighten` ==\u003e `BlendMode.lighten`\n* `luminosity` ==\u003e `BlendMode.luminosity`\n* `modulate` ==\u003e `BlendMode.modulate`\n* `multiply` ==\u003e `BlendMode.multiply`\n* `overlay` ==\u003e `BlendMode.overlay`\n* `plus` ==\u003e `BlendMode.plus`\n* `saturation` ==\u003e `BlendMode.saturation`\n* `screen` ==\u003e `BlendMode.screen`\n* `softLight` ==\u003e `BlendMode.softLight`\n* `src` ==\u003e `BlendMode.src`\n* `srcATop` ==\u003e `BlendMode.srcATop`\n* `srcIn` ==\u003e `BlendMode.srcIn`\n* `srcOut` ==\u003e `BlendMode.srcOut`\n* `srcOver` ==\u003e `BlendMode.srcOver`\n* `xor` ==\u003e `BlendMode.xor`\n\n\n**BorderRadius**\n\nRequires a `type` value that must be one of:\n* `all` ==\u003e `BorderRadius.all`\n* `circular` ==\u003e `BorderRadius.circular`\n* `horizontal` ==\u003e `BorderRadius.horizontal`\n* `only` ==\u003e `BorderRadius.only`\n* `vertical` ==\u003e `BorderRadius.vertical`\n\n\n**BorderStyle**\n\nPlain string that must be one of:\n* `none` ==\u003e `BorderStyle.none`\n* `solid` ==\u003e `BorderStyle.solid`\n\n\n**BottomNavigationBarType**\n\nPlain string that must be one of:\n* `fixed` ==\u003e BottomNavigationBarType.fixed\n* `shifting` ==\u003e BottomNavigationBarType.shifting\n\n\n**BoxFit**\n\nPlain string that must be one of:\n* `contain` ==\u003e `BoxFit.contain`\n* `cover` ==\u003e `BoxFit.cover`\n* `fill` ==\u003e `BoxFit.fill`\n* `fitHeight` ==\u003e `BoxFit.fitHeight`\n* `fitWidth` ==\u003e `BoxFit.fitWidth`\n* `none` ==\u003e `BoxFit.none`\n* `scaleDown` ==\u003e `BoxFit.scaleDown`\n\n\n**ButtonBarLayoutBehavior**\n\nPlain string that must be one of:\n* `constrained` ==\u003e `ButtonBarLayoutBehavior.constrained`\n* `padded` ==\u003e `ButtonBarLayoutBehavior.padded`\n\n\n**ButtonTextTheme**\n\nPlain string that must be one of:\n* `accent` ==\u003e `ButtonTextTheme.accent`\n* `normal` ==\u003e `ButtonTextTheme.normal`\n* `primary` ==\u003e `ButtonTextTheme.primary`\n\n\n**Clip**\n\nPlain string that must be one of:\n* `antiAlias` ==\u003e `Clip.antiAlias`\n* `antiAliasWithSaveLayer` ==\u003e `Clip.antiAliasWithSaveLayer`\n* `hardEdge` ==\u003e `Clip.hardEdge`\n* `none` ==\u003e `Clip.none`\n\n\n**CrossAxisAlignment**\n\nPlain string that must be one of:\n* `baseline` ==\u003e `CrossAxisAlignment.baseline`\n* `center` ==\u003e `CrossAxisAlignment.center`\n* `end` ==\u003e `CrossAxisAlignment.end`\n* `start` ==\u003e `CrossAxisAlignment.start`\n* `stretch` ==\u003e `CrossAxisAlignment.stretch`\n\n\n**CrossFadeState**\n\nPlain string that must be one of:\n* `showFirst` ==\u003e `CrossFadeState.showFirst`\n* `showSecond` ==\u003e `CrossFadeState.showSecond`\n\n\n**DecorationPosition**\n\nPlain string that must be one of:\n* `background` ==\u003e `DecorationPosition.background`\n* `foreground` ==\u003e `DecorationPosition.foreground`\n\n\n**DragStartBehavior**\n\nPlain string that must be one of:\n* `down` ==\u003e `DragStartBehavior.down`\n* `start` ==\u003e `DragStartBehavior.start`\n\n\n**FilterQuality**\nPlain string that must be one of:\n* `high` ==\u003e `FilterQuality.high`\n* `low` ==\u003e `FilterQuality.low`\n* `medium` ==\u003e `FilterQuality.medium`\n* `none` ==\u003e `FilterQuality.none`\n\n\n**FlexFit**\n\nPlain string that must be one of:\n* `loose` ==\u003e `FlexFit.loose`\n* `tight` ==\u003e `FlexFit.tight`\n\n\n**FloatingActionButtonAnimator**\n\nPlain string that must be one of:\n* `scaling` ==\u003e `FloatingActionButtonAnimator.scaling`\n\n\n**FloatingActionButtonLocation**\n\nPlain string that must be one of:\n* `centerDocked` ==\u003e `FloatingActionButtonLocation.centerDocked`\n* `centerFloat` ==\u003e `FloatingActionButtonLocation.centerFloat`\n* `centerTop` ==\u003e `FloatingActionButtonLocation.centerTop`\n* `endDocked` ==\u003e `FloatingActionButtonLocation.endDocked`\n* `endFloat` ==\u003e `FloatingActionButtonLocation.endFloat`\n* `endTop` ==\u003e `FloatingActionButtonLocation.endTop`\n* `miniCenterDocked` ==\u003e `FloatingActionButtonLocation.miniCenterDocked`\n* `miniCenterFloat` ==\u003e `FloatingActionButtonLocation.miniCenterFloat`\n* `miniCenterTop` ==\u003e `FloatingActionButtonLocation.miniCenterTop`\n* `miniEndDocked` ==\u003e `FloatingActionButtonLocation.miniEndDocked`\n* `miniEndFloat` ==\u003e `FloatingActionButtonLocation.miniEndFloat`\n* `miniEndTop` ==\u003e `FloatingActionButtonLocation.miniEndTop`\n* `miniStartDocked` ==\u003e `FloatingActionButtonLocation.miniStartDocked`\n* `miniStartFloat` ==\u003e `FloatingActionButtonLocation.miniStartFloat`\n* `miniStartTop` ==\u003e `FloatingActionButtonLocation.miniStartTop`\n* `startDocked` ==\u003e `FloatingActionButtonLocation.startDocked`\n* `startFloat` ==\u003e `FloatingActionButtonLocation.startFloat`\n* `startTop` ==\u003e `FloatingActionButtonLocation.startTop`\n\n\n**FloatingLabelBehavior**\n\nPlain string that must be one of:\n* `always` ==\u003e `FloatingLabelBehavior.always`\n* `auto` ==\u003e `FloatingLabelBehavior.auto`\n* `never` ==\u003e `FloatingLabelBehavior.never`\n\n\n**FontWeight**\n\nPlain string that must be one of:\n* `bold` ==\u003e `FontWeight.bold`\n* `normal` ==\u003e `FontWeight.normal`\n* `w100` ==\u003e `FontWeight.w100`\n* `w200` ==\u003e `FontWeight.w200`\n* `w300` ==\u003e `FontWeight.w300`\n* `w400` ==\u003e `FontWeight.w400`\n* `w500` ==\u003e `FontWeight.w500`\n* `w600` ==\u003e `FontWeight.w600`\n* `w700` ==\u003e `FontWeight.w700`\n* `w800` ==\u003e `FontWeight.w800`\n* `w900` ==\u003e `FontWeight.w900`\n\n\n**FontStyle**\n\nPlain string that must be one of:\n* `italic` ==\u003e `FontStyle.italic`\n* `normal` ==\u003e `FontStyle.normal`\n\n\n**Gradient**\n\nRequires a `type` value that must be one of:\n* `linear` ==\u003e `LinearGradient`\n* `radial` ==\u003e `RadialGradient`\n* `sweep` ==\u003e `SweepGradient`\n\n\n**HitTestBehavior**\n\nPlain string that must be one of:\n* `deferToChild` ==\u003e `HitTestBehavior.deferToChild`\n* `opaque` ==\u003e `HitTestBehavior.opaque`\n* `translucent` ==\u003e `HitTestBehavior.translucent`\n\n\n**ImageProvider**\n\nRequires a `type` value that must be one of:\n* `asset` ==\u003e `AssetImage`\n* `memory` ==\u003e `MemoryImage`\n* `network` ==\u003e `NetworkImage`\n\n\n**ImageRepeat**\n\nPlain string that must be one of:\n* `noRepeat` ==\u003e `ImageRepeat.noRepeat`\n* `repeat` ==\u003e `ImageRepeat.repeat`\n* `repeatX` ==\u003e `ImageRepeat.repeatX`\n* `repeatY` ==\u003e `ImageRepeat.repeatY`\n\n\n**InputBorder**\n\nRequires a `type` value that must be one of:\n* `outline` ==\u003e `OutlineInputBorder`\n* `underline` ==\u003e `UnderlineInputBorder`\n\n\n**InteractiveInkFeatureFactory**\n\nPlain string that must be one of:\n* `splash` ==\u003e `InkSplash.splashFactory`\n* `ripple` ==\u003e `InkRipple.splashFactory`\n\n\n**MainAxisAlignment**\n\nPlain string that must be one of:\n* `center` ==\u003e `MainAxisAlignment.center`\n* `end` ==\u003e `MainAxisAlignment.end`\n* `spaceAround` ==\u003e `MainAxisAlignment.spaceAround`\n* `spaceBetween` ==\u003e `MainAxisAlignment.spaceBetween`\n* `spaceEvenly` ==\u003e `MainAxisAlignment.spaceEvenly`\n* `start` ==\u003e `MainAxisAlignment.start`\n\n\n**MainAxisSize**\n\nPlain string that must be one of:\n* `min` ==\u003e `MainAxisSize.min`\n* `max` ==\u003e `MainAxisSize.max`\n\n\n**MaterialTapTargetSize**\n\nPlain string that must be one of:\n* `padded` ==\u003e `MaterialTapTargetSize.padded`\n* `shrinkWrap` ==\u003e `MaterialTapTargetSize.shrinkWrap`\n\n\n**MaterialType**\n\nPlain string that must be one of:\n* `button` ==\u003e `MaterialType.button`\n* `canvas` ==\u003e `MaterialType.canvas`\n* `card` ==\u003e `MaterialType.card`\n* `circle` ==\u003e`MaterialType.circle`\n* `transparency` ==\u003e `MaterialType.transparency`\n\n\n**MaxLengthEnforcement**\n\nPlain string that must be one of:\n* `enforced` ==\u003e `MaxLengthEnforcement.enforced`\n* `none` ==\u003e `MaxLengthEnforcement.none`\n* `truncateAfterCompositionEnds` ==\u003e `MaxLengthEnforcement.truncateAfterCompositionEnds`\n\n\n**MouseCursor**\n\nRequires a `type` value that must be one of:\n* `defer` ==\u003e `MouseCursor.defer`\n* `material` ==\u003e `MouseCursor.material`\n* `system` ==\u003e `MouseCursor.system`\n* `uncontrolled` ==\u003e `MouseCursor.uncontrolled`\n\n\n**NavigationRailLabelType**\n\nPlain string that must be one of:\n* `all` ==\u003e `NavigationRailLabelType.all`\n* `none` ==\u003e `NavigationRailLabelType.none`\n* `selected` ==\u003e `NavigationRailLabelType.selected`\n\n\n**NotchedShape**\n\nPlain string that must be one of:\n* `circular` ==\u003e `CircularNotchedRectangle`\n\n\n**OutlinedBorder**\nRequires a `type` value that must be one of:\n* `stadium` ==\u003e `BeveledRectangleBorder`\n* `circle` ==\u003e `CircleBorder`\n* `rectangle` ==\u003e `ContinuousRectangleBorder`\n* `rounded` ==\u003e `RoundedRectangleBorder`\n* `stadium` ==\u003e `StadiumBorder`\n\n\n**PageTransitionsBuilder**\n\nPlain string that must be one of:\n* `clip` ==\u003e `Overflow.clip`\n* `visible` ==\u003e `Overflow.visible`\n\n\n**Radius**\n\nRequires a `type` value that must be one of:\n* `circular` ==\u003e `Radius.circular`\n* `elliptical` ==\u003e `Radius.elliptical`\n* `zero` ==\u003e `Radius.zero`\n\n\n**RangeSliderThumbShape**\n\nRequires a `type` value that must be one of:\n* `round` ==\u003e `RoundRangeSliderThumbShape`\n\n\n**RangeSliderTickMarkShape**\n\nPlain string that must be one of:\nRequires a `type` value that must be one of:\n* `round` ==\u003e `RoundRangeSliderTickMarkShape`\n\n\n**RangeSliderTrackShape**\n\nPlain string that must be one of:\n* `rectangular` ==\u003e `RectangularRangeSliderTrackShape`\n* `rounded` ==\u003e `RoundedRectRangeSliderTrackShape`\n\n\n**RangeSliderValueIndicatorShape**\n\nRequires a `type` value that must be one of:\n* `paddle` ==\u003e `PaddleRangeSliderValueIndicatorShape`\n* `rectangular` ==\u003e `RectangularRangeSliderValueIndicatorShape`\n\n\n**Rect**\n\nRequires a `type` value that must be one of:\n\n* `center` ==\u003e `Rect.fromCenter`\n* `circle` ==\u003e `Rect.fromCircle`\n* `largest` ==\u003e `Rect.largest`\n* `ltrb` ==\u003e `Rect.fromLTRB`\n* `ltwh` ==\u003e `Rect.fromLTWH`\n* `points` ==\u003e `Rect.fromPoints`\n* `zero` ==\u003e `Rect.zero`\n\n\n**ScrollPhysics**\n\nRequires a `type` value that must be one of:\n* `always` ==\u003e `AlwaysScrollableScrollPhysics`\n* `bouncing` ==\u003e `BouncingScrollPhysics`\n* `clamping` ==\u003e `ClampingScrollPhysics`\n* `fixedExtent` ==\u003e `FixedExtentScrollPhysics`\n* `never` ==\u003e `NeverScrollableScrollPhysics`\n* `page` ==\u003e `PageScrollPhysics`\n* `rangeMaintaining` ==\u003e `RangeMaintainingScrollPhysics`\n\n\n**ScrollViewKeyboardDismissBehavior**\n\nPlain string that must be one of:\n* `manual` ==\u003e `ScrollViewKeyboardDismissBehavior.manual`\n* `onDrag` ==\u003e `ScrollViewKeyboardDismissBehavior.onDrag`\n\n\n**ShapeBorder**\n\nRequires a `type` value that must be one of:\n* `circle` ==\u003e `CircleBorder`\n* `rectangle` ==\u003e `ContinuousRectangleBorder`\n* `rounded` ==\u003e `RoundedRectangleBorder`\n\n\n**ShowValueIndicator**\n\nPlain string that must be one of:\n* `always` ==\u003e `ShowValueIndicator.always`\n* `never` ==\u003e `ShowValueIndicator.never`\n* `onlyForContinuous` ==\u003e `ShowValueIndicator.onlyForContinuous`\n* `onlyForDiscrete` ==\u003e `ShowValueIndicator.onlyForDiscrete`\n\n\n**SliderComponentShape**\n\nPlain string that must be one of:\n* `noOverlay` ==\u003e `SliderComponentShape.noOverlay`\n* `noOverlay` ==\u003e `SliderComponentShape.noOverlay`\n\n\n**SliderTickMarkShape**\n\nPlain string that must be one of:\n* `noTickMark` ==\u003e `SliderTickMarkShape.noTickMark`\n\n\n**SliderTrackShape**\n\nPlain string that must be one of:\n* `rectangular` ==\u003e `RectangularSliderTrackShape`\n* `rounded` ==\u003e `RoundedRectSliderTrackShape`\n\n\n**SmartDashesType**\n\nPlain string that must be one of:\n* `disabled` ==\u003e `SmartDashesType.disabled`\n* `enabled` ==\u003e `SmartDashesType.enabled`\n\n\n**SmartQuotesType**\n\nPlain string that must be one of:\n* `disabled` ==\u003e `SmartQuotesType.disabled`\n* `enabled` ==\u003e `SmartQuotesType.enabled`\n\n\n**SnackBarBehavior**\n\nPlain string that must be one of:\n* `fixed` ==\u003e `SnackBarBehavior.fixed`\n* `floating` ==\u003e `SnackBarBehavior.floating`\n\n\n**StackFit**\n\nPlain string that must be one of:\n* `expand` ==\u003e `StackFit.expand`\n* `loose` ==\u003e `StackFit.loose`\n* `passthrough` ==\u003e `StackFit.passthrough`\n\n\n**TabBarIndicatorSize**\n\nPlain string that must be one of:\n* `label` ==\u003e `ButtonTextTheme.label`\n* `tab` ==\u003e `ButtonTextTheme.tab`\n\n\n**TargetPlatform**\n\nPlain string that must be one of:\n* `android` ==\u003e `TargetPlatform.android`\n* `fuchsia` ==\u003e `TargetPlatform.fuchsia`\n* `iOS` ==\u003e `TargetPlatform.iOS`\n* `linux` ==\u003e `TargetPlatform.linux`\n* `macOS` ==\u003e `TargetPlatform.macOS`\n* `windows` ==\u003e `TargetPlatform.windows`\n\n\n**TextAlign**\n\nPlain string that must be one of:\n* `center` ==\u003e `TextAlign.center`\n* `end` ==\u003e `TextAlign.end`\n* `justify` ==\u003e `TextAlign.justify`\n* `left` ==\u003e `TextAlign.left`\n* `right` ==\u003e `TextAlign.right`\n* `start` ==\u003e `TextAlign.start`\n\n\n**TextAlignVertical**\n\nPlain string that must be one of:\n* `bottom` ==\u003e `TextAlignVertical.bottom`\n* `center` ==\u003e `TextAlignVertical.center`\n* `top` ==\u003e `TextAlignVertical.top`\n\n\n**TextBaseline**\n\nPlain string that must be one of:\n* `alphabetic` ==\u003e `TextBaseline.alphabetic`\n* `ideographic` ==\u003e `TextBaseline.ideographic`\n\n\n**TextCapitalization**\n\nPlain string that must be one of:\n* `characters` ==\u003e `TextCapitalization.characters`\n* `none` ==\u003e `TextCapitalization.none`\n* `sentences` ==\u003e `TextCapitalization.sentences`\n* `words` ==\u003e `TextCapitalization.words`\n\n\n**TextDecoration**\n\nPlain string that must be one of:\n* `lineThrough` ==\u003e `TextDecoration.lineThrough`\n* `none` ==\u003e `TextDecoration.none`\n* `overline` ==\u003e `TextDecoration.overline`\n* `underline` ==\u003e `TextDecoration.underline`\n\n\n**TextDecorationStyle**\n\nPlain string that must be one of:\n* `dashed` ==\u003e `TextDecorationStyle.dashed`\n* `dotted` ==\u003e `TextDecorationStyle.dotted`\n* `double` ==\u003e `TextDecorationStyle.double`\n* `solid` ==\u003e `TextDecorationStyle.solid`\n* `wavy` ==\u003e `TextDecorationStyle.wavy`\n\n\n**TextDirection**\n\nPlain string that must be one of:\n* `ltr` ==\u003e `TextDirection.ltr`\n* `rtl` ==\u003e `TextDirection.rtl`\n\n\n**TextInputAction**\n\nPlain string that must be one of:\n* `continueAction` ==\u003e `TextInputAction.continueAction`\n* `done` ==\u003e `TextInputAction.done`\n* `emergencyCall` ==\u003e `TextInputAction.emergencyCall`\n* `go` ==\u003e `TextInputAction.go`\n* `join` ==\u003e `TextInputAction.join`\n* `newline` ==\u003e `TextInputAction.newline`\n* `next` ==\u003e `TextInputAction.next`\n* `none` ==\u003e `TextInputAction.none`\n* `previous` ==\u003e `TextInputAction.previous`\n* `route` ==\u003e `TextInputAction.route`\n* `search` ==\u003e `TextInputAction.search`\n* `send` ==\u003e `TextInputAction.send`\n* `unspecified` ==\u003e `TextInputAction.unspecified`\n\n\n**TextInputType**\n\nPlain string that must be one of:\n* `datetime` ==\u003e `TextInputType.datetime`\n* `emailAddress` ==\u003e `TextInputType.emailAddress`\n* `multiline` ==\u003e `TextInputType.multiline`\n* `name` ==\u003e `TextInputType.name`\n* `number` ==\u003e `TextInputType.number`\n* `phone` ==\u003e `TextInputType.phone`\n* `streetAddress` ==\u003e `TextInputType.streetAddress`\n* `text` ==\u003e `TextInputType.text`\n* `url` ==\u003e `TextInputType.url`\n* `visiblePassword` ==\u003e `TextInputType.visiblePassword`\n\n\n**TextOverflow**\n\nPlain string that must be one of:\n* `clip` ==\u003e `TextOverflow.clip`\n* `ellipsis` ==\u003e `TextOverflow.ellipsis`\n* `fade` ==\u003e `TextOverflow.fade`\n* `visible` ==\u003e `TextOverflow.visible`\n\n\n**TextWidthBasis**\n\nPlain string that must be one of:\n* `longestLine` ==\u003e `TextWidthBasis.longestLine`\n* `parent` ==\u003e `TextWidthBasis.parent`\n\n\n**TileMode**\n\nPlain string that must be one of:\n* `clamp` ==\u003e `TileMode.clamp`\n* `decal` ==\u003e `TileMode.decal`\n* `mirror` ==\u003e `TileMode.mirror`\n* `repeated` ==\u003e `TileMode.repeated`\n\n\n**VerticalDirection**\n\nPlain string that must be one of:\n* `down` ==\u003e `VerticalDirection.down`\n* `up` ==\u003e `VerticalDirection.up`\n\n\n**VisualDensity**\n\nPlain string that must be one of:\n* `adaptivePlatformDensity` ==\u003e `VisualDensity.adaptivePlatformDensity`\n* `comfortable` ==\u003e `VisualDensity.comfortable`\n* `compact` ==\u003e `VisualDensity.compact`\n* `standard` ==\u003e `VisualDensity.standard`\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeshuaro%2Fjson_theme_plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzeshuaro%2Fjson_theme_plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzeshuaro%2Fjson_theme_plus/lists"}