Как сохранить обратную равновесие при рефакторинге имени параметра в опубликованном пакете Flutter/Dart?

Я участвую в моей первой библиотеке флаттера с открытым исходным кодом, и мне пришлось изменить некоторые имена переменных, чтобы сделать проект согласованным.

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

Я немного погуглил, но не могу найти учебник о том, как сделать это профессионально. Я вообще не могу найти информацию об псевдонимах.

Кто-нибудь может помочь мне помочь сообществу?

Редактировать: до и после конструктора

до:

CarouselSlider({
  @required
  this.items,
  this.viewportFraction: 0.8,
  this.initialPage: 0,
  this.aspectRatio: 16/9,
  this.height,
  this.realPage: 10000,
  this.autoPlay: false,
  this.interval: const Duration(seconds: 4),
  this.reverse: false,
  this.autoPlayCurve: Curves.fastOutSlowIn,
  this.autoPlayDuration: const Duration(milliseconds: 800),
  this.updateCallback,
  this.distortion: true,
})

После:

CarouselSlider({
  @required
  this.items,
  this.height,
  this.aspectRatio: 16/9,
  this.viewportFraction: 0.8,
  this.initialPage: 0,
  this.realPage: 10000,
  this.reverse: false,
  this.autoPlay: false,
  this.autoPlayInterval: const Duration(seconds: 4),
  this.autoPlayAnimationDuration: const Duration(milliseconds: 800),
  this.autoPlayCurve: Curves.fastOutSlowIn,
  this.enlargeCenterPage: false,
  this.pauseAutoPlayOnTouch,
  this.onPageChangedCallback,
})

Рефакторированные имена:

interval         --> autoPlayInterval
distortion       --> enlargeCenterPage
autoPlayDuration --> autoPlayAnimationDuration
updateCallback   --> onPageChanged

1 ответ

Решение

Пример для interval имущество

CarouselSlider({
  @required
  this.items,
  this.viewportFraction: 0.8,
  this.initialPage: 0,
  this.aspectRatio: 16/9,
  this.height,
  this.realPage: 10000,
  this.autoPlay: false,

  @Deprecated('use "autoplayInterval" instead') 
  Duration interval: const Duration(seconds: 4),
  Duration autoplayInterval,

  this.reverse: false,
  this.autoPlayCurve: Curves.fastOutSlowIn,
  this.autoPlayDuration: const Duration(milliseconds: 800),
  this.updateCallback,
  this.distortion: true,
}) : assert(interval == null || autoplayInterval == null, 'Use either "interval" or "autoPlayInterval", but not both.'), autoplayInterval = autoplayInterval ?? interval;
Другие вопросы по тегам