Метод resolveWith
Метод resolveWith класса WidgetStateProperty фабричный метод resolveWith у WidgetStateProperty принимает функцию от Set WidgetState к значению T. Так задают разный цвет при pressed и в обычном виде.
Синтаксис
WidgetStateProperty.resolveWith(
(Set<WidgetState> states) {
return value;
},
)
Параметры
| Параметр | Описание |
|---|---|
callback |
Функция, которая получает активные WidgetState
и возвращает значение для стиля.
|
Пример
Давайте вернём другой цвет при pressed:
import 'package:flutter/material.dart';
void main()
{
var prop = WidgetStateProperty.resolveWith(
(Set<WidgetState> states) {
if (states.contains(WidgetState.pressed)) {
return Colors.red;
}
return Colors.green;
},
);
var res = prop.resolve({WidgetState.pressed});
print('abcde');
print(res);
}
Результат выполнения кода
Color(0xffff0000)
Пример
Давайте задать resolveWith у TextButton на экране:
import 'package:flutter/material.dart';
void main()
{
runApp(
MaterialApp(
home: Scaffold(
body: Center(
child: TextButton(
style: ButtonStyle(
foregroundColor: WidgetStateProperty.resolveWith(
(Set<WidgetState> states) {
if (states.contains(WidgetState.disabled)) {
return Colors.grey;
}
return Colors.blue;
},
),
),
onPressed: () {},
child: Text('12345'),
),
),
),
),
);
}
На экране подпись '12345' на кнопке
станет синей, пока onPressed не null.
Смотрите также
-
метод
all,
когда одно значение для всех состояний -
перечисление
WidgetState,
которое приходит в callback -
класс
WidgetStateProperty,
к которому относитсяresolveWith -
класс
ElevatedButtonThemeData,
гдеButtonStyleиспользует такие свойства