如何在 Flutter 中禁用 iOS 辅助功能设置设置的粗体文本?

Jac*_*rie 4 text bold flutter disable

我知道我不应该禁用设备上设置的任何文本和粗体设置,但我这样做是有原因的。我通过在全局级别上将 textScaleFactor 设置为 1 来禁用文本大小。但这并不能避免用户设置粗体文本选项,该选项也会更改文本的大小。我如何覆盖该功能,以便即使用户在设备上设置它也不会对应用程序产生影响?我尝试使用 TextStyle 在文本项上设置 fontweitgh,但这也不会阻止粗体。

小智 8

Amir_P的答案很好,但是在测试时,我发现它破坏了系统中深色模式和浅色模式之间的切换,因为Flutter应用程序只会在iOS上杀死并重新打开应用程序后应用系统亮度,而不是在应用程序运行时立即应用系统亮度。打开。因此,我认为应该执行以下操作,而不是包装MaterialApp在 a 中:MediaQuery

return MaterialApp(
    builder: (context, child) => MediaQuery(
          data: MediaQuery.of(context).copyWith(boldText: false),
          child: child!,
    ),
);
Run Code Online (Sandbox Code Playgroud)

Material App 的属性builder专门用于覆盖此类内容 - 请参阅https://api.flutter.dev/flutter/material/MaterialApp/builder.html

  • 这是最好的答案,简单有效!来自 @Amir_P 的那个引起了奇怪的 MediaQuery.of(context).size.height 问题! (2认同)

Ami*_*r_P 7

感谢Josiah Mendes,我发现我原来的答案有一些意想不到的问题。更新MediaQueryData创建的内容更安全MaterialApp

return MaterialApp(
    builder: (context, child) => MediaQuery(
          data: MediaQuery.of(context).copyWith(boldText: false),
          child: child!,
    ),
);
Run Code Online (Sandbox Code Playgroud)

旧答案:

检查Text小部件后,我发现它使用boldTextOverridefromMediaQuery来更改提供给它的默认文本样式的字体粗细。所以我想你可以通过将你的MeterialApp内部包裹在 a 中MediaQuery并将 false 分配给boldText并设置为useInheritedMediaQueryon以防止它创建另一个 来覆盖它。像这样的东西:MaterialApptrueMediaQuery

return MediaQuery(
  data: MediaQueryData.fromWindow(WidgetsBinding.instance!.window).copyWith(boldText: false),
  child: MaterialApp(
    useInheritedMediaQuery: true,
  ),
);
Run Code Online (Sandbox Code Playgroud)