Flutter中如何全局定义textScaler?

问题描述 投票:0回答:1

我正在努力使我的应用程序对于为其设备启用大文本辅助功能的用户来说是可读的。我知道文本小部件有一个参数“textScaler”(以前称为textScaleFactor),但是,是否有必要为每个文本小部件定义此textScaler?

我尝试使用 MediaQuery 包装 Material 应用程序,并在其数据中为 textScaler 分配值 1.2,但是,这会消除用户使用键盘的能力。

@override
  Widget build(BuildContext context) {
    return MediaQuery(
      data: MediaQuery.of(context).copyWith(
        textScaler: const TextScaler.linear(1.2),
      ),
      child: MaterialApp.router(...
flutter accessibility
1个回答
0
投票

您可以使用 MaterialAppbuilder 属性全局定义 textScaler。这种方法可确保您修改 MediaQuery 数据而不会丢失键盘输入等基本信息。具体方法如下:

@override
Widget build(BuildContext context) {
  return MaterialApp(
    builder: (context, child) {
      final mediaQuery = MediaQuery.of(context);
      return MediaQuery(
        data: mediaQuery.copyWith(
          textScaler: const TextScaler.linear(1.2),
        ),
        child: child!,
      );
    },
    home: MyHomePage(),
    // other properties...
  );
}

说明:

  • 使用生成器: builder 属性允许您使用修改后的 MediaQuery 数据重建小部件树。
  • 保留 MediaQuery 数据: 通过使用 MediaQuery.of(context) 获取当前 MediaQuery,然后使用新的 textScaler 复制它,您可以保留所有其他 MediaQuery 属性(如 viewInsets),这对于键盘功能至关重要。
  • 全局应用:包装整个应用程序可确保所有文本小部件继承新的textScaler值,而无需单独指定它。

注意: 避免在构建器之外直接使用 MediaQuery 包装 MaterialApp,因为这可能会导致丢失重要的 MediaQuery 信息,影响屏幕键盘等功能。

© www.soinside.com 2019 - 2024. All rights reserved.