Skip to content

Instantly share code, notes, and snippets.

@AhmetMelihSerter
Created November 14, 2021 10:42
Show Gist options
  • Save AhmetMelihSerter/3d6e3114008d1587a331521daebe905a to your computer and use it in GitHub Desktop.
Save AhmetMelihSerter/3d6e3114008d1587a331521daebe905a to your computer and use it in GitHub Desktop.
Flutter Architecture Snippets
{
"Architecture Model": {
"scope": "dart",
"prefix": "arc_model",
"body": [
"import 'package:json_annotation/json_annotation.dart';",
"import 'package:vexana/vexana.dart';",
"",
"part '$TM_FILENAME_BASE.g.dart';",
"",
"@JsonSerializable()",
"class ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} extends INetworkModel<${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}> {",
"",
"\t@override",
"\t${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} fromJson(Map<String, Object?> json) {",
"\t\treturn _\\$${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}FromJson(json);",
"\t}",
"",
"\t@override",
"\tMap<String, Object?> toJson() {",
"\t\treturn _\\$${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}ToJson(this);",
"\t}",
"}",
],
"description": "Architecture Create Model"
},
"Architecture View Model": {
"scope": "dart",
"prefix": "arc_view_model",
"body": [
"import 'package:flutter/material.dart';",
"import 'package:mobx/mobx.dart';",
"",
"import '$1../../core/base/view_model/base_view_model.dart';",
"import '../service/i_${TM_FILENAME_BASE/^([^_.]+).+/$1/g}_service.dart';",
"import '../service/${TM_FILENAME_BASE/^([^_.]+).+/$1/g}_service.dart';",
"",
"part '${TM_FILENAME_BASE}.g.dart';",
"",
"class ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} = _${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}Base with _\\$${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g};",
"",
"abstract class _${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}Base with Store, BaseViewModel {",
"\tlate I${TM_FILENAME_BASE/^([^_.]+).+/${1:/capitalize}/g}Service service;",
"",
"\t@override",
"\tvoid setContext(BuildContext context) {",
"\t\tthis.context = context;",
"\t}",
"",
"\t@override",
"\tvoid init() {",
"\t\tdebugPrint('${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} initialize');",
"\t\tservice = ${TM_FILENAME_BASE/^([^_.]+).+/${1:/capitalize}/g}Service(networkManager.networkManager);",
"\t}",
"}"
],
"description": "Architecture Create View Model"
},
"Architecture View": {
"scope": "dart",
"prefix": "arc_view",
"body": [
"import 'package:flutter/material.dart';",
"",
"import '$1../../../core/base/view/base_view.dart';",
"import '../view_model/${TM_FILENAME_BASE}_model.dart';",
"",
"class ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} extends StatelessWidget {",
"\tconst ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}({Key? key}) : super(key: key);",
"",
"\t@override",
"\tWidget build(BuildContext context) {",
"\t\treturn BaseView<${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}Model>(",
"\t\t\tviewModel: ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}Model(),",
"\t\t\tonModelReady: (${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}Model model) {",
"\t\t\t\tmodel.setContext(context);",
"\t\t\t\tmodel.init();",
"\t\t\t},",
"\t\t\tonPageBuilder: (BuildContext context, ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}Model viewModel) {",
"\t\t\t\treturn Scaffold(",
"\t\t\t\t\tappBar: AppBar(",
"\t\t\t\t\t\ttitle: Text(\"$2\"),",
"\t\t\t\t\t),",
"\t\t\t\t\tbody: Column(",
"\t\t\t\t\t\tchildren: [$3],",
"\t\t\t\t\t),",
"\t\t\t\t);",
"\t\t\t},",
"\t\t);",
"\t}",
"}"
],
"description": "Architecture Create View"
},
"Architecture Service": {
"scope": "dart",
"prefix": "arc_service",
"body": [
"import 'package:vexana/vexana.dart';",
"",
"import 'i_$TM_FILENAME_BASE.dart';",
"",
"class ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} extends I${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} {",
"\t${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}(INetworkManager manager) : super(manager);",
"}"
],
"description": "Architecture Create Service"
},
"Architecture IService": {
"prefix": "arc_service_i",
"body": [
"import 'package:vexana/vexana.dart';",
"",
"abstract class ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} {",
"\tfinal INetworkManager manager;",
"",
"\t${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}(this.manager);",
"}"
],
"description": "Architecture Create IService"
},
"Lazy Singleton": {
"scope": "dart",
"prefix": "lazy",
"body": [
"static ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}? _instance;",
"",
"static ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} get instance => _instance ??= ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}._internal();",
"",
"${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}._internal();",
],
"description": "Lazy Singleton"
},
"Eager Singleton": {
"scope": "dart",
"prefix": "eager",
"body": [
"static final ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} _instance = ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}._internal();",
"",
"static ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} get instance => _instance;",
"",
"${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}._internal();",
],
"description": "Eager Singleton"
},
"Lazy Singleton Class": {
"scope": "dart",
"prefix": "lazyClass",
"body": [
"class ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} {",
"\tstatic ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}? _instance;",
"",
"\tstatic ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} get instance => _instance ??= ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}._internal();",
"",
" ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}._internal();",
"}"
],
"description": "Lazy Singleton Class"
},
"Eager Singleton Class": {
"scope": "dart",
"prefix": "eagerClass",
"body": [
"class ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} {",
" static final ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} _instance = ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}._internal();",
" ",
" static ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g} get instance => _instance;",
" ",
" ${TM_FILENAME_BASE/$|(^|[_.])([^_.]+)/${2:/capitalize}/g}._internal();",
"}"
],
"description": "Eager Singleton Class"
},
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment