我知道我不应该禁用设备上设置的任何文本和粗体设置,但我这样做是有原因的。我通过在全局级别将textScaleFactor设置为1来禁用文本大小。但这无法避免用户设置粗体文本选项,该选项也会更改文本大小。我如何覆盖该函数,这样即使用户在设备上设置它,也不会对应用程序产生影响?我曾尝试使用TextStyle在文本项上设置fontweitgh,但这也无法阻止粗体。
vcirk6k61#
检查Text小部件后,我发现它正在使用MediaQuery中的boldTextOverride来更改提供给它的默认文本样式的字体粗细。因此,我猜您可以通过将您的MeterialApp Package 在MediaQuery中并将false赋给boldText,然后将MaterialApp上的useInheritedMediaQuery设置为true来覆盖它,以防止它创建另一个MediaQuery。就像这样:
Text
MediaQuery
boldTextOverride
MeterialApp
boldText
MaterialApp
useInheritedMediaQuery
true
return MediaQuery( data: MediaQueryData.fromWindow(WidgetsBinding.instance!.window).copyWith(boldText: false), child: MaterialApp( useInheritedMediaQuery: true, ), );
g9icjywg2#
Amir_P's answer很不错,但在测试时,我发现它会中断系统中暗模式和亮模式之间的切换,因为Flutter应用程序只会在iOS上关闭并重新打开应用程序后应用系统亮度,而不是在应用程序打开时立即应用。因此,我认为与其将MaterialApp Package 在MediaQuery中,不如做以下事情:
return MaterialApp( builder: (context, child) => MediaQuery( data: MediaQuery.of(context).copyWith(boldText: false), child: child!, ), );
材质应用程序的builder属性专门用于覆盖此类内容-请参见https://api.flutter.dev/flutter/material/MaterialApp/builder.html
builder
2条答案
按热度按时间vcirk6k61#
检查
Text
小部件后,我发现它正在使用MediaQuery
中的boldTextOverride
来更改提供给它的默认文本样式的字体粗细。因此,我猜您可以通过将您的MeterialApp
Package 在MediaQuery
中并将false赋给boldText
,然后将MaterialApp
上的useInheritedMediaQuery
设置为true
来覆盖它,以防止它创建另一个MediaQuery
。就像这样:g9icjywg2#
Amir_P's answer很不错,但在测试时,我发现它会中断系统中暗模式和亮模式之间的切换,因为Flutter应用程序只会在iOS上关闭并重新打开应用程序后应用系统亮度,而不是在应用程序打开时立即应用。因此,我认为与其将
MaterialApp
Package 在MediaQuery
中,不如做以下事情:材质应用程序的
builder
属性专门用于覆盖此类内容-请参见https://api.flutter.dev/flutter/material/MaterialApp/builder.html