简体   繁体   中英

IntelliJ Live Template for dart named constructor: lists class' fields

I want to generate a custom named constructor in Dart. I have many dto class to implement and each should provide a named constructor like: ClassName.fromMap() .

For example for this class:

class Student {
  final String name;
  final int age;
}

The generated constructor should be:

Student.fromMap(Map<String, dynamic> map) :
    name = map['name'],
    age = map['age'];

How can I retrieve the list of the field of my current class as strings? Is that even possibile?
Of course I can have a variable number of fields.

My template looks like:

$CLASS$.fromMap(Map<String, dynamic> map) :
        $INITIALIZATION_LIST$

binding $CLASS$ to dartClassName() .

Now I'd like to bind $INITIALIZATION_LIST$ to something like:

getClassFieldList().forEach((fieldName) => "$fieldName = map['$fieldName']")

Can I achieve something like that?

There is no way to retrieve a list of Dart class fields using predefined live template functions. You can try developing your own template macro for this. See https://intellij-support.jetbrains.com/hc/en-us/community/posts/206201699-create-a-new-expression-for-a-live-template-for-actionscript for some hints. Existing live template functions implementations can be found at https://github.com/JetBrains/intellij-community/tree/master/platform/lang-impl/src/com/intellij/codeInsight/template/macro .

You can also try using Structural Search and Replace instead of live template

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM