Как вы печатаете результат строковой функции во Flutter? - PullRequest
1 голос
/ 06 мая 2020

Это мой код:

String formatMinute() {
    if (int.parse('${_time.minute}') < 10) {
      String newMin = '${_time.minute}' + '0';
      return newMin;
    }
  }

Я бы хотел, чтобы результат formatMinute () находился в statefulWidget. Вот мой код в statefulWidget.

Text('Time selected: ${_time.hour}:${_time.minute}'),

Я бы хотел, чтобы "$ {_ time.minute}" было заменено результатом formatMinute (). Это возможно? Спасибо за ваше время и помощь!

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Вы должны попробовать использовать метод расширения! (https://dart.dev/guides/language/extension-methods)

Имейте в виду, что TimeOfDay _time = new TimeOfDay.now() будет иметь свойства hour и minute как int, поэтому ваш метод расширения также должен быть в int:

extension NumberFormat on int {
  String formatMinute() {
    if (this < 10) {
      String newMin = '0' + this.toString();
      return newMin;
    }
    return this.toString();
  }
}

И тогда это должно go внутри вашего виджета:

Text('Time selected: ${_time.hour}:${_time.minute.formatMinute()}')

Обратите внимание, что метод расширения - это что-то вроде класса, поэтому вам нужно объявить его вне вашего класса виджета. .

Вам следует обновить ваш pubspe c, чтобы также удалить все предупреждения:

 environment:
  sdk: ">=2.6.0 <3.0.0"
1 голос
/ 07 мая 2020

В Dart вы можете поместить любой код, включая вызовы функций, внутри строковой интерполяции. Так что это совершенно верно:

Text('Time selected: ${_time.hour}:${formatMinute()}')

Также обратите внимание, что реализация formatMinute может быть упрощена:

String formatMinute() => _time.minute.padLeft(2, '0');
...