Каков универсальный диапазон определяемого пользователем textScaleFactor во Flutter? - PullRequest
0 голосов
/ 11 июня 2019

После бесплодного поиска ожидаемого диапазона параметра textScaleFactor я попытался ответить на вопрос q, напечатав ...

MediaQuery.textScaleFactorOf(context);

2 раза во время отладки на моем Note 9: вывод был 0.8 & 2, когда я устанавливал размер шрифта (в моих настройках доступности) @ его min & max, соответственно ..

Мой вопрос: могу ли я ожидать, что это универсальный диапазон для всех устройств?

Если вы не уверены, я бы, конечно, принял ответ от кого-то, опубликовавшего свои собственные результаты тестов (особенно если они должны были тестировать на iphone).

Ответы [ 2 ]

1 голос
/ 12 июня 2019

На iOS-симуляторе и моем iPhoneXS Max значение по умолчанию равно 1,0. Даже когда Настройка просмотра изображения - Увеличенное или Стандартное.

Когда я захожу в Accessibility и меняю размер на максимально доступныйразмер (шаг за шагом):

flutter: text scale 1.1176470588235294
flutter: text scale 1.2352941176470589
flutter: text scale 1.3529411764705883

Если я проверю тумблер для «Больших размеров доступности» , я получу максимум:

flutter: text scale 3.1176470588235294

Идетвниз с ползунком в Доступность (доступно только 3 шага):

flutter: text scale 0.9411764705882353
flutter: text scale 0.8823529411764706
flutter: text scale 0.8235294117647058

Я не знаю, насколько эти значения могут быть полезны для вас, но для ответа на ваши вопросы вы НЕ ДОЛЖНЫ ожидать min = 0.8 & max= 2 ...

В любом случае, если вам нужно как-то ограничить фактор, так как я не знаю способа вставить их в MediaQuery, который использует MaterialApp, у вас должна быть пользовательская функция, которая нормализуетMediaQuery.textScaleFactorOf (context), возможно, в корне дерева виджетов, и вручную применить это к каждому Text :: textScaleFactor?

0 голосов
/ 14 июня 2019

Кто-то уже дал удовлетворительный ответ на вопрос;это только я расширяю их заключительные замечания:

В любом случае, если вам нужно как-то ограничить фактор, так как я не знаю, как внедрить их в MediaQuery, который использует MaterialApp,у вас должна быть пользовательская функция, которая нормализует MediaQuery.textScaleFactorOf (context), может быть, в корне дерева вашего виджета, и вручную применять ее к каждому Text :: textScaleFactor?

Я в конечном итоге использовалследующий код для ограничения textScaleFactor в пределах 0,8-2,0;Я добавил дополнительное ограничение, в котором результат всегда будет кратен 0,1:

import 'package:flutter/material.dart';
import 'dart:math';
import 'authentication-page.dart';

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: (context, child) {
        onLayout(context);
        return MediaQuery(
            child: child,
            data: MediaQuery.of(context).copyWith(textScaleFactor: max(0.8, min(2.0, (10*MediaQuery.textScaleFactorOf(context)).round()/10))));
      },
      title: 'Flutter Demo',
      home: AuthenticationPage(),
    );
  }
}
...