所以我做了一个 Flutter 应用程序。我将所有字体大小定义为动态(根据屏幕大小正确渲染)。
一切都运行良好,直到我在使用较大字体大小的手机上打开应用程序(在设备设置中更改)。尽管我已经对文本大小进行了编程以动态呈现自身,但如果用户不使用手机的默认字体大小并将其保持在较大的大小,则会失败。
现在的问题是,如何停止手机的字体大小(在“设置”中的“文本大小”中选择)影响我的应用程序内的任何内容?我想渲染与我在 flutter 应用程序中定义的相同的文本大小,无论设置是什么。
有办法做到吗?或者如果没有办法阻止这个影响部分,我这里还有什么其他解决方案?
您可以像这样覆盖系统提供的文本比例因子:
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'),
);
如果您发现此答案有帮助,请将此答案标记为已接受
答案已过时,因为
MediaQueryData.fromWindow
已弃用。此外,MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
并不总是可取的,因为它会强制频繁重建,例如当显示键盘时。
此解决方案解决了弃用和重建问题:
@override
Widget build(BuildContext context) {
MediaQueryData windowData = MediaQueryData.fromView(View.of(context));
windowData = windowData.copyWith(
textScaleFactor: 1.0, //or whatever you want
);
return MediaQuery(
data: windowData,
child: MaterialApp(
useInheritedMediaQuery: true, //if you need it
//...
),
);
}