Обрезать требуемые переменные с помощью get set в Dart - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь передать несколько базовых c строк в пользовательскую модель, а затем при установке строки обрезаются, но моя проблема в том, если я передам переданные переменные пользователю @required и использую обычный способ использования set и get дают мне ошибку " Named optional parameters can't start with an underscore"

class User {
  String id;
  String lastName;
  String email;


  String _firstName;
  String get firstName => _firstName;
  set firstName(String name) => _firstName = name.trim();


  User({@required this.id, 
        @required this._firstName, // Error thrown here
        @required this.lastName, 
        @required this.email});
}

Если я сделаю следующее, я получу stati c ошибки анализа переменных set и get, говорящие The declaration '_firstName' isn't referenced. Try removing the declaration of '_firstName'

class User {
  String id;
  String lastName;
  String email;


  String firstName;
  String get _firstName => firstName; // Static analysis error here
  set _firstName(String name) => _firstName = name.trim(); // Static analysis error here


  User({@required this.id, 
        @required this.firstName, 
        @required this.lastName, 
        @required this.email});
}

Я использую get и выставил неправильно? Есть ли лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

РЕДАКТИРОВАТЬ: На мой взгляд, в вашем случае нет необходимости использовать геттеры и сеттеры (см. документация :

class User {
  String id;
  String lastName;
  String email;
  String firstName;

  User({
    @required this.id,
    @required this.firstName,
    @required this.lastName,
    @required this.email,
  }) {
    firstName = firstName.trim();
  }
}

Использование:

final user = User(
    id: '1',
    firstName: 'John',
    lastName: 'Doe',
    email: 'john@doe.com',
);
// set firstName :
user.firstName = 'Jane';
// get firstName :
print(user.firstName);
0 голосов
/ 28 апреля 2020

С помощью методов получения и установки вы можете получить или установить значение для локального / частного объекта.

Что-то вроде

String get firstname => _firstName;

set firstName => _firstName = name.trim();

Из кода, который вы показали, если все, что вы пытаетесь сделать, это вернуть усеченное значение, вы можете сделать это только с помощью getter. Ваш код в этом случае может выглядеть следующим образом.

class User {
  String id;
  String email;
  final String name;


  String get firstName => name.trim();
  String get lastName => name.trimLeft(); //some other calculation


  User({@required this.id, 
        @required this.name, 
        @required this.email});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...