From 410e2a7c3518b505a39cba09924d172f61044cf2 Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 09:51:50 +0200 Subject: [PATCH 01/11] Add Customized keyName --- example/ios/Runner.xcodeproj/project.pbxproj | 7 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- example/ios/Runner/Info.plist | 2 + example/lib/examples/map.dart | 2 + example/lib/main.dart | 2 + example/pubspec.lock | 110 ++++++++++++------ example/pubspec.yaml | 8 +- lib/src/builders/asset_json_view_builder.dart | 15 ++- .../builders/common_json_view_builder.dart | 20 +++- lib/src/builders/json_view_builder.dart | 2 + lib/src/builders/map_json_view_builder.dart | 11 +- .../primitive_builders/list_builder.dart | 3 + .../primitive_builders/map_builder.dart | 16 ++- .../builders/string_json_view_builder.dart | 8 ++ lib/src/flutter_json_view.dart | 10 +- lib/src/widgets/json_closed_ui_item.dart | 12 -- lib/src/widgets/json_loader_item.dart | 8 +- 17 files changed, 166 insertions(+), 72 deletions(-) diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 30b6524..6b8f839 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -127,7 +127,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -171,10 +171,12 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -185,6 +187,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 3db53b6..b52b2e6 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ CADisableMinimumFrameDurationOnPhone + UIApplicationSupportsIndirectInputEvents + diff --git a/example/lib/examples/map.dart b/example/lib/examples/map.dart index d7bd32e..46d6394 100644 --- a/example/lib/examples/map.dart +++ b/example/lib/examples/map.dart @@ -29,6 +29,8 @@ class JsonViewApp extends StatelessWidget { 'height': 186.5 }, }, + keyName: '{...}', + listKeyName: '[...]', ), ), ), diff --git a/example/lib/main.dart b/example/lib/main.dart index 6c99c7e..8f0ce7c 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -60,6 +60,8 @@ class _HomeScreenState extends State<_HomeScreen> { height: 400, child: JsonView.asset( 'assets/github_user.json', + keyName: '{...}', + listKeyName: '[...]', theme: const JsonViewTheme(viewType: JsonViewType.collapsible), ), diff --git a/example/pubspec.lock b/example/pubspec.lock index 9f68252..77e8c84 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: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.2" 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,60 @@ packages: path: ".." relative: true source: path - version: "1.0.0" + version: "1.1.4" + flutter_lints: + dependency: transitive + description: + name: flutter_lints + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 + url: "https://pub.dev" + source: hosted + version: "3.0.1" flutter_test: dependency: "direct dev" description: flutter source: sdk version: "0.0.0" + 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: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.5.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" sky_engine: dependency: transitive description: flutter @@ -104,51 +131,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: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" 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: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.6.0" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "0.1.4-beta" sdks: - dart: ">=2.17.0-0 <3.0.0" + dart: ">=3.1.0-185.0.dev <4.0.0" flutter: ">=1.17.0" diff --git a/example/pubspec.yaml b/example/pubspec.yaml index f8a41d2..2b891fe 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -3,7 +3,7 @@ description: A new Flutter project. # The following line prevents the package from being accidentally published to # pub.dev using `pub publish`. This is preferred for private packages. -publish_to: 'none' # Remove this line if you wish to publish to pub.dev +publish_to: "none" # Remove this line if you wish to publish to pub.dev # The following defines the version and build number for your application. # A version number is three numbers separated by dots, like 1.2.43 @@ -18,15 +18,14 @@ 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 <4.0.0" dependencies: flutter: sdk: flutter - flutter_json_view: + flutter_json_view: path: ../ - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 @@ -40,7 +39,6 @@ dev_dependencies: # The following section is specific to Flutter. flutter: - # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. diff --git a/lib/src/builders/asset_json_view_builder.dart b/lib/src/builders/asset_json_view_builder.dart index ade6978..2715fb7 100644 --- a/lib/src/builders/asset_json_view_builder.dart +++ b/lib/src/builders/asset_json_view_builder.dart @@ -5,20 +5,29 @@ import 'package:flutter_json_view/src/widgets/widgets.dart'; import 'builders.dart'; class AssetJsonViewBuilder implements JsonViewBuilder { - AssetJsonViewBuilder(this.path, {JsonViewTheme? jsonViewTheme}) - : _jsonViewTheme = jsonViewTheme ?? const JsonViewTheme(); - + AssetJsonViewBuilder(this.path, + {String? keyName, JsonViewTheme? jsonViewTheme}) + : _jsonViewTheme = jsonViewTheme ?? const JsonViewTheme(), + _keyName = keyName; final String path; final JsonViewTheme _jsonViewTheme; + final String? _keyName; @override Widget build() { return JsonLoaderItem( path: path, jsonViewTheme: _jsonViewTheme, + keyName: _keyName, ); } @override JsonViewTheme get jsonViewTheme => _jsonViewTheme; + + @override + String? get keyName => _keyName; + + @override + String? get listKeyName => _keyName; } diff --git a/lib/src/builders/common_json_view_builder.dart b/lib/src/builders/common_json_view_builder.dart index 9e5551f..44ce46a 100644 --- a/lib/src/builders/common_json_view_builder.dart +++ b/lib/src/builders/common_json_view_builder.dart @@ -6,12 +6,18 @@ import 'builders.dart'; import 'primitive_builders/primitive_builder.dart'; class CommonJsonViewBuilder implements JsonViewBuilder { - CommonJsonViewBuilder(this.jsonObj, {required JsonViewTheme jsonViewTheme}) - : _jsonViewTheme = jsonViewTheme; + CommonJsonViewBuilder(this.jsonObj, + {String? keyName2, + String? listKeyName, + required JsonViewTheme jsonViewTheme}) + : _jsonViewTheme = jsonViewTheme, + _keyName = keyName2, + _listKeyName = listKeyName; final dynamic jsonObj; final JsonViewTheme _jsonViewTheme; - + final String? _keyName; + final String? _listKeyName; @override Widget build() { return _renderJsonWidgets(); @@ -25,11 +31,13 @@ class CommonJsonViewBuilder implements JsonViewBuilder { return JsonMapBuilder( jsonObj: jsonObj as Map, jsonViewTheme: _jsonViewTheme, + keyName: _keyName, ); } else if (jsonObj is List) { return JsonListBuilder( jsonObj: jsonObj as List, jsonViewTheme: _jsonViewTheme, + keyName: listKeyName, ); } return PrimitiveBuilder( @@ -37,4 +45,10 @@ class CommonJsonViewBuilder implements JsonViewBuilder { jsonViewTheme: _jsonViewTheme, ); } + + @override + String? get keyName => _keyName; + + @override + String? get listKeyName => _listKeyName; } diff --git a/lib/src/builders/json_view_builder.dart b/lib/src/builders/json_view_builder.dart index a5d1c0e..c3bd40e 100644 --- a/lib/src/builders/json_view_builder.dart +++ b/lib/src/builders/json_view_builder.dart @@ -3,5 +3,7 @@ import 'package:flutter_json_view/src/theme/json_view_theme.dart'; abstract class JsonViewBuilder { JsonViewTheme get jsonViewTheme; + String? get keyName; + String? get listKeyName; Widget build(); } diff --git a/lib/src/builders/map_json_view_builder.dart b/lib/src/builders/map_json_view_builder.dart index a45c3ae..00b4eab 100644 --- a/lib/src/builders/map_json_view_builder.dart +++ b/lib/src/builders/map_json_view_builder.dart @@ -1,12 +1,17 @@ +import 'dart:developer'; + import 'package:flutter/material.dart'; 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, String? keyName, String? listKeyName}) : _commonBuilder = CommonJsonViewBuilder( map, + keyName2: keyName, + listKeyName: listKeyName, jsonViewTheme: jsonViewTheme ?? const JsonViewTheme(), ); @@ -20,4 +25,8 @@ class MapJsonViewBuilder implements JsonViewBuilder { @override JsonViewTheme get jsonViewTheme => _commonBuilder.jsonViewTheme; + @override + String? get keyName => _commonBuilder.keyName; + @override + String? get listKeyName => _commonBuilder.listKeyName; } diff --git a/lib/src/builders/primitive_builders/list_builder.dart b/lib/src/builders/primitive_builders/list_builder.dart index 30244ab..6757646 100644 --- a/lib/src/builders/primitive_builders/list_builder.dart +++ b/lib/src/builders/primitive_builders/list_builder.dart @@ -8,10 +8,12 @@ class JsonListBuilder extends StatefulWidget { Key? key, required this.jsonObj, required this.jsonViewTheme, + this.keyName, }) : super(key: key); final List jsonObj; final JsonViewTheme jsonViewTheme; + final String? keyName; @override State createState() => _JsonListBuilderState(); @@ -43,6 +45,7 @@ class _JsonListBuilderState extends State { isList: true, jsonViewTheme: widget.jsonViewTheme, count: widget.jsonObj.length, + keyName: widget.keyName, type: Typer.getType( widget.jsonObj.isNotEmpty ? widget.jsonObj.first : null), ); diff --git a/lib/src/builders/primitive_builders/map_builder.dart b/lib/src/builders/primitive_builders/map_builder.dart index 482f667..3daa65e 100644 --- a/lib/src/builders/primitive_builders/map_builder.dart +++ b/lib/src/builders/primitive_builders/map_builder.dart @@ -1,16 +1,20 @@ +import 'dart:developer'; + import 'package:flutter/material.dart'; import 'package:flutter_json_view/src/theme/json_view_theme.dart'; import 'package:flutter_json_view/src/widgets/widgets.dart'; class JsonMapBuilder extends StatefulWidget { - const JsonMapBuilder({ - Key? key, - required this.jsonObj, - required this.jsonViewTheme, - }) : super(key: key); + const JsonMapBuilder( + {Key? key, + required this.jsonObj, + required this.jsonViewTheme, + this.keyName}) + : super(key: key); final Map jsonObj; final JsonViewTheme jsonViewTheme; + final String? keyName; @override State createState() => _JsonMapBuilderState(); @@ -39,8 +43,8 @@ class _JsonMapBuilderState extends State { if (!isOpened) { return ClosedJsonObjectItem( isList: false, + keyName: widget.keyName, jsonViewTheme: widget.jsonViewTheme, - type: 'Object', ); } final items = _buildJsonItems(); diff --git a/lib/src/builders/string_json_view_builder.dart b/lib/src/builders/string_json_view_builder.dart index 747047e..ec6a4d7 100644 --- a/lib/src/builders/string_json_view_builder.dart +++ b/lib/src/builders/string_json_view_builder.dart @@ -21,4 +21,12 @@ class StringJsonViewBuilder implements JsonViewBuilder { @override JsonViewTheme get jsonViewTheme => _commonBuilder.jsonViewTheme; + + @override + // TODO: implement keyName + String? get keyName => throw UnimplementedError(); + + @override + // TODO: implement listKeyName + String? get listKeyName => throw UnimplementedError(); } diff --git a/lib/src/flutter_json_view.dart b/lib/src/flutter_json_view.dart index 0723b30..fb7617f 100644 --- a/lib/src/flutter_json_view.dart +++ b/lib/src/flutter_json_view.dart @@ -13,6 +13,8 @@ class JsonView extends StatefulWidget { /// from a json string JsonView.string( String jsonString, { + String? keyName, + String? listKeyName, Key? key, JsonViewTheme? theme, }) : _stringData = jsonString, @@ -32,6 +34,8 @@ class JsonView extends StatefulWidget { JsonView.asset( String path, { Key? key, + String? keyName, + String? listKeyName, JsonViewTheme? theme, }) : _assetsPath = path, _mapData = null, @@ -39,6 +43,7 @@ class JsonView extends StatefulWidget { _builder = AssetJsonViewBuilder( path, jsonViewTheme: theme, + keyName: keyName, ), super(key: key); @@ -47,12 +52,16 @@ class JsonView extends StatefulWidget { JsonView.map( Map map, { Key? key, + String? keyName, + String? listKeyName, JsonViewTheme? theme, }) : _mapData = map, _stringData = null, _assetsPath = null, _builder = MapJsonViewBuilder( map, + keyName: keyName, + listKeyName: listKeyName, jsonViewTheme: theme, ), super(key: key); @@ -62,7 +71,6 @@ class JsonView extends StatefulWidget { final String? _assetsPath; final JsonViewBuilder _builder; static PrimitiveJsonItemBuilder? primitiveJsonItemBuilder; - @override State createState() => _JsonViewState(); } diff --git a/lib/src/widgets/json_closed_ui_item.dart b/lib/src/widgets/json_closed_ui_item.dart index d3b25c1..6d5f0ec 100644 --- a/lib/src/widgets/json_closed_ui_item.dart +++ b/lib/src/widgets/json_closed_ui_item.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:flutter_json_view/src/theme/json_view_theme.dart'; -import 'package:flutter_json_view/src/widgets/widgets.dart'; class ClosedJsonObjectItem extends StatelessWidget { const ClosedJsonObjectItem({ @@ -29,17 +28,6 @@ class ClosedJsonObjectItem extends StatelessWidget { keyName ?? '', style: jsonViewTheme.keyStyle, ), - if (keyName != null) JsonViewSeparator(jsonViewTheme: jsonViewTheme), - if (isList) - Text( - 'Array<$type>[${count ?? 0}]', - style: jsonViewTheme.keyStyle, - ), - if (!isList) - Text( - 'Object', - style: jsonViewTheme.keyStyle, - ), ], ); } diff --git a/lib/src/widgets/json_loader_item.dart b/lib/src/widgets/json_loader_item.dart index 7ca8924..e4dd4dc 100644 --- a/lib/src/widgets/json_loader_item.dart +++ b/lib/src/widgets/json_loader_item.dart @@ -8,9 +8,11 @@ class JsonLoaderItem extends StatefulWidget { Key? key, required this.path, required this.jsonViewTheme, + this.keyName, }) : super(key: key); final String path; final JsonViewTheme jsonViewTheme; + final String? keyName; @override State createState() => _JsonLoaderItemState(); @@ -33,10 +35,8 @@ class _JsonLoaderItemState extends State { Future _initializeBuilder() async { final json = await AssetLoader.getAssetJson(widget.path); setState(() { - _commonBuilder = CommonJsonViewBuilder( - json, - jsonViewTheme: widget.jsonViewTheme, - ); + _commonBuilder = CommonJsonViewBuilder(json, + jsonViewTheme: widget.jsonViewTheme, keyName2: widget.keyName); }); } } From cb4f8fedf11935646ba6b761b75bca369b31d440 Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 10:33:03 +0200 Subject: [PATCH 02/11] Add listKeyName --- example/lib/examples/map.dart | 36 ++++++++++++++----- .../builders/common_json_view_builder.dart | 8 +++-- lib/src/builders/map_json_view_builder.dart | 14 ++++---- .../primitive_builders/list_builder.dart | 18 ++++++---- .../primitive_builders/map_builder.dart | 6 ++-- lib/src/widgets/json_list_ui_item.dart | 14 +++++--- lib/src/widgets/json_loader_item.dart | 2 +- lib/src/widgets/json_ui_item.dart | 18 +++++----- 8 files changed, 75 insertions(+), 41 deletions(-) diff --git a/example/lib/examples/map.dart b/example/lib/examples/map.dart index 46d6394..1ae307f 100644 --- a/example/lib/examples/map.dart +++ b/example/lib/examples/map.dart @@ -19,15 +19,33 @@ class JsonViewApp extends StatelessWidget { body: Padding( padding: const EdgeInsets.all(10), child: JsonView.map( - { - 'author': { - 'name': 'Stas', - 'lastName': 'lin', - 'githubLogin': 'Frezyx', - 'age': 19, - 'man': true, - 'height': 186.5 - }, + const { + 'author': [ + { + 'name': 'Stas', + 'lastName': 'lin', + 'githubLogin': 'Frezyx', + 'age': 19, + 'man': true, + 'height': 186.5 + }, + { + 'name': 'Stas', + 'lastName': 'lin', + 'githubLogin': 'Frezyx', + 'age': 19, + 'man': true, + 'height': 186.5 + }, + { + 'name': 'Stas', + 'lastName': 'lin', + 'githubLogin': 'Frezyx', + 'age': 19, + 'man': true, + 'height': 186.5 + } + ] }, keyName: '{...}', listKeyName: '[...]', diff --git a/lib/src/builders/common_json_view_builder.dart b/lib/src/builders/common_json_view_builder.dart index 44ce46a..dae66b5 100644 --- a/lib/src/builders/common_json_view_builder.dart +++ b/lib/src/builders/common_json_view_builder.dart @@ -7,11 +7,11 @@ import 'primitive_builders/primitive_builder.dart'; class CommonJsonViewBuilder implements JsonViewBuilder { CommonJsonViewBuilder(this.jsonObj, - {String? keyName2, + {String? keyName, String? listKeyName, required JsonViewTheme jsonViewTheme}) : _jsonViewTheme = jsonViewTheme, - _keyName = keyName2, + _keyName = keyName, _listKeyName = listKeyName; final dynamic jsonObj; @@ -32,12 +32,14 @@ class CommonJsonViewBuilder implements JsonViewBuilder { jsonObj: jsonObj as Map, jsonViewTheme: _jsonViewTheme, keyName: _keyName, + listKeyName: _listKeyName, ); } else if (jsonObj is List) { return JsonListBuilder( jsonObj: jsonObj as List, jsonViewTheme: _jsonViewTheme, - keyName: listKeyName, + keyName: _keyName, + listKeyName: _listKeyName, ); } return PrimitiveBuilder( diff --git a/lib/src/builders/map_json_view_builder.dart b/lib/src/builders/map_json_view_builder.dart index 00b4eab..b2f374b 100644 --- a/lib/src/builders/map_json_view_builder.dart +++ b/lib/src/builders/map_json_view_builder.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; import 'package:flutter_json_view/src/theme/json_view_theme.dart'; @@ -10,13 +8,17 @@ class MapJsonViewBuilder implements JsonViewBuilder { {JsonViewTheme? jsonViewTheme, String? keyName, String? listKeyName}) : _commonBuilder = CommonJsonViewBuilder( map, - keyName2: keyName, + keyName: keyName, listKeyName: listKeyName, jsonViewTheme: jsonViewTheme ?? const JsonViewTheme(), - ); + ), + _keyName = keyName, + _listKeyName = listKeyName; final Map map; final JsonViewBuilder _commonBuilder; + final String? _keyName; + final String? _listKeyName; @override Widget build() { @@ -26,7 +28,7 @@ class MapJsonViewBuilder implements JsonViewBuilder { @override JsonViewTheme get jsonViewTheme => _commonBuilder.jsonViewTheme; @override - String? get keyName => _commonBuilder.keyName; + String? get keyName => _keyName; @override - String? get listKeyName => _commonBuilder.listKeyName; + String? get listKeyName => _listKeyName; } diff --git a/lib/src/builders/primitive_builders/list_builder.dart b/lib/src/builders/primitive_builders/list_builder.dart index 6757646..4adf10a 100644 --- a/lib/src/builders/primitive_builders/list_builder.dart +++ b/lib/src/builders/primitive_builders/list_builder.dart @@ -4,16 +4,18 @@ import 'package:flutter_json_view/src/utils/typer.dart'; import 'package:flutter_json_view/src/widgets/widgets.dart'; class JsonListBuilder extends StatefulWidget { - const JsonListBuilder({ - Key? key, - required this.jsonObj, - required this.jsonViewTheme, - this.keyName, - }) : super(key: key); + const JsonListBuilder( + {Key? key, + required this.jsonObj, + required this.jsonViewTheme, + this.keyName, + this.listKeyName}) + : super(key: key); final List jsonObj; final JsonViewTheme jsonViewTheme; final String? keyName; + final String? listKeyName; @override State createState() => _JsonListBuilderState(); @@ -45,7 +47,7 @@ class _JsonListBuilderState extends State { isList: true, jsonViewTheme: widget.jsonViewTheme, count: widget.jsonObj.length, - keyName: widget.keyName, + keyName: widget.listKeyName, type: Typer.getType( widget.jsonObj.isNotEmpty ? widget.jsonObj.first : null), ); @@ -62,6 +64,8 @@ class _JsonListBuilderState extends State { (e) => JsonListItem( value: e, jsonViewTheme: widget.jsonViewTheme, + keyName: widget.keyName, + listKeyName: widget.listKeyName, ), ) .toList(); diff --git a/lib/src/builders/primitive_builders/map_builder.dart b/lib/src/builders/primitive_builders/map_builder.dart index 3daa65e..f02704c 100644 --- a/lib/src/builders/primitive_builders/map_builder.dart +++ b/lib/src/builders/primitive_builders/map_builder.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; import 'package:flutter_json_view/src/theme/json_view_theme.dart'; import 'package:flutter_json_view/src/widgets/widgets.dart'; @@ -9,12 +7,14 @@ class JsonMapBuilder extends StatefulWidget { {Key? key, required this.jsonObj, required this.jsonViewTheme, + this.listKeyName, this.keyName}) : super(key: key); final Map jsonObj; final JsonViewTheme jsonViewTheme; final String? keyName; + final String? listKeyName; @override State createState() => _JsonMapBuilderState(); @@ -60,6 +60,8 @@ class _JsonMapBuilderState extends State { (e) => JsonItem( entry: e, jsonViewTheme: widget.jsonViewTheme, + keyName: widget.keyName, + listKeyName: widget.listKeyName, ), ) .toList(); diff --git a/lib/src/widgets/json_list_ui_item.dart b/lib/src/widgets/json_list_ui_item.dart index c3ba8c2..d7820e7 100644 --- a/lib/src/widgets/json_list_ui_item.dart +++ b/lib/src/widgets/json_list_ui_item.dart @@ -3,13 +3,17 @@ import 'package:flutter_json_view/src/builders/builders.dart'; import 'package:flutter_json_view/src/theme/json_view_theme.dart'; class JsonListItem extends StatelessWidget { - JsonListItem({ - Key? key, - required this.value, - required this.jsonViewTheme, - }) : _commonBuilder = CommonJsonViewBuilder( + JsonListItem( + {Key? key, + required this.value, + required this.jsonViewTheme, + String? keyName, + String? listKeyName}) + : _commonBuilder = CommonJsonViewBuilder( value, jsonViewTheme: jsonViewTheme, + keyName: keyName, + listKeyName: listKeyName, ), super(key: key); diff --git a/lib/src/widgets/json_loader_item.dart b/lib/src/widgets/json_loader_item.dart index e4dd4dc..34b394c 100644 --- a/lib/src/widgets/json_loader_item.dart +++ b/lib/src/widgets/json_loader_item.dart @@ -36,7 +36,7 @@ class _JsonLoaderItemState extends State { final json = await AssetLoader.getAssetJson(widget.path); setState(() { _commonBuilder = CommonJsonViewBuilder(json, - jsonViewTheme: widget.jsonViewTheme, keyName2: widget.keyName); + jsonViewTheme: widget.jsonViewTheme, keyName: widget.keyName); }); } } diff --git a/lib/src/widgets/json_ui_item.dart b/lib/src/widgets/json_ui_item.dart index 759659e..f19ea39 100644 --- a/lib/src/widgets/json_ui_item.dart +++ b/lib/src/widgets/json_ui_item.dart @@ -5,14 +5,16 @@ import 'package:flutter_json_view/src/theme/json_view_theme.dart'; import 'package:flutter_json_view/src/widgets/widgets.dart'; class JsonItem extends StatelessWidget { - JsonItem({ - Key? key, - required this.entry, - required this.jsonViewTheme, - }) : _commonBuilder = CommonJsonViewBuilder( - entry.value, - jsonViewTheme: jsonViewTheme, - ), + JsonItem( + {Key? key, + required this.entry, + required this.jsonViewTheme, + String? keyName, + String? listKeyName}) + : _commonBuilder = CommonJsonViewBuilder(entry.value, + jsonViewTheme: jsonViewTheme, + keyName: keyName, + listKeyName: listKeyName), super(key: key); final MapEntry entry; From 07f8462c1ad57932e38198d4bc70f9b4aca6ecc5 Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 10:35:55 +0200 Subject: [PATCH 03/11] .. --- lib/src/builders/common_json_view_builder.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/builders/common_json_view_builder.dart b/lib/src/builders/common_json_view_builder.dart index dae66b5..eee851f 100644 --- a/lib/src/builders/common_json_view_builder.dart +++ b/lib/src/builders/common_json_view_builder.dart @@ -7,8 +7,8 @@ import 'primitive_builders/primitive_builder.dart'; class CommonJsonViewBuilder implements JsonViewBuilder { CommonJsonViewBuilder(this.jsonObj, - {String? keyName, - String? listKeyName, + {String? keyName = '', + String? listKeyName = '', required JsonViewTheme jsonViewTheme}) : _jsonViewTheme = jsonViewTheme, _keyName = keyName, From a6ee81326556d3865606c614473b7f4292ab8750 Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 13:36:29 +0200 Subject: [PATCH 04/11] Add String keyName and list Keyname --- .../macos/Runner.xcodeproj/project.pbxproj | 11 +-- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- .../builders/string_json_view_builder.dart | 17 ++-- pubspec.lock | 80 +++++++++++++++++++ pubspec.yaml | 1 + 5 files changed, 99 insertions(+), 12 deletions(-) diff --git a/example/macos/Runner.xcodeproj/project.pbxproj b/example/macos/Runner.xcodeproj/project.pbxproj index cc89c87..c5fd548 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 = 1430; 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..e495d20 100644 --- a/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ _commonBuilder.jsonViewTheme; @override - // TODO: implement keyName - String? get keyName => throw UnimplementedError(); + String? get keyName => _keyName; @override - // TODO: implement listKeyName - String? get listKeyName => throw UnimplementedError(); + String? get listKeyName => _listKeyName; } diff --git a/pubspec.lock b/pubspec.lock index 78d9f53..13520bd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + args: + dependency: transitive + description: + name: args + sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" + url: "https://pub.dev" + source: hosted + version: "2.3.2" async: dependency: transitive description: @@ -41,6 +49,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.17.2" + darq: + dependency: transitive + description: + name: darq + sha256: bc2f99256ffd2ae113e2fd10eddb9d3134345eb850dc93e6d166550ec6ca58c7 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + directed_graph: + dependency: transitive + description: + name: directed_graph + sha256: f062f8fd610353500b52ede4940189bfedc4f038753707dc92eca012bf8951b4 + url: "https://pub.dev" + source: hosted + version: "0.3.7" + exception_templates: + dependency: transitive + description: + name: exception_templates + sha256: e9303fd16ecdb845a14b397cb93476f807dd2b4706f5ee44f708dbc95c256c33 + url: "https://pub.dev" + source: hosted + version: "0.2.4" fake_async: dependency: transitive description: @@ -49,6 +81,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + file: + dependency: transitive + description: + name: file + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" + source: hosted + version: "6.1.4" flutter: dependency: "direct main" description: flutter @@ -67,6 +107,38 @@ packages: description: flutter source: sdk version: "0.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + graphs: + dependency: transitive + description: + name: graphs + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 + url: "https://pub.dev" + source: hosted + version: "2.3.1" + lakos: + dependency: "direct dev" + description: + name: lakos + sha256: "15e518f1f544ca283b2d735d67c9222843058fe6f028758f8e5f6a1a7d1dd567" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + lazy_memo: + dependency: transitive + description: + name: lazy_memo + sha256: ca4be412d65726f79a30ba6e40b7056f1dbefbb35ec42913365b3f3e86d49279 + url: "https://pub.dev" + source: hosted + version: "0.1.9" lints: dependency: transitive description: @@ -107,6 +179,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" + quote_buffer: + dependency: transitive + description: + name: quote_buffer + sha256: a9eefd3ddc63bb310ffbc855b6ebe0363d925235485bc5778e28c492b1224b31 + url: "https://pub.dev" + source: hosted + version: "0.2.5" sky_engine: dependency: transitive description: flutter diff --git a/pubspec.yaml b/pubspec.yaml index c0c54e2..a29075f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,3 +22,4 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter + lakos: ^2.0.3 From d783aee8d4a102cfb9e0337e9d5aadf05c5caa4e Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 13:43:16 +0200 Subject: [PATCH 05/11] Add to string json builder --- lib/src/flutter_json_view.dart | 2 + pubspec.lock | 80 ---------------------------------- pubspec.yaml | 1 - 3 files changed, 2 insertions(+), 81 deletions(-) diff --git a/lib/src/flutter_json_view.dart b/lib/src/flutter_json_view.dart index fb7617f..448936b 100644 --- a/lib/src/flutter_json_view.dart +++ b/lib/src/flutter_json_view.dart @@ -23,6 +23,8 @@ class JsonView extends StatefulWidget { _builder = StringJsonViewBuilder( jsonString, jsonViewTheme: theme, + keyName: keyName, + listKeyName: listKeyName, ), super(key: key); diff --git a/pubspec.lock b/pubspec.lock index 13520bd..78d9f53 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1,14 +1,6 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: - args: - dependency: transitive - description: - name: args - sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611" - url: "https://pub.dev" - source: hosted - version: "2.3.2" async: dependency: transitive description: @@ -49,30 +41,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.17.2" - darq: - dependency: transitive - description: - name: darq - sha256: bc2f99256ffd2ae113e2fd10eddb9d3134345eb850dc93e6d166550ec6ca58c7 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - directed_graph: - dependency: transitive - description: - name: directed_graph - sha256: f062f8fd610353500b52ede4940189bfedc4f038753707dc92eca012bf8951b4 - url: "https://pub.dev" - source: hosted - version: "0.3.7" - exception_templates: - dependency: transitive - description: - name: exception_templates - sha256: e9303fd16ecdb845a14b397cb93476f807dd2b4706f5ee44f708dbc95c256c33 - url: "https://pub.dev" - source: hosted - version: "0.2.4" fake_async: dependency: transitive description: @@ -81,14 +49,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" - file: - dependency: transitive - description: - name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" - source: hosted - version: "6.1.4" flutter: dependency: "direct main" description: flutter @@ -107,38 +67,6 @@ packages: description: flutter source: sdk version: "0.0.0" - glob: - dependency: transitive - description: - name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - graphs: - dependency: transitive - description: - name: graphs - sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - lakos: - dependency: "direct dev" - description: - name: lakos - sha256: "15e518f1f544ca283b2d735d67c9222843058fe6f028758f8e5f6a1a7d1dd567" - url: "https://pub.dev" - source: hosted - version: "2.0.3" - lazy_memo: - dependency: transitive - description: - name: lazy_memo - sha256: ca4be412d65726f79a30ba6e40b7056f1dbefbb35ec42913365b3f3e86d49279 - url: "https://pub.dev" - source: hosted - version: "0.1.9" lints: dependency: transitive description: @@ -179,14 +107,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.8.3" - quote_buffer: - dependency: transitive - description: - name: quote_buffer - sha256: a9eefd3ddc63bb310ffbc855b6ebe0363d925235485bc5778e28c492b1224b31 - url: "https://pub.dev" - source: hosted - version: "0.2.5" sky_engine: dependency: transitive description: flutter diff --git a/pubspec.yaml b/pubspec.yaml index a29075f..c0c54e2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -22,4 +22,3 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - lakos: ^2.0.3 From 8c85936e0022a38fb44fcc503d185d2061baa02f Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 13:50:29 +0200 Subject: [PATCH 06/11] Add null cases --- lib/src/widgets/json_closed_ui_item.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/src/widgets/json_closed_ui_item.dart b/lib/src/widgets/json_closed_ui_item.dart index 6d5f0ec..a98eefe 100644 --- a/lib/src/widgets/json_closed_ui_item.dart +++ b/lib/src/widgets/json_closed_ui_item.dart @@ -28,6 +28,16 @@ class ClosedJsonObjectItem extends StatelessWidget { keyName ?? '', style: jsonViewTheme.keyStyle, ), + if (keyName == null && isList) + Text( + 'Array<$type>[${count ?? 0}]', + style: jsonViewTheme.keyStyle, + ), + if (keyName == null && !isList) + Text( + 'Object', + style: jsonViewTheme.keyStyle, + ), ], ); } From 418f235f9dd862682808421cf9f3ca333dd16ee5 Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 15:48:05 +0200 Subject: [PATCH 07/11] Make all json Selectable --- .../primitive_builders/list_builder.dart | 18 ++++++------- .../primitive_builders/map_builder.dart | 27 ++++++++++--------- lib/src/widgets/json_ui_item.dart | 5 ++-- lib/src/widgets/json_ui_primitive_item.dart | 2 +- 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/lib/src/builders/primitive_builders/list_builder.dart b/lib/src/builders/primitive_builders/list_builder.dart index 4adf10a..8434a9d 100644 --- a/lib/src/builders/primitive_builders/list_builder.dart +++ b/lib/src/builders/primitive_builders/list_builder.dart @@ -27,17 +27,17 @@ class _JsonListBuilderState extends State { @override Widget build(BuildContext context) { final items = _buildJsonItems(); - return Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - GestureDetector( - onTap: () => setState(() => isOpened = !isOpened), - child: isOpened + return GestureDetector( + onTap: () => setState(() => isOpened = !isOpened), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + isOpened ? widget.jsonViewTheme.closeIcon : widget.jsonViewTheme.openIcon, - ), - _buildItem(items), - ], + _buildItem(items), + ], + ), ); } diff --git a/lib/src/builders/primitive_builders/map_builder.dart b/lib/src/builders/primitive_builders/map_builder.dart index f02704c..26c89f3 100644 --- a/lib/src/builders/primitive_builders/map_builder.dart +++ b/lib/src/builders/primitive_builders/map_builder.dart @@ -25,17 +25,17 @@ class _JsonMapBuilderState extends State { @override Widget build(BuildContext context) { - return Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - GestureDetector( - onTap: () => setState(() => isOpened = !isOpened), - child: isOpened + return GestureDetector( + onTap: () => setState(() => isOpened = !isOpened), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + isOpened ? widget.jsonViewTheme.closeIcon : widget.jsonViewTheme.openIcon, - ), - _buidItem(), - ], + _buidItem(), + ], + ), ); } @@ -48,9 +48,12 @@ class _JsonMapBuilderState extends State { ); } final items = _buildJsonItems(); - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: items, + return SelectionArea( + focusNode: FocusNode(), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: items, + ), ); } diff --git a/lib/src/widgets/json_ui_item.dart b/lib/src/widgets/json_ui_item.dart index f19ea39..779f0ac 100644 --- a/lib/src/widgets/json_ui_item.dart +++ b/lib/src/widgets/json_ui_item.dart @@ -30,7 +30,7 @@ class JsonItem extends StatelessWidget { children: [ Row( children: [ - SelectableText(entry.key, style: jsonViewTheme.keyStyle), + Text(entry.key, style: jsonViewTheme.keyStyle), JsonViewSeparator(jsonViewTheme: jsonViewTheme), ], ), @@ -38,10 +38,11 @@ class JsonItem extends StatelessWidget { ], ); } + return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SelectableText( + Text( entry.key, style: jsonViewTheme.keyStyle, ), diff --git a/lib/src/widgets/json_ui_primitive_item.dart b/lib/src/widgets/json_ui_primitive_item.dart index 4c8588e..3eb7401 100644 --- a/lib/src/widgets/json_ui_primitive_item.dart +++ b/lib/src/widgets/json_ui_primitive_item.dart @@ -18,7 +18,7 @@ class PrimitiveJsonItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ JsonView.primitiveJsonItemBuilder?.call(context, jsonObj, textStyle) ?? - SelectableText( + Text( '$jsonObj', style: textStyle, ), From 29c659c38718cab55b091775c6c706acbc4c09ba Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 15:58:49 +0200 Subject: [PATCH 08/11] Selection for list --- lib/src/builders/primitive_builders/list_builder.dart | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/src/builders/primitive_builders/list_builder.dart b/lib/src/builders/primitive_builders/list_builder.dart index 8434a9d..e938001 100644 --- a/lib/src/builders/primitive_builders/list_builder.dart +++ b/lib/src/builders/primitive_builders/list_builder.dart @@ -52,9 +52,11 @@ class _JsonListBuilderState extends State { widget.jsonObj.isNotEmpty ? widget.jsonObj.first : null), ); } - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: items, + return SelectionArea( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: items, + ), ); } From 95d06ab922354c5b2080dbef927a3fc164c89f35 Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Thu, 1 Feb 2024 16:37:23 +0200 Subject: [PATCH 09/11] Enlarge close Icon --- lib/src/theme/json_view_theme.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/theme/json_view_theme.dart b/lib/src/theme/json_view_theme.dart index e1e5f6e..78ae025 100644 --- a/lib/src/theme/json_view_theme.dart +++ b/lib/src/theme/json_view_theme.dart @@ -21,12 +21,12 @@ class JsonViewTheme { TextStyle? stringStyle, this.closeIcon = const Icon( Icons.arrow_drop_up, - size: 18, + size: 22, color: Colors.white, ), this.openIcon = const Icon( Icons.arrow_drop_down, - size: 18, + size: 22, color: Colors.white, ), this.errorWidget = const Text('error'), From 695fe4844ca24ef2c51cb845088b706db7a8589a Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Sun, 4 Feb 2024 16:05:02 +0200 Subject: [PATCH 10/11] Add comment --- lib/src/flutter_json_view.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/src/flutter_json_view.dart b/lib/src/flutter_json_view.dart index 448936b..3788d93 100644 --- a/lib/src/flutter_json_view.dart +++ b/lib/src/flutter_json_view.dart @@ -11,6 +11,8 @@ const _encoder = JsonEncoder.withIndent(' '); class JsonView extends StatefulWidget { /// The constructor creates a widget /// from a json string + /// in [listKeyName] if it's empty the default value is Array<$type>[${count ?? 0}]. + /// in [listKeyName] if it's empty the default value is Object JsonView.string( String jsonString, { String? keyName, From 4644834e27cfd52b91fe0e147e7aea58dcad0bcf Mon Sep 17 00:00:00 2001 From: "a.aboelkhair" Date: Sun, 4 Feb 2024 16:54:05 +0200 Subject: [PATCH 11/11] Remove padding --- lib/src/flutter_json_view.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/src/flutter_json_view.dart b/lib/src/flutter_json_view.dart index 3788d93..8a61983 100644 --- a/lib/src/flutter_json_view.dart +++ b/lib/src/flutter_json_view.dart @@ -102,8 +102,7 @@ class _JsonViewState extends State { break; } return Container( - width: double.infinity, - padding: const EdgeInsets.all(10), + width: double.maxFinite, color: widget._builder.jsonViewTheme.backgroundColor, child: SingleChildScrollView( scrollDirection: Axis.horizontal,