diff --git a/example/assets/github_user.json b/example/assets/github_user.json index 96c9af9..a105aba 100644 --- a/example/assets/github_user.json +++ b/example/assets/github_user.json @@ -1,5 +1,15 @@ { "login": "Frezyx", + "array": [ + "a", + 1, + false, + null, + { + "sizes": "114x114", + "src": "https://github.githubassets.com/assets/apple-touch-icon-114x114-09ce42d3ca4b.png" + } + ], "id": 40857927, "node_id": "MDQ6VXNlcjQwODU3OTI3", "avatar_url": "https://avatars.githubusercontent.com/u/40857927?v=4", @@ -31,4 +41,4 @@ "following": 53, "created_at": "2018-07-05T11:05:40Z", "updated_at": "2021-04-29T05:04:21Z" - } \ No newline at end of file +} \ No newline at end of file diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index cc89c87..d9ae3f4 100644 --- a/example/macos/Runner.xcodeproj/project.pbxproj +++ b/example/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -182,7 +182,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 0930; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 33CC10EC2044A3C60003C045 = { @@ -235,6 +235,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -344,7 +345,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -423,7 +424,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -470,7 +471,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index ae8ff59..ec9aa6b 100644 --- a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ Bool { return true diff --git a/example/pubspec.lock b/example/pubspec.lock index 9f68252..c00d8d6 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,49 +5,56 @@ packages: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.11.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.18.0" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: caac504f942f41dfadcf45229ce8c47065b93919a12739f20d6173a883c5ec73 + url: "https://pub.dev" source: hosted version: "1.0.2" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" flutter: @@ -61,40 +68,84 @@ packages: path: ".." relative: true source: path - version: "1.0.0" + version: "1.1.4" + flutter_lints: + dependency: transitive + description: + name: flutter_lints + sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" + url: "https://pub.dev" + source: hosted + version: "3.0.2" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + url: "https://pub.dev" + source: hosted + version: "10.0.5" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 + url: "https://pub.dev" + source: hosted + version: "3.0.0" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.11.1" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.15.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.9.0" sky_engine: dependency: transitive description: flutter @@ -104,51 +155,66 @@ packages: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.10.0" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.2" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.7.2" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc + url: "https://pub.dev" + source: hosted + version: "14.2.4" sdks: - dart: ">=2.17.0-0 <3.0.0" - flutter: ">=1.17.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index f8a41d2..3199bb4 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.7.0 <3.0.0" + sdk: ">=2.12.0" dependencies: flutter: diff --git a/lib/src/builders/common_json_view_builder.dart b/lib/src/builders/common_json_view_builder.dart index 9e5551f..142ad52 100644 --- a/lib/src/builders/common_json_view_builder.dart +++ b/lib/src/builders/common_json_view_builder.dart @@ -6,9 +6,11 @@ import 'builders.dart'; import 'primitive_builders/primitive_builder.dart'; class CommonJsonViewBuilder implements JsonViewBuilder { - CommonJsonViewBuilder(this.jsonObj, {required JsonViewTheme jsonViewTheme}) + CommonJsonViewBuilder(this.jsonObj, + {required JsonViewTheme jsonViewTheme, this.jsonKey}) : _jsonViewTheme = jsonViewTheme; + final String? jsonKey; final dynamic jsonObj; final JsonViewTheme _jsonViewTheme; @@ -25,6 +27,7 @@ class CommonJsonViewBuilder implements JsonViewBuilder { return JsonMapBuilder( jsonObj: jsonObj as Map, jsonViewTheme: _jsonViewTheme, + jsonKey: jsonKey, ); } else if (jsonObj is List) { return JsonListBuilder( @@ -35,6 +38,7 @@ class CommonJsonViewBuilder implements JsonViewBuilder { return PrimitiveBuilder( jsonObj, jsonViewTheme: _jsonViewTheme, + jsonKey: jsonKey, ); } } diff --git a/lib/src/builders/map_json_view_builder.dart b/lib/src/builders/map_json_view_builder.dart index a45c3ae..c70fef6 100644 --- a/lib/src/builders/map_json_view_builder.dart +++ b/lib/src/builders/map_json_view_builder.dart @@ -4,12 +4,14 @@ import 'package:flutter_json_view/src/theme/json_view_theme.dart'; import 'builders.dart'; class MapJsonViewBuilder implements JsonViewBuilder { - MapJsonViewBuilder(this.map, {JsonViewTheme? jsonViewTheme}) + MapJsonViewBuilder(this.map, {JsonViewTheme? jsonViewTheme, this.jsonKey}) : _commonBuilder = CommonJsonViewBuilder( map, + jsonKey:jsonKey, jsonViewTheme: jsonViewTheme ?? const JsonViewTheme(), ); + final String? jsonKey; final Map map; final JsonViewBuilder _commonBuilder; diff --git a/lib/src/builders/primitive_builders/list_builder.dart b/lib/src/builders/primitive_builders/list_builder.dart index 30244ab..40cb42e 100644 --- a/lib/src/builders/primitive_builders/list_builder.dart +++ b/lib/src/builders/primitive_builders/list_builder.dart @@ -8,43 +8,80 @@ class JsonListBuilder extends StatefulWidget { Key? key, required this.jsonObj, required this.jsonViewTheme, + this.objKey, }) : super(key: key); + final String? objKey; final List jsonObj; final JsonViewTheme jsonViewTheme; @override - State createState() => _JsonListBuilderState(); + State createState() => JsonListBuilderState(); } -class _JsonListBuilderState extends State { +class JsonListBuilderState extends State { bool isOpened = true; + collapse() { + setState(() => isOpened = !isOpened); + } + + Widget buildObjectKey() { + if (widget.objKey != null) { + return Row(crossAxisAlignment: CrossAxisAlignment.start, children: [ + SelectableText(widget.objKey!, style: widget.jsonViewTheme.keyStyle), + JsonViewSeparator(jsonViewTheme: widget.jsonViewTheme) + ]); + } + return Container(); + } + @override Widget build(BuildContext context) { final items = _buildJsonItems(); - return Row( + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - GestureDetector( - onTap: () => setState(() => isOpened = !isOpened), - child: isOpened - ? widget.jsonViewTheme.closeIcon - : widget.jsonViewTheme.openIcon, + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GestureDetector( + onTap: collapse, + child: isOpened + ? widget.jsonViewTheme.closeIcon + : widget.jsonViewTheme.openIcon, + ), + buildObjectKey(), + Text(" [", style: widget.jsonViewTheme.keyStyle), + ], + ), + Padding( + padding: EdgeInsets.only( + left: widget.jsonViewTheme.defaultTextStyle.fontSize!), + child: _buildItem(items), + ), + Padding( + padding: EdgeInsets.only( + left: widget.jsonViewTheme.defaultTextStyle.fontSize!), + child: Text(" ]", style: widget.jsonViewTheme.keyStyle), ), - _buildItem(items), + ], ); } Widget _buildItem(List items) { if (!isOpened) { - return ClosedJsonObjectItem( - isList: true, - jsonViewTheme: widget.jsonViewTheme, - count: widget.jsonObj.length, - type: Typer.getType( - widget.jsonObj.isNotEmpty ? widget.jsonObj.first : null), + return Padding( + padding: EdgeInsets.only( + left: widget.jsonViewTheme.defaultTextStyle.fontSize!), + child: ClosedJsonObjectItem( + isList: true, + jsonViewTheme: widget.jsonViewTheme, + count: widget.jsonObj.length, + type: Typer.getType( + widget.jsonObj.isNotEmpty ? widget.jsonObj.first : null), + ), ); } return Column( diff --git a/lib/src/builders/primitive_builders/map_builder.dart b/lib/src/builders/primitive_builders/map_builder.dart index 482f667..0a906b3 100644 --- a/lib/src/builders/primitive_builders/map_builder.dart +++ b/lib/src/builders/primitive_builders/map_builder.dart @@ -7,8 +7,10 @@ class JsonMapBuilder extends StatefulWidget { Key? key, required this.jsonObj, required this.jsonViewTheme, + this.jsonKey, }) : super(key: key); + final String? jsonKey; final Map jsonObj; final JsonViewTheme jsonViewTheme; @@ -19,31 +21,64 @@ class JsonMapBuilder extends StatefulWidget { class _JsonMapBuilderState extends State { bool isOpened = true; + Widget buildObjectKey() { + if (widget.jsonKey != null) { + return Row(crossAxisAlignment: CrossAxisAlignment.start, children: [ + SelectableText(widget.jsonKey!, style: widget.jsonViewTheme.keyStyle), + JsonViewSeparator(jsonViewTheme: widget.jsonViewTheme) + ]); + } + return Container(); + } + + collapse() { + setState(() => isOpened = !isOpened); + } + @override Widget build(BuildContext context) { - return Row( + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - GestureDetector( - onTap: () => setState(() => isOpened = !isOpened), - child: isOpened - ? widget.jsonViewTheme.closeIcon - : widget.jsonViewTheme.openIcon, + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + GestureDetector( + onTap: collapse, + child: isOpened + ? widget.jsonViewTheme.closeIcon + : widget.jsonViewTheme.openIcon, + ), + buildObjectKey(), + Text(" {", style: widget.jsonViewTheme.keyStyle), + ], ), - _buidItem(), + Padding( + padding: EdgeInsets.only( + left: widget.jsonViewTheme.defaultTextStyle.fontSize!), + child: _buildItems(), + ), + Padding( + padding: EdgeInsets.only( + left: widget.jsonViewTheme.defaultTextStyle.fontSize!), + child: Text(" }", style: widget.jsonViewTheme.keyStyle), + ), + ], ); } - Widget _buidItem() { + Widget _buildItems() { + final items = _buildJsonItems(); if (!isOpened) { return ClosedJsonObjectItem( isList: false, jsonViewTheme: widget.jsonViewTheme, type: 'Object', + count: items.length, ); } - final items = _buildJsonItems(); + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: items, diff --git a/lib/src/builders/primitive_builders/primitive_builder.dart b/lib/src/builders/primitive_builders/primitive_builder.dart index 5d413f1..1428119 100644 --- a/lib/src/builders/primitive_builders/primitive_builder.dart +++ b/lib/src/builders/primitive_builders/primitive_builder.dart @@ -7,15 +7,37 @@ class PrimitiveBuilder extends StatelessWidget { this.jsonObj, { Key? key, required JsonViewTheme jsonViewTheme, + this.jsonKey, }) : _jsonViewTheme = jsonViewTheme, super(key: key); + final String? jsonKey; final dynamic jsonObj; final JsonViewTheme _jsonViewTheme; + Widget buildObjectKey() { + if (jsonKey != null) { + return Row(crossAxisAlignment: CrossAxisAlignment.start, children: [ + SelectableText(jsonKey!, style: _jsonViewTheme.keyStyle), + JsonViewSeparator(jsonViewTheme: _jsonViewTheme) + ]); + } + return Container(); + } + @override Widget build(BuildContext context) { - return _renderJsonWidgets(context); + return Padding( + padding: EdgeInsets.only( + left: _jsonViewTheme.defaultTextStyle.fontSize!), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + buildObjectKey(), + _renderJsonWidgets(context) + ], + ), + ); } Widget _renderJsonWidgets(BuildContext context) { @@ -39,6 +61,11 @@ class PrimitiveBuilder extends StatelessWidget { jsonObj: jsonObj, textStyle: _jsonViewTheme.boolStyle, ); + } else if (jsonObj == null) { + return PrimitiveJsonItem( + jsonObj: jsonObj, + textStyle: _jsonViewTheme.boolStyle, + ); } return _jsonViewTheme.errorBuilder?.call(context, jsonObj) ?? const Text('error'); diff --git a/lib/src/builders/string_json_view_builder.dart b/lib/src/builders/string_json_view_builder.dart index 747047e..e205eea 100644 --- a/lib/src/builders/string_json_view_builder.dart +++ b/lib/src/builders/string_json_view_builder.dart @@ -5,12 +5,15 @@ import 'package:flutter_json_view/src/utils/utils.dart'; import 'builders.dart'; class StringJsonViewBuilder implements JsonViewBuilder { - StringJsonViewBuilder(this.jsonString, {JsonViewTheme? jsonViewTheme}) + StringJsonViewBuilder(this.jsonString, + {JsonViewTheme? jsonViewTheme, this.jsonKey}) : _commonBuilder = CommonJsonViewBuilder( JsonConverter.jsonStringToObject(jsonString), jsonViewTheme: jsonViewTheme ?? const JsonViewTheme(), + jsonKey: jsonKey, ); + final String? jsonKey; final String jsonString; final JsonViewBuilder _commonBuilder; diff --git a/lib/src/theme/json_view_theme.dart b/lib/src/theme/json_view_theme.dart index e1e5f6e..65d3dd8 100644 --- a/lib/src/theme/json_view_theme.dart +++ b/lib/src/theme/json_view_theme.dart @@ -18,14 +18,15 @@ class JsonViewTheme { TextStyle? doubleStyle, TextStyle? intStyle, TextStyle? boolStyle, + TextStyle? nullStyle, TextStyle? stringStyle, this.closeIcon = const Icon( - Icons.arrow_drop_up, + Icons.keyboard_arrow_down, size: 18, color: Colors.white, ), this.openIcon = const Icon( - Icons.arrow_drop_down, + Icons.chevron_right, size: 18, color: Colors.white, ), @@ -39,6 +40,7 @@ class JsonViewTheme { _doubleStyle = doubleStyle ?? const TextStyle(color: Colors.blue), _intStyle = intStyle ?? const TextStyle(color: Colors.blue), _boolStyle = boolStyle ?? const TextStyle(color: Colors.green), + _nullStyle = nullStyle ?? const TextStyle(color: Colors.green), _stringStyle = stringStyle ?? const TextStyle(color: Colors.amber); /// Style of json Object keys name displaying @@ -59,6 +61,10 @@ class JsonViewTheme { TextStyle get boolStyle => defaultTextStyle.merge(_boolStyle); final TextStyle _boolStyle; + /// Style of json Object [null] values displaying + TextStyle get nullStyle => defaultTextStyle.merge(_nullStyle); + final TextStyle _nullStyle; + /// Style of json Object [String] values displaying TextStyle get stringStyle => defaultTextStyle.merge(_stringStyle); final TextStyle _stringStyle; diff --git a/lib/src/widgets/json_closed_ui_item.dart b/lib/src/widgets/json_closed_ui_item.dart index d3b25c1..66073ba 100644 --- a/lib/src/widgets/json_closed_ui_item.dart +++ b/lib/src/widgets/json_closed_ui_item.dart @@ -37,7 +37,7 @@ class ClosedJsonObjectItem extends StatelessWidget { ), if (!isList) Text( - 'Object', + 'Object(${count ?? 0})', style: jsonViewTheme.keyStyle, ), ], diff --git a/lib/src/widgets/json_ui_item.dart b/lib/src/widgets/json_ui_item.dart index 759659e..7f10a07 100644 --- a/lib/src/widgets/json_ui_item.dart +++ b/lib/src/widgets/json_ui_item.dart @@ -1,10 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_json_view/src/builders/builders.dart'; -import 'package:flutter_json_view/src/builders/primitive_builders/map_builder.dart'; import 'package:flutter_json_view/src/theme/json_view_theme.dart'; -import 'package:flutter_json_view/src/widgets/widgets.dart'; -class JsonItem extends StatelessWidget { +class JsonItem extends StatefulWidget { JsonItem({ Key? key, required this.entry, @@ -12,6 +10,7 @@ class JsonItem extends StatelessWidget { }) : _commonBuilder = CommonJsonViewBuilder( entry.value, jsonViewTheme: jsonViewTheme, + jsonKey:entry.key, ), super(key: key); @@ -19,33 +18,17 @@ class JsonItem extends StatelessWidget { final JsonViewTheme jsonViewTheme; final CommonJsonViewBuilder _commonBuilder; + @override + State createState() => _JsonItemState(); +} + +class _JsonItemState extends State { + bool isOpened = true; + @override Widget build(BuildContext context) { - final valueWidget = _commonBuilder.build(); - if (valueWidget is JsonMapBuilder) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - SelectableText(entry.key, style: jsonViewTheme.keyStyle), - JsonViewSeparator(jsonViewTheme: jsonViewTheme), - ], - ), - valueWidget - ], - ); - } - return Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SelectableText( - entry.key, - style: jsonViewTheme.keyStyle, - ), - JsonViewSeparator(jsonViewTheme: jsonViewTheme), - valueWidget - ], - ); + final valueWidget = widget._commonBuilder.build(); + return valueWidget; } -} + +} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 78d9f53..102026b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: collection - sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.2" + version: "1.18.0" fake_async: dependency: transitive description: @@ -67,6 +67,30 @@ packages: description: flutter source: sdk version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + url: "https://pub.dev" + source: hosted + version: "10.0.5" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + url: "https://pub.dev" + source: hosted + version: "3.0.5" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" lints: dependency: transitive description: @@ -79,34 +103,34 @@ packages: dependency: transitive description: name: matcher - sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb url: "https://pub.dev" source: hosted - version: "0.12.16" + version: "0.12.16+1" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.5.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.15.0" path: dependency: transitive description: name: path - sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" url: "https://pub.dev" source: hosted - version: "1.8.3" + version: "1.9.0" sky_engine: dependency: transitive description: flutter @@ -124,18 +148,18 @@ packages: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" string_scanner: dependency: transitive description: @@ -156,10 +180,10 @@ packages: dependency: transitive description: name: test_api - sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.6.0" + version: "0.7.2" vector_math: dependency: transitive description: @@ -168,14 +192,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" - web: + vm_service: dependency: transitive description: - name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + name: vm_service + sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "14.2.4" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" - flutter: ">=1.17.0" + dart: ">=3.3.0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54"