Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
Your Name committed Aug 24, 2022
1 parent ca6e3d4 commit e5c26b5
Show file tree
Hide file tree
Showing 6 changed files with 139 additions and 40 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@
- add support mix with flutter widget and native dart

## 0.0.3
- Add null safety return widget
- Add null safety return widget

## 0.0.4
- Change style code and support callback data notif on tap any button
7 changes: 6 additions & 1 deletion example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class _MyHomePageState extends State<MyHomePage> {
Widget build(BuildContext context) {
return AppView({
"@type": "MaterialApp",
"debugShowCheckedModeBanner": true,
"debugShowCheckedModeBanner": false,
"home": {
"@type": "Scaffold",
"body": {
Expand Down Expand Up @@ -102,6 +102,11 @@ class _MyHomePageState extends State<MyHomePage> {
"onPressed": {
"@type": "SendCallbackData",
"data": const {"helo": "as"},
"action": () {
setState(() {
_counter++;
});
}
},
"tooltip": 'Increment',
"child": const Icon(Icons.abc),
Expand Down
24 changes: 23 additions & 1 deletion example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,14 @@ packages:
path: ".."
relative: true
source: path
version: "0.0.3"
version: "0.0.4"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.1"
async:
dependency: transitive
description:
Expand Down Expand Up @@ -76,6 +83,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
flutter_markdown:
dependency: transitive
description:
name: flutter_markdown
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.10+4"
flutter_test:
dependency: "direct dev"
description: flutter
Expand All @@ -88,6 +102,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
markdown:
dependency: transitive
description:
name: markdown
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.0"
matcher:
dependency: transitive
description:
Expand Down Expand Up @@ -172,3 +193,4 @@ packages:
version: "2.1.2"
sdks:
dart: ">=2.17.5 <3.0.0"
flutter: ">=3.0.0"
118 changes: 82 additions & 36 deletions lib/app_view.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// ignore_for_file: unused_local_variable, empty_catches

library app_view;

import 'package:flutter/gestures.dart';
Expand All @@ -16,7 +18,8 @@ class AppViewController extends ChangeNotifier {
class AppView extends StatelessWidget {
final dynamic data;
final void Function(dynamic value) callback;
const AppView(this.data, {Key? key, required this.callback}) : super(key: key);
const AppView(this.data, {Key? key, required this.callback})
: super(key: key);

@override
Widget build(BuildContext context) {
Expand All @@ -27,6 +30,9 @@ class AppView extends StatelessWidget {
Widget jsonToWidget(
dynamic data,
) {
if (data is Widget) {
return data;
}
var res = request(
data,
);
Expand All @@ -52,13 +58,18 @@ class AppView extends StatelessWidget {
if (data is Map) {
if (data["@type"] is String) {
String type = data["@type"];
if (RegExp(r"^(EdgeInsets.all)$", caseSensitive: false).hasMatch(type)) {
if (RegExp(r"^(EdgeInsets.all)$", caseSensitive: false)
.hasMatch(type)) {
return EdgeInsets.all(jsonToDouble(data["value"]) ?? 0.0);
}
if (RegExp(r"^(EdgeInsets.symmetric)$", caseSensitive: false).hasMatch(type)) {
return EdgeInsets.symmetric(vertical: jsonToDouble(data["vertical"]) ?? 0.0, horizontal: jsonToDouble(data["horizontal"]) ?? 0.0);
if (RegExp(r"^(EdgeInsets.symmetric)$", caseSensitive: false)
.hasMatch(type)) {
return EdgeInsets.symmetric(
vertical: jsonToDouble(data["vertical"]) ?? 0.0,
horizontal: jsonToDouble(data["horizontal"]) ?? 0.0);
}
if (RegExp(r"^(EdgeInsets.only)$", caseSensitive: false).hasMatch(type)) {
if (RegExp(r"^(EdgeInsets.only)$", caseSensitive: false)
.hasMatch(type)) {
return EdgeInsets.only(
top: jsonToDouble(data["top"]) ?? 0.0,
left: jsonToDouble(data["left"]) ?? 0.0,
Expand Down Expand Up @@ -87,7 +98,10 @@ class AppView extends StatelessWidget {
double? jsonToDouble(dynamic value) {
if (value is String) {
if (RegExp(r"[0-9]+", caseSensitive: false).hasMatch(value)) {
return int.parse(RegExp(r"[0-9]+", caseSensitive: false).stringMatch(value) ?? "0").toDouble();
return int.parse(
RegExp(r"[0-9]+", caseSensitive: false).stringMatch(value) ??
"0")
.toDouble();
}
}
if (value is num) {
Expand All @@ -99,7 +113,8 @@ class AppView extends StatelessWidget {
int? jsonToInt(dynamic value) {
if (value is String) {
if (RegExp(r"[0-9]+", caseSensitive: false).hasMatch(value)) {
return int.parse(RegExp(r"[0-9]+", caseSensitive: false).stringMatch(value) ?? "0");
return int.parse(
RegExp(r"[0-9]+", caseSensitive: false).stringMatch(value) ?? "0");
}
}
if (value is num) {
Expand All @@ -109,7 +124,8 @@ class AppView extends StatelessWidget {
}

/// json or native dart widget reqturn widget or null
dynamic request(dynamic data, {dynamic defaultData, dynamic expectData, bool allowResultNull = true}) {
dynamic request(dynamic data,
{dynamic defaultData, dynamic expectData, bool allowResultNull = true}) {
if (data is Map) {
if (data["@type"] is String) {
String type = data["@type"];
Expand All @@ -129,12 +145,14 @@ class AppView extends StatelessWidget {
navigatorKey: request(data["navigatorKey"]),
scaffoldMessengerKey: request(data["scaffoldMessengerKey"]),
home: request(data["home"]),
routes: request(data["routes"], defaultData: const <String, WidgetBuilder>{}),
routes: request(data["routes"],
defaultData: const <String, WidgetBuilder>{}),
initialRoute: request(data["initialRoute"]),
onGenerateRoute: request(data["onGenerateRoute"]),
onGenerateInitialRoutes: request(data["onGenerateInitialRoutes"]),
onUnknownRoute: request(data["onUnknownRoute"]),
navigatorObservers: request(data["navigatorObservers"], defaultData: const <NavigatorObserver>[]),
navigatorObservers: request(data["navigatorObservers"],
defaultData: const <NavigatorObserver>[]),
builder: request(data["builder"]),
title: request(data["title"], defaultData: ""),
onGenerateTitle: request(data["onGenerateTitle"]),
Expand All @@ -143,23 +161,35 @@ class AppView extends StatelessWidget {
darkTheme: request(data["darkTheme"]),
highContrastTheme: request(data["highContrastTheme"]),
highContrastDarkTheme: request(data["highContrastDarkTheme"]),
themeMode: request(data["themeMode"], defaultData: ThemeMode.system),
themeMode:
request(data["themeMode"], defaultData: ThemeMode.system),
locale: request(data["locale"]),
localizationsDelegates: request(data["localizationsDelegates"]),
localeListResolutionCallback: request(data["localeListResolutionCallback"]),
localeListResolutionCallback:
request(data["localeListResolutionCallback"]),
localeResolutionCallback: request(data["localeResolutionCallback"]),
supportedLocales: request(data["supportedLocales"], defaultData: const <Locale>[Locale('en', 'US')]),
debugShowMaterialGrid: request(data["debugShowMaterialGrid"], defaultData: false),
showPerformanceOverlay: request(data["showPerformanceOverlay"], defaultData: false),
checkerboardRasterCacheImages: request(data["checkerboardRasterCacheImages"], defaultData: false),
checkerboardOffscreenLayers: request(data["checkerboardOffscreenLayers"], defaultData: false),
showSemanticsDebugger: request(data["showSemanticsDebugger"], defaultData: false),
debugShowCheckedModeBanner: request(data["debugShowCheckedModeBanner"], defaultData: true),
supportedLocales: request(data["supportedLocales"],
defaultData: const <Locale>[Locale('en', 'US')]),
debugShowMaterialGrid:
request(data["debugShowMaterialGrid"], defaultData: false),
showPerformanceOverlay:
request(data["showPerformanceOverlay"], defaultData: false),
checkerboardRasterCacheImages: request(
data["checkerboardRasterCacheImages"],
defaultData: false),
checkerboardOffscreenLayers: request(
data["checkerboardOffscreenLayers"],
defaultData: false),
showSemanticsDebugger:
request(data["showSemanticsDebugger"], defaultData: false),
debugShowCheckedModeBanner:
request(data["debugShowCheckedModeBanner"], defaultData: true),
shortcuts: request(data["shortcuts"]),
actions: request(data["actions"]),
restorationScopeId: request(data["restorationScopeId"]),
scrollBehavior: request(data["scrollBehavior"]),
useInheritedMediaQuery: request(data["useInheritedMediaQuery"], defaultData: false),
useInheritedMediaQuery:
request(data["useInheritedMediaQuery"], defaultData: false),
);
}
if (isMatch("Scaffold", type)) {
Expand All @@ -168,8 +198,10 @@ class AppView extends StatelessWidget {
appBar: request(data["appBar"]),
body: request(data["body"]),
floatingActionButton: request(data["floatingActionButton"]),
floatingActionButtonLocation: request(data["floatingActionButtonLocation"]),
floatingActionButtonAnimator: request(data["floatingActionButtonAnimator"]),
floatingActionButtonLocation:
request(data["floatingActionButtonLocation"]),
floatingActionButtonAnimator:
request(data["floatingActionButtonAnimator"]),
persistentFooterButtons: request(data["persistentFooterButtons"]),
drawer: request(data["drawer"]),
onDrawerChanged: request(data["onDrawerChanged"]),
Expand All @@ -180,13 +212,18 @@ class AppView extends StatelessWidget {
backgroundColor: request(data["backgroundColor"]),
resizeToAvoidBottomInset: request(data["resizeToAvoidBottomInset"]),
primary: request(data["primary"], defaultData: true),
drawerDragStartBehavior: request(data["drawerDragStartBehavior"], defaultData: DragStartBehavior.start),
drawerDragStartBehavior: request(data["drawerDragStartBehavior"],
defaultData: DragStartBehavior.start),
extendBody: request(data["extendBody"], defaultData: false),
extendBodyBehindAppBar: request(data["extendBodyBehindAppBar"], defaultData: false),
extendBodyBehindAppBar:
request(data["extendBodyBehindAppBar"], defaultData: false),
drawerScrimColor: request(data["drawerScrimColor"]),
drawerEdgeDragWidth: request(data["drawerEdgeDragWidth"]),
drawerEnableOpenDragGesture: request(data["drawerEnableOpenDragGesture"], defaultData: true),
endDrawerEnableOpenDragGesture: request(data["endDrawerEnableOpenDragGesture"], defaultData: true),
drawerEnableOpenDragGesture:
request(data["drawerEnableOpenDragGesture"], defaultData: true),
endDrawerEnableOpenDragGesture: request(
data["endDrawerEnableOpenDragGesture"],
defaultData: true),
restorationId: request(data["restorationId"]),
);
}
Expand Down Expand Up @@ -256,7 +293,8 @@ class AppView extends StatelessWidget {
}
if (isMatch("Padding", type)) {
return Padding(
padding: jsonToEdgeInsetsGeometry(data["padding"]) ?? const EdgeInsets.all(0),
padding: jsonToEdgeInsetsGeometry(data["padding"]) ??
const EdgeInsets.all(0),
child: request(data["child"]),
);
}
Expand All @@ -272,7 +310,7 @@ class AppView extends StatelessWidget {
shadows: request(data["shadows"]),
);
}

if (isMatch("Expanded", type)) {
return Expanded(
key: request(data["key"]),
Expand Down Expand Up @@ -323,22 +361,30 @@ class AppView extends StatelessWidget {
if (isMatch("Row", type)) {
return Row(
key: request(data["key"]),
mainAxisAlignment: request(data["mainAxisAlignment"], defaultData: MainAxisAlignment.start),
mainAxisSize: request(data["mainAxisSize"], defaultData: MainAxisSize.max),
crossAxisAlignment: request(data["crossAxisAlignment"], defaultData: CrossAxisAlignment.center),
mainAxisAlignment: request(data["mainAxisAlignment"],
defaultData: MainAxisAlignment.start),
mainAxisSize:
request(data["mainAxisSize"], defaultData: MainAxisSize.max),
crossAxisAlignment: request(data["crossAxisAlignment"],
defaultData: CrossAxisAlignment.center),
textDirection: request(data["textDirection"]),
verticalDirection: request(data["verticalDirection"], defaultData: VerticalDirection.down),
verticalDirection: request(data["verticalDirection"],
defaultData: VerticalDirection.down),
textBaseline: request(data["textBaseline"]),
children: children,
);
}
return Column(
key: request(data["key"]),
mainAxisAlignment: request(data["mainAxisAlignment"], defaultData: MainAxisAlignment.start),
mainAxisSize: request(data["mainAxisSize"], defaultData: MainAxisSize.max),
crossAxisAlignment: request(data["crossAxisAlignment"], defaultData: CrossAxisAlignment.center),
mainAxisAlignment: request(data["mainAxisAlignment"],
defaultData: MainAxisAlignment.start),
mainAxisSize:
request(data["mainAxisSize"], defaultData: MainAxisSize.max),
crossAxisAlignment: request(data["crossAxisAlignment"],
defaultData: CrossAxisAlignment.center),
textDirection: request(data["textDirection"]),
verticalDirection: request(data["verticalDirection"], defaultData: VerticalDirection.down),
verticalDirection: request(data["verticalDirection"],
defaultData: VerticalDirection.down),
textBaseline: request(data["textBaseline"]),
children: children,
);
Expand Down
22 changes: 22 additions & 0 deletions pubspec.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.1"
async:
dependency: transitive
description:
Expand Down Expand Up @@ -69,6 +76,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
flutter_markdown:
dependency: "direct main"
description:
name: flutter_markdown
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.10+4"
flutter_test:
dependency: "direct dev"
description: flutter
Expand All @@ -81,6 +95,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
markdown:
dependency: transitive
description:
name: markdown
url: "https://pub.dartlang.org"
source: hosted
version: "5.0.0"
matcher:
dependency: transitive
description:
Expand Down Expand Up @@ -165,3 +186,4 @@ packages:
version: "2.1.2"
sdks:
dart: ">=2.17.5 <3.0.0"
flutter: ">=3.0.0"
3 changes: 2 additions & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: app_view
description: Library untuk membuat widget / app dari data json untuk semua platform + Support mix with native dart ( Flutter Widget ).
version: 0.0.3
version: 0.0.4
homepage: https://github.com/azkadev/app_view/wiki
repository: https://github.com/azkadev/app_view/
issue_tracker: https://github.com/azkadev/app_view/issues
Expand All @@ -13,6 +13,7 @@ dependencies:
flutter:
sdk: flutter
cupertino_icons: ^1.0.2
flutter_markdown: ^0.6.10+4

dev_dependencies:
flutter_test:
Expand Down

0 comments on commit e5c26b5

Please sign in to comment.