Commit cfebf8e3 by Rizal Hermawan

feat (init): create flutter widget parser package for flutter app development. Story #3

parents
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
# .packages
.pub-cache/
.pub/
build/
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: b1395592de68cc8ac4522094ae59956dd21a91db
channel: stable
project_type: package
# This file is deprecated. Tools should instead consume
# `.dart_tools/package_config.json`.
#
# For more info see: https://dart.dev/go/dot-packages-deprecation
#
# Generated by pub on 2021-06-02 13:49:54.018368.
async:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/async-2.5.0/lib/
boolean_selector:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/boolean_selector-2.1.0/lib/
characters:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/characters-1.1.0/lib/
charcode:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/charcode-1.2.0/lib/
clock:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/clock-1.1.0/lib/
collection:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/collection-1.15.0/lib/
cupertino_icons:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/cupertino_icons-1.0.2/lib/
fake_async:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/fake_async-1.2.0/lib/
flutter:file:///D:/flutter/2.0.4-stable/packages/flutter/lib/
flutter_test:file:///D:/flutter/2.0.4-stable/packages/flutter_test/lib/
font_awesome_flutter:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/font_awesome_flutter-9.0.0/lib/
llswidget:../llswidget/lib/
matcher:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.10/lib/
meta:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/meta-1.3.0/lib/
path:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/path-1.8.0/lib/
sky_engine:file:///D:/flutter/2.0.4-stable/bin/cache/pkg/sky_engine/lib/
source_span:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/source_span-1.8.0/lib/
stack_trace:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.10.0/lib/
stream_channel:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.1.0/lib/
string_scanner:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.1.0/lib/
term_glyph:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.2.0/lib/
test_api:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/test_api-0.2.19/lib/
typed_data:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/typed_data-1.3.0/lib/
vector_math:file:///D:/flutter/2.0.4-stable/.pub-cache/hosted/pub.dartlang.org/vector_math-2.1.0/lib/
widgetparser:lib/
{
"dart.flutterSdkPath": "D:\\flutter\\2.0.4-stable\\bin"
}
\ No newline at end of file
## 0.0.1 - 2021-06-02
### feat (init): create flutter widget parser package for flutter app development.
* add some flutter and lls widgets parser
\ No newline at end of file
TODO: Add your license here.
# widgetparser
A new Flutter package project.
## Getting Started
This project is a starting point for a Dart
[package](https://flutter.dev/developing-packages/),
a library module containing code that can be shared easily across
multiple Flutter or Dart projects.
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class AlignWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Align(
alignment: map.containsKey("alignment")
? parseAlignment(map["alignment"])
: Alignment.center,
widthFactor: map.containsKey("widthFactor")
? map["widthFactor"]?.toDouble()
: null,
heightFactor: map.containsKey("heightFactor")
? map["heightFactor"]?.toDouble()
: null,
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "Align";
@override
Type get widgetType => Align;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/material.dart';
class AppBarWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
var appBarWidget = AppBar(
key: map.containsKey("key") ? createKeyForWidget(map["key"]) : null,
title: map.containsKey("title")
? WidgetParserBuilder.buildFromMap(
map["title"], buildContext, listener)
: null,
leading: map.containsKey("leading")
? WidgetParserBuilder.buildFromMap(
map["leading"], buildContext, listener)
: null,
actions: map.containsKey("actions")
? WidgetParserBuilder.buildWidgets(
map["actions"], buildContext, listener)
: null,
centerTitle:
map.containsKey("centerTitle") ? map["centerTitle"] as bool? : false,
backgroundColor: map.containsKey("backgroundColor")
? parseHexColor(map["backgroundColor"])
: null,
automaticallyImplyLeading: map.containsKey('automaticallyImplyLeading') ? map['automaticallyImplyLeading'] as bool : true,
elevation: map.containsKey('elevation') ? map['elevation'] : null,
foregroundColor: map.containsKey("foregroundColor")
? parseHexColor(map["foregroundColor"])
: null
);
return appBarWidget;
}
@override
String get widgetName => "AppBar";
@override
Type get widgetType => AppBar;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/widgets.dart';
class AspectRatioWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return AspectRatio(
aspectRatio: map["aspectRatio"]?.toDouble(),
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "AspectRatio";
@override
Type get widgetType => AspectRatio;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/widgets.dart';
class BaselineWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Baseline(
baseline: map["baseline"]?.toDouble(),
baselineType: map["baselineType"] == "alphabetic"
? TextBaseline.alphabetic
: TextBaseline.ideographic,
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "Baseline";
@override
Type get widgetType => Baseline;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/widgets.dart';
class CenterWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Center(
widthFactor: map.containsKey("widthFactor")
? map["widthFactor"]?.toDouble()
: null,
heightFactor: map.containsKey("heightFactor")
? map["heightFactor"]?.toDouble()
: null,
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "Center";
@override
Type get widgetType => Center;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class ClipRRectWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
var radius = map['borderRadius'].toString().split(",");
double topLeft = double.parse(radius[0]);
double topRight = double.parse(radius[1]);
double bottomLeft = double.parse(radius[2]);
double bottomRight = double.parse(radius[3]);
var clipBehaviorString = map['clipBehavior'];
return ClipRRect(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(topLeft),
topRight: Radius.circular(topRight),
bottomLeft: Radius.circular(bottomLeft),
bottomRight: Radius.circular(bottomRight)),
clipBehavior: parseClipBehavior(clipBehaviorString),
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "ClipRRect";
@override
Type get widgetType => ClipRRect;
}
\ No newline at end of file
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class ContainerWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
Alignment alignment = parseAlignment(map['alignment']);
Color? color = parseHexColor(map['color']);
BoxConstraints constraints = parseBoxConstraints(map['constraints']);
EdgeInsetsGeometry? margin = parseEdgeInsetsGeometry(map['margin']);
EdgeInsetsGeometry? padding = parseEdgeInsetsGeometry(map['padding']);
Map<String, dynamic>? childMap = map['child'];
Widget? child = childMap == null
? null
: WidgetParserBuilder.buildFromMap(childMap, buildContext, listener);
var containerWidget = Container(
alignment: alignment,
padding: padding,
color: color,
margin: margin,
width: map['width']?.toDouble(),
height: map['height']?.toDouble(),
constraints: constraints,
child: child,
decoration: map.containsKey('decoration') ? parseBoxDecoration(map['decoration']) : null,
);
return containerWidget;
}
@override
String get widgetName => "Container";
@override
Type get widgetType => Container;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/drop_cap_text.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/material.dart';
class DropCapTextParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return DropCapText(
data: map.containsKey('data') ? map['data'] : null,
selectable: map.containsKey('selectable') ? map['selectable'] : false,
mode: map.containsKey('mode')
? parseDropCapMode(map['mode'])
: DropCapMode.inside,
style: map.containsKey('style') ? parseTextStyle(map['style']) : null,
dropCapStyle: map.containsKey('dropCapStyle')
? parseTextStyle(map['dropCapStyle'])
: null,
textAlign: map.containsKey('textAlign')
? parseTextAlign(map['textAlign'])
: TextAlign.start,
dropCap: map.containsKey('dropCap')
? parseDropCap(map['dropCap'], buildContext, listener)
: null,
dropCapPadding: map.containsKey('dropCapPadding')
? parseEdgeInsetsGeometry(map['dropCapPadding']) as EdgeInsets?
: EdgeInsets.zero,
indentation: Offset.zero,
//todo: actually add this
dropCapChars: map.containsKey('dropCapChars') ? map['dropCapChars'] : 1,
forceNoDescent:
map.containsKey('forceNoDescent') ? map['forceNoDescent'] : false,
parseInlineMarkdown: map.containsKey('parseInlineMarkdown')
? map['parseInlineMarkdown']
: false,
textDirection: map.containsKey('textDirection')
? parseTextDirection(map['textDirection'])
: TextDirection.ltr,
overflow: map.containsKey('overflow')
? parseTextOverflow(map['overflow'])
: TextOverflow.clip,
maxLines: map.containsKey('maxLines') ? map['maxLines'] : null,
dropCapPosition: map.containsKey('dropCapPosition')
? parseDropCapPosition(map['dropCapPosition'])
: null,
);
}
@override
String get widgetName => "DropCapText";
@override
Type get widgetType => DropCapText;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/widgets.dart';
class ExpandedWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Expanded(
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener)!,
flex: map.containsKey("flex") ? map["flex"] : 1,
);
}
@override
String get widgetName => "Expanded";
@override
Type get widgetType => Expanded;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class FittedBoxWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return FittedBox(
alignment: map.containsKey("alignment")
? parseAlignment(map["alignment"])
: Alignment.center,
fit: map.containsKey("fit") ? parseBoxFit(map["fit"])! : BoxFit.contain,
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "FittedBox";
@override
Type get widgetType => FittedBox;
}
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
class GestureDetectorWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
var gestureDetectorWidget = GestureDetector(
key: map.containsKey('key') ? createKeyForWidget(map['key']) : null,
child: WidgetParserBuilder.buildFromMap(map['child'], buildContext, listener),
onTap: map.containsKey('onTap') ? () => listener!.run(buildContext, map['onTap']) : null,
onTapDown: map.containsKey('onTapDown') ? (TapDownDetails tapDownDetails) => listener!.run(buildContext, map['onTapDown']) : null,
onTapUp: map.containsKey('onTapUp') ? (TapUpDetails tapUpDetails) => listener!.run(buildContext, map['onTapUp']) : null,
onTapCancel: map.containsKey('onTapCancel') ? () => listener!.run(buildContext, map['onTapCancel']) : null,
onSecondaryTap: map.containsKey('onSecondaryTap') ? () => listener!.run(buildContext, map['onSecondaryTap']) : null,
);
return gestureDetectorWidget;
}
@override
String get widgetName => "GestureDetector";
@override
Type get widgetType => GestureDetector;
}
\ No newline at end of file
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/icons_helper.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/material.dart';
class IconWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Icon(
map.containsKey('data')
? getIconUsingPrefix(name: map['data'])
: Icons.android,
size: map.containsKey("size") ? map['size']?.toDouble() : null,
color: map.containsKey('color') ? parseHexColor(map['color']) : null,
semanticLabel:
map.containsKey('semanticLabel') ? map['semanticLabel'] : null,
textDirection: map.containsKey('textDirection')
? parseTextDirection(map['textDirection'])
: null,
);
}
@override
String get widgetName => "Icon";
@override
Type get widgetType => Icon;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/material.dart';
class IconButtonWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
EdgeInsets? padding = parseEdgeInsetsGeometry(map['padding']) as EdgeInsets;
return IconButton(
key: map.containsKey("key") ? createKeyForWidget(map["key"]) : null,
iconSize: map.containsKey('iconSize') ? map['iconSize'] : 24.0,
icon: WidgetParserBuilder.buildFromMap(map['icon'], buildContext, listener)!,
padding: map.containsKey('padding') ? padding : EdgeInsets.all(8.0),
color: map.containsKey('color') ? parseHexColor(map['color']) : null,
focusColor: map.containsKey('focusColor') ? parseHexColor(map['focusColor']) : null,
hoverColor: map.containsKey('hoverColor') ? parseHexColor(map['hoverColor']) : null,
alignment: parseAlignment(map['alignment']),
onPressed: () {
listener!.run(buildContext, map['onPressed']);
}
);
}
@override
String get widgetName => "IconButton";
@override
Type get widgetType => IconButton;
}
\ No newline at end of file
import 'dart:ui';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class AssetImageWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
String name = map['name'];
String? semanticLabel =
map.containsKey('semanticLabel') ? map['semanticLabel'] : null;
bool excludeFromSemantics = map.containsKey('excludeFromSemantics')
? map['excludeFromSemantics']
: false;
double? scale = map.containsKey("scale") ? map['scale']?.toDouble() : null;
double? width = map.containsKey('width') ? map['width']?.toDouble() : null;
double? height =
map.containsKey('height') ? map['height']?.toDouble() : null;
Color? color = map.containsKey('color') ? parseHexColor(map['color']) : null;
BlendMode? blendMode =
map.containsKey('blendMode') ? parseBlendMode(map['blendMode']) : null;
BoxFit? boxFit =
map.containsKey('boxFit') ? parseBoxFit(map['boxFit']) : null;
Alignment alignment = map.containsKey('alignment')
? parseAlignment(map['alignment'])
: Alignment.center;
ImageRepeat repeat = map.containsKey('repeat')
? parseImageRepeat(map['repeat'])!
: ImageRepeat.noRepeat;
Rect? centerSlice =
map.containsKey('centerSlice') ? parseRect(map['centerSlice']) : null;
bool matchTextDirection = map.containsKey('matchTextDirection')
? map['matchTextDirection']
: false;
bool gaplessPlayback =
map.containsKey('gaplessPlayback') ? map['gaplessPlayback'] : false;
FilterQuality filterQuality = map.containsKey('filterQuality')
? parseFilterQuality(map['filterQuality'])!
: FilterQuality.low;
var widget = Image.asset(
name,
semanticLabel: semanticLabel,
excludeFromSemantics: excludeFromSemantics,
scale: scale,
width: width,
height: height,
color: color,
colorBlendMode: blendMode,
fit: boxFit,
alignment: alignment,
repeat: repeat,
centerSlice: centerSlice,
matchTextDirection: matchTextDirection,
gaplessPlayback: gaplessPlayback,
filterQuality: filterQuality,
);
return widget;
}
@override
String get widgetName => "AssetImage";
@override
Type get widgetType => AssetImage;
}
class NetworkImageWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
String src = map['src'];
String? semanticLabel =
map.containsKey('semanticLabel') ? map['semanticLabel'] : null;
bool excludeFromSemantics = map.containsKey('excludeFromSemantics')
? map['excludeFromSemantics']
: false;
double scale = map.containsKey("scale") ? map['scale']?.toDouble() : 1.0;
double? width = map.containsKey('width') ? map['width']?.toDouble() : null;
double? height =
map.containsKey('height') ? map['height']?.toDouble() : null;
Color? color = map.containsKey('color') ? parseHexColor(map['color']) : null;
BlendMode? blendMode =
map.containsKey('blendMode') ? parseBlendMode(map['blendMode']) : null;
BoxFit? boxFit =
map.containsKey('boxFit') ? parseBoxFit(map['boxFit']) : null;
Alignment alignment = map.containsKey('alignment')
? parseAlignment(map['alignment'])
: Alignment.center;
ImageRepeat repeat = map.containsKey('repeat')
? parseImageRepeat(map['repeat'])!
: ImageRepeat.noRepeat;
Rect? centerSlice =
map.containsKey('centerSlice') ? parseRect(map['centerSlice']) : null;
bool matchTextDirection = map.containsKey('matchTextDirection')
? map['matchTextDirection']
: false;
bool gaplessPlayback =
map.containsKey('gaplessPlayback') ? map['gaplessPlayback'] : false;
FilterQuality filterQuality = map.containsKey('filterQuality')
? parseFilterQuality(map['filterQuality'])!
: FilterQuality.low;
var widget = Image.network(
src,
semanticLabel: semanticLabel,
excludeFromSemantics: excludeFromSemantics,
scale: scale,
width: width,
height: height,
color: color,
colorBlendMode: blendMode,
fit: boxFit,
alignment: alignment,
repeat: repeat,
centerSlice: centerSlice,
matchTextDirection: matchTextDirection,
gaplessPlayback: gaplessPlayback,
filterQuality: filterQuality,
);
return widget;
}
@override
String get widgetName => "ImageNetwork";
@override
Type get widgetType => NetworkImage;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class IndexedStackWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return IndexedStack(
index: map.containsKey("index") ? map["index"] : 0,
alignment: map.containsKey("alignment")
? parseAlignment(map["alignment"])
: AlignmentDirectional.topStart,
textDirection: map.containsKey("textDirection")
? parseTextDirection(map["textDirection"])
: null,
children: WidgetParserBuilder.buildWidgets(
map['children'], buildContext, listener),
);
}
@override
String get widgetName => "IndexedStack";
@override
Type get widgetType => IndexedStack;
}
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
class InkWellWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return InkWell(
key: map.containsKey('key') ? createKeyForWidget(map['key']) : null,
child: WidgetParserBuilder.buildFromMap(map['child'], buildContext, listener),
onTap: map.containsKey('onTap') ? () => listener!.run(buildContext, map['onTap']) : null,
onTapDown: map.containsKey('onTapDown') ? (TapDownDetails tapDownDetails) => listener!.run(buildContext, map['onTapDown']) : null,
onTapCancel: map.containsKey('onTapCancel') ? () => listener!.run(buildContext, map['onTapCancel']) : null
);
}
@override
String get widgetName => "InkWell";
@override
Type get widgetType => InkWell;
}
\ No newline at end of file
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/material.dart';
class LimitedBoxWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return LimitedBox(
maxWidth: map.containsKey("maxWidth") ? map['maxWidth'] : double.infinity,
maxHeight:
map.containsKey("maxHeight") ? map['maxHeight'] : double.infinity,
child: WidgetParserBuilder.buildFromMap(
map['child'], buildContext, listener),
);
}
@override
String get widgetName => "LimitedBox";
@override
Type get widgetType => LimitedBox;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import '../utils.dart';
class ListTileWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
bool isThreeLine =
map.containsKey("isThreeLine") ? map["isThreeLine"] : false;
EdgeInsetsGeometry? contentPadding = map.containsKey("contentPadding")
? parseEdgeInsetsGeometry(map["contentPadding"])
: null;
bool? dense = map.containsKey("dense") ? map["dense"] : false;
bool enabled = map.containsKey("enabled") ? map["enabled"] : true;
Widget? leading = map.containsKey("leading")
? WidgetParserBuilder.buildFromMap(
map["leading"], buildContext, listener)
: null;
bool selected = map.containsKey("selected") ? map["selected"] : false;
Widget? subtitle = map.containsKey("subtitle")
? WidgetParserBuilder.buildFromMap(
map["subtitle"], buildContext, listener)
: null;
Widget? title = map.containsKey("title")
? WidgetParserBuilder.buildFromMap(
map["title"], buildContext, listener)
: null;
Widget? trailing = map.containsKey("trailing")
? WidgetParserBuilder.buildFromMap(
map["trailing"], buildContext, listener)
: null;
// String? tapEvent = map.containsKey("tapEvent") ? map["tapEvent"] : null;
return ListTile(
isThreeLine: isThreeLine,
leading: leading,
title: title,
subtitle: subtitle,
trailing: trailing,
dense: dense,
contentPadding: contentPadding,
enabled: enabled,
// onTap: () {
// if (listener != null && tapEvent != null) {
// listener.onTap(tapEvent);
// }
// },
selected: selected,
);
}
@override
String get widgetName => "ListTile";
@override
Type get widgetType => ListTile;
}
import 'dart:convert';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class ListViewWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
var scrollDirection = Axis.vertical;
if (map.containsKey("scrollDirection") &&
"horizontal" == map["scrollDirection"]) {
scrollDirection = Axis.horizontal;
}
var reverse = map.containsKey("reverse") ? map['reverse'] : false;
var shrinkWrap = map.containsKey("shrinkWrap") ? map["shrinkWrap"] : false;
var cacheExtent =
map.containsKey("cacheExtent") ? map["cacheExtent"]?.toDouble() : 0.0;
var padding = map.containsKey('padding')
? parseEdgeInsetsGeometry(map['padding'])
: null;
var itemExtent =
map.containsKey("itemExtent") ? map["itemExtent"]?.toDouble() : null;
var children = WidgetParserBuilder.buildWidgets(
map['children'], buildContext, listener);
return ListView(
scrollDirection: scrollDirection,
reverse: reverse,
shrinkWrap: shrinkWrap,
cacheExtent: cacheExtent,
padding: padding,
itemExtent: itemExtent,
children: children,);
}
@override
String get widgetName => "ListView";
@override
Type get widgetType => ListView;
}
\ No newline at end of file
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/cupertino.dart';
class OffstageWidgetParser extends WidgetParser{
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Offstage(
offstage: map.containsKey("offstage")?map['offstage']:true,
child: WidgetParserBuilder.buildFromMap(map['child'], buildContext, listener),
);
}
@override
String get widgetName => "Offstage";
@override
Type get widgetType => Offstage;
}
\ No newline at end of file
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/widgets.dart';
class OpacityWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Opacity(
opacity: map["opacity"]?.toDouble(),
alwaysIncludeSemantics: map.containsKey("alwaysIncludeSemantics")
? map["alwaysIncludeSemantics"]
: false,
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "Opacity";
@override
Type get widgetType => Opacity;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/cupertino.dart';
class OverflowBoxWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return OverflowBox(
alignment: parseAlignment(map['alignment']),
minWidth: map.containsKey("minWidth")?map['minWidth']:null,
maxWidth: map.containsKey("maxWidth")?map['maxWidth']:null,
minHeight: map.containsKey("minHeight")?map['minHeight']:null,
maxHeight: map.containsKey("maxHeight")?map['maxHeight']:null,
child: WidgetParserBuilder.buildFromMap(map['child'], buildContext, listener),
);
}
@override
String get widgetName => "OverflowBox";
@override
Type get widgetType => OverflowBox;
}
\ No newline at end of file
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class PaddingWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Padding(
padding: map.containsKey("padding")
? parseEdgeInsetsGeometry(map["padding"])!
: EdgeInsets.zero,
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "Padding";
@override
Type get widgetType => Padding;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/widgets.dart';
class PageViewWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
var scrollDirection = Axis.vertical;
if (map.containsKey("scrollDirection") &&
"horizontal" == map["scrollDirection"]) {
scrollDirection = Axis.horizontal;
}
return PageView(
scrollDirection: scrollDirection,
reverse: map.containsKey("reverse") ? map["reverse"] : false,
pageSnapping:
map.containsKey("pageSnapping") ? map["pageSnapping"] : true,
children: WidgetParserBuilder.buildWidgets(
map['children'], buildContext, listener),
);
}
@override
String get widgetName => "PageView";
@override
Type get widgetType => PageView;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class PlaceholderWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Placeholder(
color: map.containsKey('color')
? parseHexColor(map['color'])!
: const Color(0xFF455A64),
strokeWidth:
map.containsKey('strokeWidth') ? map['strokeWidth']?.toDouble() : 2.0,
fallbackWidth: map.containsKey('fallbackWidth')
? map['fallbackWidth']?.toDouble()
: 400.0,
fallbackHeight: map.containsKey('fallbackHeight')
? map['fallbackHeight']?.toDouble()
: 400.0,
);
}
@override
String get widgetName => "Placeholder";
@override
Type get widgetType => Placeholder;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class RowWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Row(
crossAxisAlignment: map.containsKey('crossAxisAlignment')
? parseCrossAxisAlignment(map['crossAxisAlignment'])
: CrossAxisAlignment.center,
mainAxisAlignment: map.containsKey('mainAxisAlignment')
? parseMainAxisAlignment(map['mainAxisAlignment'])
: MainAxisAlignment.start,
mainAxisSize: map.containsKey('mainAxisSize')
? parseMainAxisSize(map['mainAxisSize'])
: MainAxisSize.max,
textBaseline: map.containsKey('textBaseline')
? parseTextBaseline(map['textBaseline'])
: null,
textDirection: map.containsKey('textDirection')
? parseTextDirection(map['textDirection'])
: null,
verticalDirection: map.containsKey('verticalDirection')
? parseVerticalDirection(map['verticalDirection'])
: VerticalDirection.down,
children: WidgetParserBuilder.buildWidgets(
map['children'], buildContext, listener),
);
}
@override
String get widgetName => "Row";
@override
Type get widgetType => Row;
}
class ColumnWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Column(
crossAxisAlignment: map.containsKey('crossAxisAlignment')
? parseCrossAxisAlignment(map['crossAxisAlignment'])
: CrossAxisAlignment.center,
mainAxisAlignment: map.containsKey('mainAxisAlignment')
? parseMainAxisAlignment(map['mainAxisAlignment'])
: MainAxisAlignment.start,
mainAxisSize: map.containsKey('mainAxisSize')
? parseMainAxisSize(map['mainAxisSize'])
: MainAxisSize.max,
textBaseline: map.containsKey('textBaseline')
? parseTextBaseline(map['textBaseline'])
: null,
textDirection: map.containsKey('textDirection')
? parseTextDirection(map['textDirection'])
: null,
verticalDirection: map.containsKey('verticalDirection')
? parseVerticalDirection(map['verticalDirection'])
: VerticalDirection.down,
children: WidgetParserBuilder.buildWidgets(
map['children'], buildContext, listener),
);
}
@override
String get widgetName => "Column";
@override
Type get widgetType => Column;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class SafeAreaWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
var left = map.containsKey("left") ? map["left"] : true;
var right = map.containsKey("right") ? map["right"] : true;
var top = map.containsKey("top") ? map["top"] : true;
var bottom = map.containsKey("bottom") ? map["bottom"] : true;
var edgeInsets = map.containsKey("minimum")
? parseEdgeInsetsGeometry(map['minimum'])!
: EdgeInsets.zero;
var maintainBottomViewPadding = map.containsKey("maintainBottomViewPadding")
? map["maintainBottomViewPadding"]
: false;
return SafeArea(
left: left,
right: right,
top: top,
bottom: bottom,
minimum: edgeInsets as EdgeInsets,
maintainBottomViewPadding: maintainBottomViewPadding,
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener)!,
);
}
@override
String get widgetName => "SafeArea";
@override
Type get widgetType => SafeArea;
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
class ScaffoldWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
var scaffoldWidget = Scaffold(
key: map.containsKey("key") ? createKeyForWidget(map["key"]) : null,
appBar: map.containsKey("appBar")
? WidgetParserBuilder.buildFromMap(
map["appBar"], buildContext, listener) as PreferredSizeWidget?
: null,
body: map.containsKey("body")
? WidgetParserBuilder.buildFromMap(
map["body"], buildContext, listener)
: null,
floatingActionButton: map.containsKey("floatingActionButton")
? WidgetParserBuilder.buildFromMap(
map["floatingActionButton"], buildContext, listener)
: null,
backgroundColor: map.containsKey("backgroundColor")
? parseHexColor(map["backgroundColor"])
: null,
persistentFooterButtons: map.containsKey("persistentFooterButtons")
? WidgetParserBuilder.buildWidgets(
map["persistentFooterButtons"], buildContext, listener)
: null,
);
return scaffoldWidget;
}
@override
String get widgetName => "Scaffold";
@override
Type get widgetType => Scaffold;
}
import 'package:flutter/gestures.dart';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
// import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
class SelectableTextWidgetParser implements WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
String? data = map['data'];
String? textAlignString = map['textAlign'];
int? maxLines = map['maxLines'];
String? textDirectionString = map['textDirection'];
// double textScaleFactor = map['textScaleFactor'];
var textSpan;
var textSpanParser = SelectableTextSpanParser();
if (map.containsKey("textSpan")) {
textSpan = textSpanParser.parse(map['textSpan'], buildContext, listener);
}
if (textSpan == null) {
return SelectableText(
data!,
textAlign: parseTextAlign(textAlignString),
maxLines: maxLines,
textDirection: parseTextDirection(textDirectionString),
style: map.containsKey('style') ? parseTextStyle(map['style']) : null,
// textScaleFactor: textScaleFactor,
);
} else {
return SelectableText.rich(
textSpan,
textAlign: parseTextAlign(textAlignString),
maxLines: maxLines,
textDirection: parseTextDirection(textDirectionString),
style: map.containsKey('style') ? parseTextStyle(map['style']) : null,
// textScaleFactor: textScaleFactor,
);
}
}
@override
String get widgetName => "SelectableText";
@override
Type get widgetType => SelectableText;
}
class SelectableTextSpanParser {
TextSpan parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
Map<String, String>? recognizer = map.containsKey("recognizer") ? map['recognizer'] : null;
var textSpan = TextSpan(
text: map['text'],
style: parseTextStyle(map['style']),
recognizer: TapGestureRecognizer()
..onTap = () => listener!.run(buildContext, recognizer),
children: []);
if (map.containsKey('children')) {
parseChildren(textSpan, map['children'], buildContext, listener);
}
return textSpan;
}
void parseChildren(
TextSpan textSpan, List<dynamic> childrenSpan, BuildContext buildContext, MethodListener? listener) {
for (var childmap in childrenSpan) {
textSpan.children!.add(parse(childmap, buildContext, listener));
}
}
}
import 'package:widgetparser/widgetparser.dart';
import 'package:flutter/widgets.dart';
//Creates a box that will become as large as its parent allows.
class ExpandedSizedBoxWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return SizedBox.expand(
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "ExpandedSizedBox";
@override
Type get widgetType => UnimplementedType;
}
class SizedBoxWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return SizedBox(
width: map["width"],
height: map["height"],
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener),
);
}
@override
String get widgetName => "SizedBox";
@override
Type get widgetType => SizedBox;
}
class UnimplementedType {}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class PositionedWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Positioned(
child: WidgetParserBuilder.buildFromMap(
map["child"], buildContext, listener)!,
top: map.containsKey("top") ? map["top"]?.toDouble() : null,
right: map.containsKey("right") ? map["right"]?.toDouble() : null,
bottom: map.containsKey("bottom") ? map["bottom"]?.toDouble() : null,
left: map.containsKey("left") ? map["left"]?.toDouble() : null,
width: map.containsKey("width") ? map["width"]?.toDouble() : null,
height: map.containsKey("height") ? map["height"]?.toDouble() : null,
);
}
@override
String get widgetName => "Positioned";
@override
Type get widgetType => Positioned;
}
class StackWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Stack(
alignment: map.containsKey("alignment")
? parseAlignment(map["alignment"])
: AlignmentDirectional.topStart,
textDirection: map.containsKey("textDirection")
? parseTextDirection(map["textDirection"])
: null,
fit: map.containsKey("fit") ? parseStackFit(map["fit"])! : StackFit.loose,
clipBehavior: map.containsKey("clipBehavior")
? parseClip(map["clipBehavior"])!
: Clip.hardEdge,
children: WidgetParserBuilder.buildWidgets(
map['children'], buildContext, listener),
);
}
@override
String get widgetName => "Stack";
@override
Type get widgetType => Stack;
}
import 'package:flutter/gestures.dart';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
// import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
class TextWidgetParser implements WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
String? data = map['data'];
String? textAlignString = map['textAlign'];
String? overflow = map['overflow'];
int? maxLines = map['maxLines'];
String? semanticsLabel = map['semanticsLabel'];
bool? softWrap = map['softWrap'];
String? textDirectionString = map['textDirection'];
double? textScaleFactor = map['textScaleFactor']?.toDouble();
var textSpan;
var textSpanParser = TextSpanParser();
if (map.containsKey("textSpan")) {
textSpan = textSpanParser.parse(map['textSpan'], buildContext, listener);
}
if (textSpan == null) {
return Text(
data!,
textAlign: parseTextAlign(textAlignString),
overflow: parseTextOverflow(overflow),
maxLines: maxLines,
semanticsLabel: semanticsLabel,
softWrap: softWrap,
textDirection: parseTextDirection(textDirectionString),
style: map.containsKey('style') ? parseTextStyle(map['style']) : null,
textScaleFactor: textScaleFactor,
);
} else {
return Text.rich(
textSpan,
textAlign: parseTextAlign(textAlignString),
overflow: parseTextOverflow(overflow),
maxLines: maxLines,
semanticsLabel: semanticsLabel,
softWrap: softWrap,
textDirection: parseTextDirection(textDirectionString),
style: map.containsKey('style') ? parseTextStyle(map['style']) : null,
textScaleFactor: textScaleFactor,
);
}
}
@override
String get widgetName => "Text";
@override
Type get widgetType => Text;
}
class TextSpanParser {
TextSpan parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
Map<String, String>? recognizer = map.containsKey("recognizer") ? map['recognizer'] : null;
var textSpan = TextSpan(
text: map['text'],
style: parseTextStyle(map['style']),
recognizer: TapGestureRecognizer()
..onTap = () => listener!.run(buildContext, recognizer),
children: []);
if (map.containsKey('children')) {
parseChildren(textSpan, map['children'], buildContext, listener);
}
return textSpan;
}
void parseChildren(
TextSpan textSpan, List<dynamic> childrenSpan, BuildContext buildContext, MethodListener? listener) {
for (var childmap in childrenSpan) {
textSpan.children!.add(parse(childmap, buildContext, listener));
}
}
}
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:flutter/widgets.dart';
class WrapWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return Wrap(
direction: map.containsKey("direction")
? parseAxis(map["direction"])
: Axis.horizontal,
alignment: map.containsKey("alignment")
? parseWrapAlignment(map["alignment"])
: WrapAlignment.start,
spacing: map.containsKey("spacing") ? map["spacing"]?.toDouble() : 0.0,
runAlignment: map.containsKey("runAlignment")
? parseWrapAlignment(map["runAlignment"])
: WrapAlignment.start,
runSpacing:
map.containsKey("runSpacing") ? map["runSpacing"]?.toDouble() : 0.0,
crossAxisAlignment: map.containsKey("crossAxisAlignment")
? parseWrapCrossAlignment(map["crossAxisAlignment"])
: WrapCrossAlignment.start,
textDirection: map.containsKey("textDirection")
? parseTextDirection(map["textDirection"])
: null,
verticalDirection: map.containsKey("verticalDirection")
? parseVerticalDirection(map["verticalDirection"])
: VerticalDirection.down,
children: WidgetParserBuilder.buildWidgets(
map['children'], buildContext, listener)
);
}
@override
String get widgetName => "Wrap";
@override
Type get widgetType => Wrap;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
import 'package:flutter/widgets.dart';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:llswidget/llswidget.dart';
class LLSButtonWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return LLSButton(
key: map.containsKey("key") ? createKeyForWidget(map["key"]) : null,
onPressed: map.containsKey('onPressed') ? () => listener!.run(buildContext, map['onPressed']) : null,
onHighlightChanged: map.containsKey('onHighlightChanged') ? (bool value) => listener!.run(buildContext, map['onHighlightChanged']) : null,
textStyle: map.containsKey('textStyle') ? parseTextStyle(map['style']) : null,
boxShadow: map.containsKey('boxShadow') ? parseBoxShadow(map['boxShadow']) : null,
buttonBoxShadow: map.containsKey('buttonBoxShadow') ? map['buttonBoxShadow'] : null,
focusColor: map.containsKey('focusColor') ? parseHexColor(map['focusColor']) : null,
hoverColor: map.containsKey('hoverColor') ? parseHexColor(map['hoverColor']) : null,
highlightColor: map.containsKey('highlightColor') ? parseHexColor(map['highlightColor']) : null,
splashColor: map.containsKey('splashColor') ? parseHexColor(map['splashColor']) : null,
elevation: map.containsKey('elevation') ? map['elevation'] : 0.0,
focusElevation: map.containsKey('focusElevation') ? map['focusElevation'] : 4.0,
hoverElevation: map.containsKey('hoverElevation') ? map['hoverElevation'] : 4.0,
highlightElevation: map.containsKey('highlightElevation') ? map['highlightElevation'] : 1.0,
disabledElevation: map.containsKey('disabledElevation') ? map['disabledElevation'] : 0.0,
padding: map.containsKey('padding') ? parseEdgeInsetsGeometry(map['padding'])! : EdgeInsets.symmetric(horizontal: 8),
constraints: map.containsKey('constraints') ? parseBoxConstraints(map['constraints']) : null,
clipBehavior: parseClipBehavior(map['clipBehavior']),
focusNode: map.containsKey('focusNode') ? map['focusNode'] : null,
autofocus: map.containsKey('autofocus') ? map['autofocus'] as bool : false,
child: map.containsKey('child') ? WidgetParserBuilder.buildFromMap(map["child"], buildContext, listener) : SizedBox(),
type: map.containsKey('type') ? parseLLSButtonType(map['type']) : LLSButtonType.solid,
shape: map.containsKey('shape') ? parseLLSButtonShape(map['shape']) : LLSButtonShape.standard,
color: map.containsKey('color') ? parseHexColor(map['color'])! : LLSColors.PRIMARY,
textColor: map.containsKey('textColor') ? parseHexColor(map['textColor'])! : LLSColors.DARK,
position: map.containsKey('position') ? parseLLSPosition(map['position']) : LLSPosition.start,
size: map.containsKey('size') ? parseLLSSize(map['size']) : LLSSize.MEDIUM,
borderSide: map.containsKey('borderSide') ? parseBorderSide(map['borderSide']) : null,
text: map.containsKey('text') ? map['text'] : '',
icon: map.containsKey('icon') ? WidgetParserBuilder.buildFromMap(map['icon'], buildContext, listener) : null,
blockButton: map.containsKey('blockButton') ? map['blockButton'] as bool : null,
fullWidthButton: map.containsKey('fullWidthButton') ? map['fullWidthButton'] as bool : null,
onLongPress: map.containsKey('onLongPress') ? () => listener!.run(buildContext, map['onLongPress']) : null,
disabledColor: map.containsKey('disabledColor') ? parseHexColor(map['disabledColor']) : null,
disabledTextColor: map.containsKey('disabledTextColor') ? parseHexColor(map['disabledTextColor']) : null,
widthBorderOutline: map.containsKey('widthBorderOutline') ? map['widthBorderOutline'] : null,
);
}
@override
String get widgetName => "LLSButton";
@override
Type get widgetType => LLSButton;
}
import 'package:flutter/widgets.dart';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:llswidget/llswidget.dart';
class LLSCardWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
EdgeInsets? margin = parseEdgeInsetsGeometry(map['margin']) as EdgeInsets;
return LLSCard(
key: map.containsKey('key') ? createKeyForWidget(map['key']) : null,
color: map.containsKey('color') ? parseHexColor(map['color'])! : LLSColors.WHITE,
elevation: map.containsKey('elevation') ? map['elevation'] : 0.0,
borderOnForeground: map['borderOnForeground'],
padding: map.containsKey('padding') ? parseEdgeInsetsGeometry(map['padding']) as EdgeInsets : EdgeInsets.symmetric(horizontal: 12, vertical: 8),
margin: margin,
clipBehavior: parseClipBehavior(map['clipBehavior']),
semanticContainer: map.containsKey('autofocus') ? map['autofocus'] as bool : null,
title: map.containsKey('title') ? WidgetParserBuilder.buildFromMap(map['title'], buildContext, listener) as LLSListTile : LLSListTile(),
content: map.containsKey('content') ? WidgetParserBuilder.buildFromMap(map['content'], buildContext, listener) : SizedBox(),
image: map.containsKey('image') ? WidgetParserBuilder.buildFromMap(map['image'], buildContext, listener) as Image : null,
showImage: map.containsKey('showImage') ? map['showImage'] as bool : false,
showOverlayImage: map.containsKey('showOverlayImage') ? map['showOverlayImage'] as bool : false,
// buttonBar: ,
imageOverlay: map.containsKey('imageOverlay') ? parseImageProvider(map['imageOverlay']) : null,
titlePosition: map.containsKey('titlePosition') ? parseLLSPosition(map['titlePosition']) : null,
border: map.containsKey('border') ? parseBorder(map['border']) : null,
boxFit: map.containsKey('boxFit') ? parseBoxFit(map['boxFit']) : null,
height: map.containsKey('height') ? map['height'] : 0.0,
);
}
@override
String get widgetName => "LLSCard";
@override
Type get widgetType => LLSCard;
}
\ No newline at end of file
import 'package:flutter/widgets.dart';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:llswidget/llswidget.dart';
class LLSLabelWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return LLSLabel(
key: map.containsKey('key') ? createKeyForWidget(map['key']) : null,
type: parseLLSLabelType(map['type']),
child: map.containsKey('child') ? WidgetParserBuilder.buildFromMap(map['child'], buildContext, listener) : null,
text: map.containsKey('text') ? map['text'] : '',
icon: map.containsKey('icon') ? WidgetParserBuilder.buildFromMap(map['icon'], buildContext, listener) : null,
dividerBorderRadius: map.containsKey('dividerBorderRadius') ? parseBorderRadius(map['dividerBorderRadius']) : null,
textColor: map.containsKey('textColor') ? parseHexColor(map['textColor'])! : LLSColors.DARK,
dividerAlignment: map.containsKey('dividerAlignment') ? parseAlignment(map['dividerAlignment']) : null,
dividerColor: map.containsKey('dividerColor') ? parseHexColor(map['dividerColor'])! : LLSColors.LIGHT,
showDivider: map['showDivider'] as bool,
dividerWidth: map.containsKey('dividerWidth') ? map['dividerWidth'] : null,
backgroundImage: map.containsKey('backgroundImage') ? parseImageProvider(map['backgroundImage']) : null
);
}
@override
String get widgetName => "LLSLabel";
@override
Type get widgetType => LLSLabel;
}
\ No newline at end of file
import 'package:flutter/widgets.dart';
import 'package:widgetparser/widgetparser.dart';
import 'package:widgetparser/src/utils.dart';
import 'package:llswidget/llswidget.dart';
class LLSListTileWidgetParser extends WidgetParser {
@override
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener) {
return LLSListTile(
key: map.containsKey('key') ? createKeyForWidget(map['key']) : null,
titleText: map.containsKey('titleText') ? map['titleText'] : null,
subTitleText: map.containsKey('subTitleText') ? map['subTitleText'] : null,
color: map.containsKey('color') ? parseHexColor(map['color'])! : LLSColors.WHITE,
avatar: map.containsKey('avatar') ? WidgetParserBuilder.buildFromMap(map['avatar'], buildContext, listener) : null,
title: map.containsKey('title') ? WidgetParserBuilder.buildFromMap(map['title'], buildContext, listener) : null,
subTitle: map.containsKey('subTitle') ? WidgetParserBuilder.buildFromMap(map['subTitle'], buildContext, listener) : null,
description: map.containsKey('description') ? WidgetParserBuilder.buildFromMap(map['description'], buildContext, listener) : null,
icon: map.containsKey('icon') ? WidgetParserBuilder.buildFromMap(map['icon'], buildContext, listener) : null,
padding: map.containsKey('padding') ? parseEdgeInsetsGeometry(map['padding']) as EdgeInsets : EdgeInsets.all(8),
margin: map.containsKey('margin') ? parseEdgeInsetsGeometry(map['margin']) as EdgeInsets : EdgeInsets.symmetric(vertical: 8, horizontal: 16),
enabled: map.containsKey('enabled') ? map['enabled'] as bool : true,
onTap: map.containsKey('onTap') ? () => listener!.run(buildContext, map['onTap']) : null,
onLongPress: map.containsKey('onLongPress') ? () => listener!.run(buildContext, map['onLongPress']) : null,
selected: map.containsKey('selected') ? map['selected'] : false,
focusColor: map.containsKey('focusColor') ? parseHexColor(map['focusColor'])! : LLSColors.PRIMARY,
hoverColor: map.containsKey('hoverColor') ? parseHexColor(map['hoverColor'])! : LLSColors.PRIMARY,
focusNode: map.containsKey('focusNode') ? map['focusNode'] : null,
autofocus: map.containsKey('autofocus') ? map['autofocus'] as bool : false
);
}
@override
String get widgetName => "LLSListTile";
@override
Type get widgetType => LLSListTile;
}
\ No newline at end of file
library widgetparser;
// package Widget Parser
// author Rizal Hermawan <rizal.hermawan@locatorlogic.com>
import 'dart:convert';
import 'package:flutter/widgets.dart';
//exports flutter widget parser
import 'package:widgetparser/src/flutter_widget/align_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/appbar_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/aspectratio_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/baseline_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/center_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/container_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/dropcaptext_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/expanded_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/fittedbox_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/icon_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/image_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/indexedstack_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/limitedbox_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/listtile_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/offstage_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/opacity_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/padding_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/placeholder_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/row_column_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/safearea_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/scaffold_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/selectabletext_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/sizedbox_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/stack_positioned_widgets_parser.dart';
import 'package:widgetparser/src/flutter_widget/text_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/wrap_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/listview_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/pageview_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/cliprrect_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/overflowbox_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/inkwell_widget_parser.dart';
import 'package:widgetparser/src/flutter_widget/gesturedetector_widget_parser.dart';
//exports llswidget parser
import 'package:widgetparser/src/llswidget/llsbutton_widget_parser.dart';
import 'package:widgetparser/src/llswidget/llslisttile_widget_parser.dart';
import 'package:widgetparser/src/llswidget/llscard_widget_parser.dart';
import 'package:widgetparser/src/llswidget/llslabel_widget_parser.dart';
class WidgetParserBuilder {
static final _parsers = [
ContainerWidgetParser(),
TextWidgetParser(),
SelectableTextWidgetParser(),
RowWidgetParser(),
ColumnWidgetParser(),
AssetImageWidgetParser(),
NetworkImageWidgetParser(),
PlaceholderWidgetParser(),
ListViewWidgetParser(),
PageViewWidgetParser(),
ExpandedWidgetParser(),
PaddingWidgetParser(),
CenterWidgetParser(),
AlignWidgetParser(),
AspectRatioWidgetParser(),
FittedBoxWidgetParser(),
BaselineWidgetParser(),
StackWidgetParser(),
PositionedWidgetParser(),
IndexedStackWidgetParser(),
ExpandedSizedBoxWidgetParser(),
SizedBoxWidgetParser(),
OpacityWidgetParser(),
WrapWidgetParser(),
DropCapTextParser(),
IconWidgetParser(),
ClipRRectWidgetParser(),
SafeAreaWidgetParser(),
ListTileWidgetParser(),
ScaffoldWidgetParser(),
AppBarWidgetParser(),
LimitedBoxWidgetParser(),
OffstageWidgetParser(),
OverflowBoxWidgetParser(),
InkWellWidgetParser(),
GestureDetectorWidgetParser(),
//llswidget
LLSButtonWidgetParser(),
LLSListTileWidgetParser(),
LLSCardWidgetParser(),
LLSLabelWidgetParser()
];
static final _widgetNameParserMap = <String, WidgetParser>{};
static bool _defaultParserInited = false;
static void initDefaultParsersIfNess() {
if (!_defaultParserInited) {
for (var parser in _parsers) {
_widgetNameParserMap[parser.widgetName] = parser;
}
_defaultParserInited = true;
}
}
static Widget? build(String json, BuildContext buildContext, MethodListener? listener) {
initDefaultParsersIfNess();
var map = jsonDecode(json);
MethodListener _listener = listener == null ? new MethodListener() : listener;
var widget = buildFromMap(map, buildContext, _listener);
return widget;
}
static Widget? buildFromMap(Map<String, dynamic>? map, BuildContext buildContext, MethodListener? listener) {
initDefaultParsersIfNess();
if (map == null) {
return null;
}
String? widgetName = map['widget'];
var parser = _widgetNameParserMap[widgetName];
if (parser != null) {
try {
return parser.parse(map, buildContext, listener);
} catch (e) {
print(e.toString());
return null;
}
} else {
print("please initialize the $widgetName widget to the WidgetBuilderParser.");
}
return null;
}
static List<Widget> buildWidgets(List<dynamic> values, BuildContext buildContext, MethodListener? listener) {
initDefaultParsersIfNess();
List<Widget> rt = [];
for (var value in values) {
var buildFromMap2 = buildFromMap(value, buildContext, listener);
if(buildFromMap2!=null) {
rt.add(buildFromMap2);
}
}
return rt;
}
}
abstract class WidgetParser {
Widget parse(Map<String, dynamic> map, BuildContext buildContext, MethodListener? listener);
String get widgetName;
Type get widgetType;
}
class MethodListener {
void run(BuildContext context, Map<String, dynamic>? event) {
if (isFunctionNameExist(event)) {
print("event: ${event!['func_name']}");
} else {
print("receiver event: ${event.toString()}");
}
}
bool isFunctionNameExist(Map<String, dynamic>? event) {
return event!.containsKey('func_name');
}
bool isParametersExist(Map<String, dynamic>? event) {
return event!.containsKey('parameters');
}
}
\ No newline at end of file
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.5.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
font_awesome_flutter:
dependency: "direct main"
description:
name: font_awesome_flutter
url: "https://pub.dartlang.org"
source: hosted
version: "9.0.0"
llswidget:
dependency: "direct main"
description:
path: "../llswidget"
relative: true
source: path
version: "0.0.1"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.10"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.10.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.19"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
sdks:
dart: ">=2.12.0 <3.0.0"
flutter: ">=1.17.0"
name: widgetparser
description: this package to dynamically render widgets from JSON
version: 0.0.1
author: Rizal Hermawan
homepage: https://locatorlogic.com
publish_to: 'none'
environment:
sdk: ">=2.12.0 <3.0.0"
flutter: ">=1.17.0"
dependencies:
flutter:
sdk: flutter
font_awesome_flutter: ^9.0.0
llswidget:
path: ../llswidget
cupertino_icons: ^1.0.2
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# To add assets to your package, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
#
# For details regarding assets in packages, see
# https://flutter.dev/assets-and-images/#from-packages
#
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# To add custom fonts to your package, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts in packages, see
# https://flutter.dev/custom-fonts/#from-packages
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment