причина
Маленький друг задал этот вопрос в группе:
Как изменить цвет фона PopupMenuButton?
PopupMenuButton
PopupMenuButton
сам не предоставляет параметры для изменения цвета,
Другого пути нет, кроме как найти исходный код всплывающей страницы.
Долго искал, нашел место для возврата во всплывающее окно, и добавил одноContainer
, установите цвет, и все готово!
Итак, я отправил этот текст:
popup_menu.dart строка 466, просто добавьте контейнер и установите цвет
Миссия выполнена!
Я думал, что эта группа друзей будет вздыхать так:
Вау, здоровяк классный!
как как...
Однако, злополучная, дорога к притворству всегда такая ухабистая. Иначе я бы не писал эту статью.
Другой член группы сказал:
Он: «Вы не можете использовать Theme для этого?»
Я: «Нет, он не устанавливает цвет в соответствии с темой, вы можете посмотреть исходный код».
Он: «Картинка + ссылка».
Я (внутренняя ОС): "Бля, не удалось притвориться? Поторопись, посмотри, что происходит!"
проходить через
Открытые ссылки, чтобы увидеть этоTheme
СворачиватьPopupMenuButton
cardColor
Theme(
data: ThemeData(cardColor: Colors.red),
child: PopupMenuButton<WhyFarther>(
// ...
),
),
ТЕМА добавляется непосредственно в последний код и устанавливает красный цвет.
Отладка началась!
эммммммммммм,
Тогда возникает вопрос,cardColor
Что это такое?
ThemeData
Мы все знаем, что Тема может быть определена для управления глобальным цветным текстом и т.п., но я никогда не знал, чтоcardColor
,
Найти информацию!
Тяжелая работа окупается, позвольте мне найти ее"Flutter: Theme" по сценарию "Волшебника",
Большой парень перевел основные атрибуты ThemeData, в том числеcardColor
:
cardColor -
Color
Типы,Material
использоваться какCard
цвет времени.
какой беспорядок,Material
использоваться какCard
?
В то время я газ не один, чтобы играть, я видел давно источник исходного кода, который не видел возврата к созданию карты!
Ни в коем случае, ищите ключевое слово карты глобально! Всегда видеть проблему!
Material
Наконец, в результате моих неустанных поисков, я нашел кое-что подозрительное:
return Opacity(
opacity: opacity.evaluate(route.animation),
child: Material(
type: MaterialType.card,
/// ...
),
),
);
этоMaterial
Есть компонент подtype
Параметр, который оказался заданным порядкомMaterialType.card
!
Не кто еще ты можешь быть!
На этот раз, наконец, понять приведенный выше текст:
cardColor -
Color
Типы,Material
использоваться какCard
цвет времени.
MaterialType
Как вы думаете, это здесь? Нет, я должен посмотреть на этот тип Type:
enum MaterialType {
/// 使用默认主题画布颜色的矩形。
canvas,
/// 圆形边缘,卡片主题颜色。
card,
/// 默认情况下没有颜色的圆(用于浮动操作按钮)。
circle,
/// 圆形边缘,默认情况下没有颜色(用于[MaterialButton]按钮)。
button,
/// 一块透明的材料,用于绘制喷墨和高光。虽然材料隐喻描述了打印在材料本身上的子部件,但不隐藏墨迹效 果,但实际上[Material]小部件将子部件绘制在墨迹效果的顶部。具有类型透明度的[材质]可以放置在 不透明小部件的顶部,以在其顶部显示墨迹效果。首选使用[ink]小部件在不透明小部件上显示墨迹效果。
transparency
}
Никаких призов за угадывание, и, прежде всего, мой китайский язык, переведенный с помощью программы-переводчика!
В таком случае давайте изменим тип и изменим его наcanvas
, и посмотрите, красный ли он:
Суммировать
Хотя притворство провалилось, но лично у меня более глубокое понимание этого аспекта Темы,
И если в будущем потребуется определить виджет, вы также можете использовать этот метод для определенияMaterial
тип ,
Это позволяет всему приложению и постоянному стилю.