Skip to content

Instantly share code, notes, and snippets.

@FilledStacks
Last active January 2, 2024 04:09
Show Gist options
  • Star 28 You must be signed in to star a gist
  • Fork 13 You must be signed in to fork a gist
  • Save FilledStacks/b57b77da10fdcb2d4d95a28de4a4ced4 to your computer and use it in GitHub Desktop.
Save FilledStacks/b57b77da10fdcb2d4d95a28de4a4ced4 to your computer and use it in GitHub Desktop.
Flutter / Stacked snippets for productivity
{
"Freezed model": {
"prefix": "frz",
"body": [
"@freezed",
"class ${1:${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}} with _$${1} {",
" factory ${1}({",
" required ${2:String id},",
" }) = _${1};",
"}"
],
"description": "Freezed model"
},
"Freezed model Json": {
"prefix": "frzjs",
"body": [
"@freezed",
"class ${1:${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}} with _$${1} {",
" factory ${1}({",
" required ${2:String id},",
" }) = _${1};",
"",
"factory ${1}.fromJson(Map<String, dynamic> json) => ",
"_$${1}FromJson(json);",
"}"
],
"description": "Freezed model with Json"
},
"Freezed New File model": {
"prefix": "frzn",
"body": [
"import 'package:freezed_annotation/freezed_annotation.dart';",
"",
"part '${TM_FILENAME_BASE/(.*)/${1:/lowercase}/g}.freezed.dart';",
"part '${TM_FILENAME_BASE/(.*)/${1:/lowercase}/g}.g.dart';",
"@freezed",
"class ${1:${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}} with _$${1} {",
" factory ${1}({",
" required ${2:String id},",
" }) = _${1};",
"",
"factory ${1}.fromJson(Map<String, dynamic> json) => ",
"_$${1}FromJson(json);",
"}"
],
"description": "Freezed model with Json"
},
"Stacked View": {
"prefix": "stkv",
"body": [
"import 'package:flutter/material.dart';",
"import 'package:stacked/stacked.dart';",
"",
"class ${1} extends StatelessWidget {",
" const ${1}({Key? super.key});",
"",
" @override",
" Widget build(BuildContext context) {",
" return ViewModelBuilder<${1}Model>.reactive(",
" builder: (context, model, child) => Scaffold(),",
" viewModelBuilder: () => ${1}Model(),",
" );",
" }",
"}"
],
"description": "Stacked View"
},
"Stacked BaseViewModel": {
"prefix": "stkbvm",
"body": [
"import 'package:stacked/stacked.dart';",
"",
"class ${1}Model extends BaseViewModel {}",
],
"description": "Stacked BaseViewModel"
},
"Mock Registration": {
"prefix": "testr",
"body": [
"Mock${1} getAndRegister${1}() {",
" _removeRegistrationIfExists<${1}>();",
" final service = Mock${1}();",
" locator.registerSingleton<${1}>(service);",
" return service;",
"}"
],
"description": "Creating a Mock Registration Function"
},
"Core Mock Registration": {
"prefix": "testrc",
"body": [
"Mock${1} getAndRegister${1}() {",
" _removeRegistrationIfExists<${1}>();",
" final service = Mock${1}();",
" coreLocator.registerSingleton<${1}>(service);",
" return service;",
"}"
],
"description": "Creating a Mock Registration for Core Locator"
},
"Main Test Suite Setup": {
"prefix": "testm",
"body": [
"void main() {",
" group('${1:${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}} -', (){",
"",
" });",
"}"
],
"description": "Main Test Suite Setup"
},
"Main Test Suite Setup with Services": {
"prefix": "testmr",
"body": [
"import 'package:flutter_test/flutter_test.dart';",
"",
"void main() {",
" group('${1:${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}} -', (){",
" setUp(() => registerServices());",
" tearDown(() => unregisterServices());",
" });",
"}"
],
"description": "Main Test Suite Setup with Services"
},
"Test Group Setup": {
"prefix": "testg",
"description": "Creates a Test group with a test",
"body": [
"group('${1} -', () {",
" test('${2}', () {",
"",
" });",
"});",
]
},
"Single Test Setup": {
"prefix": "tests",
"description": "Creates a single test",
"body": [
" test('${1}', () {",
"",
" });",
]
},
}
@manafire
Copy link

manafire commented Feb 22, 2021

I think the scope is only valid if you're adding the snippets globally. If you're adding them to dart.json they're already scoped and you'll get the warning (but they still work).

@FilledStacks
Copy link
Author

@manafire and @KDCinfo I've removed it.

@demolaf
Copy link

demolaf commented Apr 17, 2021

Is it possible to use this in Android studio?

@djkloop
Copy link

djkloop commented Aug 7, 2021

# line:36:  " const ${1}({Key key}) : super(key: key);",

# dart error 
# The parameter 'key' can't have a value of 'null' because of its type, but the implicit default value is 'null'.
# Try adding either an explicit non-'null' default value or the 'required' modifier.dart(missing_default_value_for_parameter)

 # Does it need to be changed? -> ({ Key? key })

@PeerLabs
Copy link

PeerLabs commented Oct 3, 2021

# line:36:  " const ${1}({Key key}) : super(key: key);",

# dart error 
# The parameter 'key' can't have a value of 'null' because of its type, but the implicit default value is 'null'.
# Try adding either an explicit non-'null' default value or the 'required' modifier.dart(missing_default_value_for_parameter)

 # Does it need to be changed? -> ({ Key? key })

I think so... also if you have linting option dart(prefer_const_constructors) enabled, you need to change ...

#line:42 => const Scaffold()

@ekamanelly
Copy link

awesome snippet!

@Edamijueda
Copy link

Please, how do I add this snippet in android studio?

@djoshua21
Copy link

How do I get this to work on IntelliJ IDEA? I think they handle snippets differently.

@Edamijueda
Copy link

Edamijueda commented Jan 17, 2022 via email

@MCarlomagno
Copy link

line:36:  " const ${1}({Key key}) : super(key: key);",

dart error 
The parameter 'key' can't have a value of 'null' because of its type, but the implicit default value is 'null'.
Try adding either an explicit non-'null' default value or the 'required' modifier.dart(missing_default_value_for_parameter)

Does it need to be changed? -> ({ Key? key })

I agree

@FilledStacks
Copy link
Author

Updated line:36: " const ${1}({Key key}) : super(key: key);", to ({ Key? key })

@mingsai
Copy link

mingsai commented Mar 13, 2022

@demolaf @djoshua21 @Edamijueda

How to convert these snippets for use in Android Studio

  1. Create a Dart scratch file (Cmd+Shift+N)
  2. Paste in the body of any snippet into the scratch file
  3. Remove the double quotes and extra commas (Cmd+R is the replace command)
  4. Replace the token placeholders with variable names (${1} => $placeholderName$)
  5. Highlight the transformed code, and go to Tools > Save as Live Template
  6. Add the abbreviation and description as seen in the dialog box below
  7. Make sure to add a default value to each variable used (see the edit variables button on live template dialog below)
  8. Once saved you can use the stkv template anywhere in the Flutter/Dart scope

For example (transform the body of stkv - line 31 from this)

"import 'package:flutter/material.dart';",
      "import 'package:stacked/stacked.dart';",
      "",
      "class ${1} extends StatelessWidget {",
      " const ${1}({Key? key}) : super(key: key);",
      "",
      " @override",
      " Widget build(BuildContext context) {",
      "   return ViewModelBuilder<${1}Model>.reactive(",
      "     builder: (context, model, child) => Scaffold(),",
      "     viewModelBuilder: () => ${1}Model(),",
      "   );",
      " }",
      "}"

The translated snippet should look something like this:

import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';

class $classname$ extends StatelessWidget {
 const $classname$({Key? key}) : super(key: key);

 @override
 Widget build(BuildContext context) {
   return ViewModelBuilder<$viewName$Model>.reactive(
     builder: (context, model, child) => Scaffold(),
     viewModelBuilder: () => $viewName$Model(),
   );
 }
}

Live Template Dialog box

Screen Shot 2022-03-13 at 10 49 40 AM

P.S.
Pretty sure this will work for IntelliJ as well since AS is built on top

References
Scratch Files
Android Studio Code Snippets
Editing live templates - IntelliJ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment