blob: 8271787384932cc42d6a96e94181ca8653a47b94 [file] [log] [blame]
import 'package:meta/meta.dart';
import 'package:mobx_codegen/src/template/store.dart';
import 'package:mobx_codegen/src/utils/non_private_name_extension.dart';
class ObservableTemplate {
ObservableTemplate({
required this.storeTemplate,
required this.atomName,
required this.type,
required this.name,
this.isReadOnly = false,
this.isPrivate = false,
});
final StoreTemplate storeTemplate;
final String atomName;
final String type;
final String name;
final bool isPrivate;
final bool isReadOnly;
/// Formats the `name` from `_foo_bar` to `foo_bar`
/// such that the getter gets public
@visibleForTesting
String get getterName {
if (isReadOnly) {
return name.nonPrivateName;
}
return name;
}
@override
String toString() => """
final $atomName = Atom(name: '${storeTemplate.parentTypeName}.$name');
${isReadOnly ? '' : '@override'}
$type get $getterName {
$atomName.reportRead();
return super.$name;
}
@override
set $name($type value) {
$atomName.reportWrite(value, super.$name, () {
super.$name = value;
});
}""";
}