Почему шрифт FontFamily в ThemeData не применяется ко всему тексту, например AppBar, Tab и т. д.
Я наконец узнал.
Я ставил следующим образом.
@override
Widget build(BuildContext context) {
return GetMaterialApp(
theme: ThemeData(
fontFamily: 'YourAwesomeFontFamily',
),
...,
);
}
И я хотел изменитьtextStyle
также, поэтому я установил его следующим образом.
child: Scaffold(
appBar: AppBar(
title: const Text(
'Awesome Title'
style: TextStyle(
color: Colors.red,
fontWeight: FontWeight.bold,
),
),
),
...,
),
ух ты
AppBar
Его пришлось устанавливать отдельно.
style: TextStyle(
fontFamily: 'YourAwesomeFontFamily', // <- this must go in
...,
),
Почему это?
Ищете это?TabBar
тоже так? Я установилlabelStyle
потому что я хотел сделатьTab
Шрифт необычный, но отсутствовал.
child: TabBar(
labelStyles: TextStyle(
fontFamily: 'YourAwesomeFontFamily', // <- this must go in
color: Colors.red,
),
...,
),
Но что? ТолькоText
виджет выходит с установленным вThemeData
даже если нетfontFamily
.
Text(
'Applied fontFamily',
style(
// here is no fontFamily
color: Colors.red,
),
),
Так что я узнал об этом только сейчас.
Я сейчас очень растерян.
Буду признателен, если подскажете, почему это так.
2 ответа
Вот подсказка, которая вам нужна:
return GetMaterialApp(
theme: ThemeData(
textTheme: TextTheme(
// Setting fontFamily for the bodyText1 text style, that is used by default for the Text widget.
bodyText1: TextStyle(
fontFamily: 'YourAwesomeFontFamily',
),
// Setting fontFamily for the bodyText1 text style, that is used by default for the AppBar title and also for TabBar label if you use DefaultTabController.
headline6: TextStyle(
fontFamily: 'YourAwesomeFontFamily',
),
//Setting fontFamily for the bodyText1 text style, that is used by default for the TabBar label.
subtitle1: TextStyle(
fontFamily: 'YourAwesomeFontFamily',
),
),
appBarTheme: AppBarTheme(
// Setting fontFamily for the AppBar title text style.
textTheme: TextTheme(
headline6: TextStyle(
fontFamily: 'YourAwesomeFontFamily',
),
),
),
tabBarTheme: TabBarTheme(
// Setting fontFamily for the TabBar label text style.
labelStyle: TextStyle(
fontFamily: 'YourAwesomeFontFamily',
),
),
),
...
);
удачного кодирования...
Я нашел причину.
Text
виджет имеет свойство.
Еслиinherit
являетсяfalse
, это переопределитTextStyle
, но значение по умолчаниюtrue
.
текст.dart
/// If non-null, the style to use for this text.
///
/// If the style's "inherit" property is true, the style will be merged with
/// the closest enclosing [DefaultTextStyle]. Otherwise, the style will
/// replace the closest enclosing [DefaultTextStyle].
final TextStyle? style;
НоAppBar
Тема применяется по-другому, что всегда переопределяет.
app_bar_theme.dart
/// Overrides the default value of [AppBar.titleTextStyle]
/// property in all descendant [AppBar] widgets.
///
/// If this property is specified, then [backwardsCompatibility]
/// should be false (the default).
///
/// See also:
///
/// * [toolbarTextStyle], which overrides the default of [AppBar.toolbarTextStyle]
/// in all descendant [AppBar] widgets.
final TextStyle? titleTextStyle;