防止更改基于文本大小的设备屏幕大小 Flutter

mik*_*ike 1 size screen flutter

我在 Flutter 的每个 Text 小部件中使用 textScaleFactor,但如果用户从设备设置更改显示或字体大小。它会更改整个应用程序的所有文本小部件的大小。

有什么办法可以阻止从主函数、MaterialApp 或 ThemeData 收听设备设置中的文本大小?

我不想使用 MediaQuery,因为我的应用程序非常大,我现在无法更改每个文本小部件。

谢谢

小智 5

您可以像这样覆盖系统提供的文本比例因子:

MaterialApp(
  builder:  (BuildContext context, Widget child) {
    return MediaQuery(
      data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0, ), //set desired text scale factor here
      child: child,
    );
  },
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue,
  ),
  home: MyHomePage(title: 'Flutter Demo Home Page'),
);
Run Code Online (Sandbox Code Playgroud)

来源

这会将整个应用程序中的系统文本比例因子覆盖为您选择的因子。

但这是一个非常糟糕的做法。您不应该依赖覆盖系统/可访问性设置来修复您的 ui。有很多设备有很多外形、屏幕分辨率、密度等。解决这个问题的正确方法是创建一个响应式用户界面,可以很好地适应不同的屏幕和设置。一个好的起点是响应式 ui的官方 flutter 站点auto_size_text包,它可以为您节省缩放文本的很多麻烦。

  • 我遇到此错误“参数类型“MediaQuery Function(BuildContext, Widget)”无法分配给参数类型“Widget Function(BuildContext, Widget?)?” (5认同)

小智 5

为了空安全,请使用以下代码:

MaterialApp(
    builder: (BuildContext context, Widget? child) {
        return MediaQuery(
          data: data.copyWith(
              textScaleFactor: 1.0),
          child: child!,  
        );
    },
    title: 'Flutter Demo',
    home: MyHomePage(title: 'Flutter Demo Home Page'),
);
Run Code Online (Sandbox Code Playgroud)