flutterjson-serialization

Flutter JSON serialization and Setters


In flutter I have a simple JSON serializable class for a location with just an ID and a name like this:

import 'package:json_annotation/json_annotation.dart';

part 'locations_data.g.dart';

@JsonSerializable()
class Location {
  final int _id;
  String _name;

  Location({
    required int id,
    required String name,
  })  : _id = id,
        _name = name;

  @JsonKey(name: 'LocationId', required: true)
  int get id => _id;

  @JsonKey(name: 'LocationName', required: true)
  String get name => _name;

  factory Location.fromJson(Map<String, dynamic> json) =>
      _$LocationFromJson(json);

  Map<String, dynamic> toJson() => _$LocationToJson(this);

  // Why does json_serializable throw a warning?
  set newName(String name) => _name = name;
}

when I compile the locations_data.g.dart file it says:

[...]
[WARNING] json_serializable on lib/src/locations/locations_data.dart:
Setters are ignored: Location.newName
[...]

I can not find much about this except this GitHub issue

Why does json_serializable throw a warning?


Solution

  • json_serializable doesn't know what it's supposed to do with a setter that has no getter. How is it supposed to represent that in the generated JSON? It can't, so it ignores it and generates a warning.

    Having a setter with no getter (or in this case, a setter with a different name from its getter) is a bad idea anyway, and the Dart analyzer would generate a warning during static analysis if you have the avoid_setters_without_getters lint enabled.