{"id":15008620,"url":"https://github.com/ahm3tcelik/dart_writer","last_synced_at":"2025-06-30T08:06:37.971Z","repository":{"id":45839661,"uuid":"357534532","full_name":"ahm3tcelik/dart_writer","owner":"ahm3tcelik","description":"Provides API to generate Dart source code","archived":false,"fork":false,"pushed_at":"2022-07-17T12:54:47.000Z","size":51,"stargazers_count":12,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-07T03:37:56.640Z","etag":null,"topics":["code-generation","dart","dart-library","dart-packages","flutter","flutter-packages","flutter-ui-generation"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/dart_writer","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ahm3tcelik.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-04-13T11:53:04.000Z","updated_at":"2023-08-18T15:31:39.000Z","dependencies_parsed_at":"2022-09-13T08:31:42.489Z","dependency_job_id":null,"html_url":"https://github.com/ahm3tcelik/dart_writer","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ahm3tcelik/dart_writer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahm3tcelik%2Fdart_writer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahm3tcelik%2Fdart_writer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahm3tcelik%2Fdart_writer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahm3tcelik%2Fdart_writer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ahm3tcelik","download_url":"https://codeload.github.com/ahm3tcelik/dart_writer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ahm3tcelik%2Fdart_writer/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262736599,"owners_count":23356146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-generation","dart","dart-library","dart-packages","flutter","flutter-packages","flutter-ui-generation"],"created_at":"2024-09-24T19:19:43.763Z","updated_at":"2025-06-30T08:06:37.948Z","avatar_url":"https://github.com/ahm3tcelik.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DartWriter\n\n`DartWriter` provides API to generate Dart source code. It can make your job easier while developing flutter/dart tools. You can also generate Flutter UI code.\n\n### Hello World Example\n\n```dart\nvar context = EditorContext(enableDartFormatter: true);\nvar code = Method(\n  name: 'main',\n  returnType: 'void',\n  statements: [\n    Call('print',\n      argument: Argument([\n        ArgumentItem(\"'Hello World!'\")\n      ])\n    ),\n    Return('0')\n  ]\n);\nprint(context.build([code]));\n```\nGenerated as below:\n```dart\nvoid main() {\n  print('Hello World!');\n  return 0;\n}\n```\n\n### Flutter Stateless Widget Example\nInput\n```json\n{\n  \"as\": \"Scaffold\",\n  \"appBar\": {\n    \"as\": \"AppBar\",\n    \"title\": {\n      \"as\": \"Text\",\n      \"params\": [\n        \"'Ahmet'\"\n      ]\n    },\n    \"centerTitle\": \"false\"\n  },\n  \"body\": {\n    \"as\": \"Center\",\n    \"child\": {\n      \"as\": \"Row\",\n      \"children\": [\n        {\n          \"as\": \"Icon\",\n          \"params\": [\"Icons.add\"],\n          \"color\": \"Colors.red\"\n        },\n        {\n          \"as\": \"Text\",\n          \"params\": [\"'Ahmet'\"],\n          \"textAlign\": \"TextAlign.center\"\n        }\n      ]\n    }\n  }\n}\n```\nCode:\n```dart\nvar context = EditorContext(enableDartFormatter: true);\nvar dartHelper = DartHelper.instance;\nMap map = jsonDecode(json);\n\nvar homePage = Class('HomePage',\n  baseClass: 'StatelessWidget',\n  methods: [\n    Annotation('override'),\n    Method(\n      name: 'build',\n      returnType: 'Widget',\n      param: Parameter([\n        ParameterItem('BuildContext context'),\n      ]),\n      statements: [ Return(dartHelper.getCodeFromMap(map)) ]\n    )\n  ]\n);\n\nprint(context.build([\n  Import('package:flutter/material.dart'),\n  homePage\n]));\n```\nGenerated ui code:\n```dart\nimport 'package:flutter/material.dart';\n\nclass HomePage extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n        appBar: AppBar(title: Text('Ahmet'), centerTitle: false),\n        body: Center(\n            child: Row(children: [\n          Icon(Icons.add, color: Colors.red),\n          Text('Ahmet', textAlign: TextAlign.center)\n        ])));\n  }\n}\n```\n\n## Installation\n\nIn the `pubspec.yaml` of your **Flutter** / **Dart** project, add the following dependency:\n\n```yaml\ndependencies:\n  ...\n  dart_writer: any\n```\n\nIn your library file add the following import:\n\n```dart\nimport 'package:dart_writer/dart_writer.dart';\n```\n\n## API Documentation\n\n- [Documentation Guideline](#documentation-guideline)\n  - [Conditions](#conditions)\n    - [If](#conditions)\n    - [Else If](#conditions)\n    - [Else](#conditions) \n  - [Loops](#loops)\n    - [For](#loops)\n    - [Foreach](#loops)\n    - [While](#loops)\n  - [Statements](#statements)\n    - [Assignment](#statements)\n    - [Call](#statements)\n    - [Return](#statements)\n  - [OOP Concepts](#oop-concepts)\n    - [Class](#class)\n      - [Attributes](#attributes)\n      - [Constructors](#constructors)\n      - [Methods](#methods)\n        - [Method](#method) \n        - [Getter](#getter)\n        - [Setter](#setter)\n    - [Interface](#interface)\n  - Other(#other)\n    - [Annotations](#other)\n    - [Import](#other)\n    - [Enum](#other)\n    - [Argument](#other)\n    - [Parameter](#other)\n  \n### Conditions\n```dart\nMethod(\n  name: 'getMin',\n  returnType: 'int',\n  statements: [\n    Assign('var num1', '5'),\n    Assign('var num2', '10'),\n    If(condition: 'num1 \u003c num2', statements: [Return('num1')]),\n    ElseIf(condition: 'num1 == num2', statements: [Return('num1')]),\n    Else(statements: [Return('num2')])\n  ]  \n)\n```\nGenerated code:\n```dart\nint getMin() {\n  var num1 = 5;\n  var num2 = 10;\n  if (num1 \u003c num2) {\n    return num1;\n  } else if (num1 == num2) {\n    return num1;\n  } else {\n    return num2;\n  }\n}\n```\n\n### Loops\n```dart\nMethod(\n  name: 'loops',\n  returnType: 'void',\n  statements: [\n    For('i = 0', 'i \u003c 5', 'i++',\n      statements: [RawCode('print(i);')]\n    ),\n    ForEach('item', 'userList',\n      statements: [\n        Return('UserCard(item)')\n      ]\n    ),\n    While('i \u003c 5',\n      statements: [ RawCode('print(i);'), Assign('i', 'i + 1')]\n    )\n  ]  \n)\n```\nGenerated code:\n```dart\nvoid loops() {\n  for (var i = 0; i \u003c 5; i++) {\n    print(i);\n  }\n  for (var item in userList) { \n    return UserCard(item);     \n  }\n  while (i \u003c 5) {\n    print(i);\n    i = i + 1;\n  }\n}\n```\n### Statements\n```dart\nMethod(name: 'do', returnType: 'int',\n  statements: [\n    Assign('var i', '5'),\n    Assign('var name', Call('getName')),\n    Return('i')\n  ] \n)\n```\nGenerated code:\n```dart\nint do() {\n  var i = 5;\n  var name = getName();\n  return i;\n}\n```\n\n### OOP Concepts\n\n#### Class\n| Parameter      | Description | Output |\n| ----------- | ----------- | ----------- |\n| String className      | Class Name | `class Bird` |\n| bool isAbstract?      | Generating abstract class if value is true | `abstract class Animal` or `class Animal` |\n| List\\\u003cConstructors\\\u003e?   | more than one constructor can be defined | `Singleton._init()` , `Singleton({this.a}) : super(a)` |\n| String? baseClass     | extends to base class | `class Bird extends Animal` |\n| List\\\u003cString\\\u003e? mixins  | indicates the use of mixins | `class Bird with Feather, Walk` |\n| List\\\u003cString\\\u003e? interfaces  | implements interface | `class Bird implements Flyable, Crowable` |\n| List\\\u003cAttribute\\\u003e? attributes;  | attributes of class | `final String name;` |\n| List\\\u003cIExpression\\\u003e? methods;  | all methods of class such as Method, Getters, Settters | `final String name;` |\n\n#### Constructor\n| Parameter      | Description | Output |\n| ----------- | ----------- | ----------- |\n| String className      | Class Name | `class Singleton` |\n| String consturctorName? | if value is null Default constructor. if not value, named constructor.  | `Singleton._init()` , `Singleton({this.a})` |\n| Parameter? param  | Constructor parameters | `Singleton({required this.a})`, `Singleton(this.a, {this.b})` |\n| String? superArgument     | call constructor of base class | `Singleton(this.a) : super(a)` |\n| String? modifier     | modifier of constructor such as `factory` | `factory Singleton()` |\n\n#### Attribute\n| Parameter      | Description | Output |\n| ----------- | ----------- | ----------- |\n| String name | Attribute Name | `name` |\n| String type | Attribute type  | `String name` |\n| String? modifiers | Attribute modifiers | `final String name` |\n| String? value     | initialize value to attribute | `final String name = 'Ahmet'` |\n\n### Methods\n\n#### Method\n| Parameter      | Description | Output |\n| ----------- | ----------- | ----------- |\n| String name      | Method Name | `walk` |\n| String returnType? | Return type  | `void walk` |\n| Parameter? param  | Method parameters | `void walk({required int step})` |\n| bool? isAsync  | is async method? | `void walk({required int step}) async {}` |\n| String? modifier  | Modifier of method such as `static` | `static void walk` |\n| List\\\u003cIExpression\\\u003e? statements     | body of method. | `Code here...` |\n\n#### Getter\n| Parameter      | Description | Output |\n| ----------- | ----------- | ----------- |\n| String name      | Getter Name | `get walk` |\n| String returnType? | Return type  | `void get walk` |\n| String? modifier  | Modifier of method such as `static` | `static void get name` |\n| List\\\u003cIExpression\\\u003e? statements     | body of method. | `Code here...` |\n\n#### Setter\n| Parameter      | Description | Output |\n| ----------- | ----------- | ----------- |\n| String name      | Getter Name | `set name` |\n| String param? | Return type  | `set name(String name)` |\n| List\\\u003cIExpression\\\u003e? statements     | body of method. | `Code here...` |\n\nExample Class Code:\n\n```dart\nClass(\n  'Bird',\n  baseClass: 'Animal',\n  interfaces: ['Flyable', 'Crowable'],\n  mixins: ['Feather', 'Walk'],\n  attributes: \u003cAttribute\u003e [\n    Attribute(modifiers: 'final', type: 'String', name: 'name'),\n  ],\n  constructors: \u003cConstructor\u003e [\n    Constructor(\n      className: 'Bird',\n      constructorName: 'fromName',\n      param: Parameter([ParameterItem('this.name', isRequired: true, isNamed: true)]),\n        superArgument: Argument([ArgumentItem('name')])\n    ),\n  ],\n  methods: [\n    Method(\n      name: 'onFly',\n      returnType: 'double',\n      param: Parameter([ParameterItem('double height')]),\n      statements: [Return('height * 2')]\n    ),\n  ]\n);\n```\nGenerated code:\n```dart\nclass Bird extends Animal with Feather, Walk implements Flyable, Crowable {   \n  final String name;\n\n  Bird.fromName({required this.name}) : super(name);\n\n  double onFly(double height) {        \n    return height * 2;\n  }\n}\n```\n\n### Interface\n| Parameter      | Description | Output |\n| ----------- | ----------- | ----------- |\n| String name      | Interface Name | `interface Flyable` |\n| String? baseClass | extends class  | `interface Flyable extends Breathable` |\n| List\\\u003cIExpression\\\u003e? prototypes   | abstract methods of interface | `void doFly();` |\n\nExample Interface\n```dart\nInterface('Flyable',\n    baseClass: 'Breathable',\n    prototypes: [\n      Method(name: 'doFly', returnType: 'void')\n    ]\n)\n``` \nGenerated code:\n```dart\nabstract class Flyable extends Breathable {\n  void doFly();\n}\n```\n### Other\n\n| Expression  | Example Code | Output |\n| ----------- | ----------- | ----------- |\n| Annotation  | Annotation('override') | `@override` |\n| Import      | Import('package:dart_writer/dart_writer.dart', as: 'writer') | `import 'package:dart_writer/dart_writer.dart' as writer;` |\n| Enum  | Enum('Roles', enums: ['USER', 'ADMIN', 'DEVELOPER']) | `enum Roles { USER, ADMIN, DEVELOPER }` |\n| Paramter | Parameter([ParameterItem('String name', isNamed: true, isRequired: true)]) | `{required String name}` |\n| Argument | Argument([ArgumentItem(\"'Star'\", name:'surname']) | `surname: 'Star'` |\n| RawCode |  RawCode('var name = user?.name ?? \"'ahmet'\"') | `[Output]: var name = user?.name ?? 'ahmet'` |\n\n\n## TASK LIST\n- [ ] Unit Tests\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahm3tcelik%2Fdart_writer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fahm3tcelik%2Fdart_writer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fahm3tcelik%2Fdart_writer/lists"}