bruno
bruno copied to clipboard
无法自定义BrnCommonCardTitle主题
1、BUG 描述
无法设置BrnCommonCardTitle的主题,用全局的配置和widget中的themedata均无效。设置对BrnActionCardTitle有效。
2、复现步骤
在main.dart中设置全局:
BrnInitializer.register(
allThemeConfig: BrnAllThemeConfig(
cardTitleConfig: BrnCardTitleConfig(
titleTextStyle: BrnTextStyle(fontSize: 14, fontWeight: FontWeight.normal,color: const Color(0xAAFFBBFF)),
),
)
);
在widget中设置:
BrnCommonCardTitle(
title: 'test',
themeData: BrnCardTitleConfig(
titleTextStyle: BrnTextStyle(fontSize: 14, fontWeight: FontWeight.normal, color: const Color(0xFFAAFFBB))
),
),
3、期望行为 改变字体大小和颜色
4、运行环境
-
Bruno 版本 bruno: ^3.0.0 *系统 android-arm64 • Android 8.1.0 (API 27)
-
Flutter Doctor 信息 [✓] Flutter (Channel stable, 3.0.4, on Deepin 20.6 5.10.101-amd64-desktop, locale zh_CN.UTF-8) • Flutter version 3.0.4 at • Upstream repository https://github.com/flutter/flutter.git • Framework revision 85684f9300 (8 周前), 2022-06-30 13:22:47 -0700 • Engine revision 6ba2af10bb • Dart version 2.17.5 • DevTools version 2.12.2
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
• Android SDK
• Platform android-33, build-tools 33.0.0
• ANDROID_HOME =
• Java binary at:
• Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
• All Android licenses accepted.
[✓] Android Studio (version 2021.2) • Android Studio at • Flutter plugin version 69.0.2 • Dart plugin version 212.5744 • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840) [✓] Connected device (2 available) • PDA (mobile) • 384ssGNOPQ7201XGBXX570L3803214 • android-arm64 • Android 8.1.0 (API 27)
Hi~ @flywithme2006 可以把 titleTextStyle
替换成titleWithHeightTextStyle
,title的样式就可以生效了,组件内部是使用titleWithHeightTextStyle
来给title指定样式
BrnCommonCardTitle(
title: 'test',
themeData: BrnCardTitleConfig(
titleWithHeightTextStyle: BrnTextStyle(
fontSize: 14,
fontWeight: FontWeight.normal,
color: const Color(0xFFAAFFBB))),
)
@JunCaiLi 多谢! 按所述修改后,生效。
通过BrnInitializer.register设置全局样式,还是无效。
将brn_common_card_title.dar的build方法中关于defaultConfig的实现做了点修改,全局设置有效。
原代码:
BrnCardTitleConfig defaultConfig = themeData ?? BrnCardTitleConfig();
defaultConfig = defaultConfig.merge(BrnCardTitleConfig(
alignment: alignment,
cardTitlePadding: padding as EdgeInsets?,
detailTextStyle: BrnTextStyle(color: detailColor)));
defaultConfig = BrnThemeConfigurator.instance
.getConfig(configId: defaultConfig.configId)
.cardTitleConfig
.merge(defaultConfig);
修改为:
BrnCardTitleConfig cardTitleConfig = BrnCardTitleConfig(
alignment: alignment,
cardTitlePadding: padding as EdgeInsets?,
detailTextStyle: BrnTextStyle(color: detailColor));
BrnCardTitleConfig defaultConfig = cardTitleConfig.merge(
BrnThemeConfigurator.instance
.getConfig(configId: cardTitleConfig.configId)
.cardTitleConfig).merge(themeData);
Hi~ @flywithme2006 global不生效是因为merge defaultConfig把全局配置的样式覆盖了
BrnCardTitleConfig defaultConfig = themeData ?? BrnCardTitleConfig();
defaultConfig = defaultConfig.merge(BrnCardTitleConfig(
alignment: alignment,
cardTitlePadding: padding as EdgeInsets?,
detailTextStyle: BrnTextStyle(color: detailColor)));
defaultConfig = BrnThemeConfigurator.instance
.getConfig(configId: defaultConfig.configId)
.cardTitleConfig
.merge(defaultConfig); // ⬅️ 不生效的原因在这里
你上面提到的修改code,会有一些小问题
BrnCardTitleConfig cardTitleConfig = BrnCardTitleConfig(
alignment: alignment,
cardTitlePadding: padding as EdgeInsets?,
detailTextStyle: BrnTextStyle(color: detailColor));
BrnCardTitleConfig defaultConfig = cardTitleConfig.merge( // 这里会把传进来的detailColor 覆盖
BrnThemeConfigurator.instance
.getConfig(configId: cardTitleConfig.configId)
.cardTitleConfig).merge(themeData);
@zhoujuanjuan 根据这个issue提交了一个PR https://github.com/LianjiaTech/bruno/pull/313
@JunCaiLi thanks. 行动迅速,赞一个。
以上正解,感谢@JunCaiLi