如何在Flutter中获取设备字体大小

6

当ListView的高度受限时,我遇到了一个问题。当我更改手机字体大小时,会出现溢出,但我不想为容器提供额外的高度。

Container(
       height: fixed height goes here,
       child: ListView(
         scrollDirection: Axis.horizontal,
         children: <Widget>[
           some widgets goes here...
         ],
       ),
     )
3个回答

16

你可以尝试依赖于textScaleFactor,它的默认值是1.0。如果你在设备的设置页面上改变字体大小,这个值将会被改变为1.151.3等(每次增加0.15)。

因此,你可以通过这个值来乘以容器的高度:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: SafeArea(child: Home()),
      ),
    );
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    double h = MediaQuery.of(context).textScaleFactor;
    return Center(
      child: Text('$h'), // with default settings it shows 1.0
    );
  }
}

@Thunermay 这个媒体查询的不同值对所有Android和所有iOS设备都是相同的吗? - Ratnesh Lal
这只是设备本身设置的文本比例尺度因子。所以,是的,它应该在iOS和Android上相同。 - Thunermay

2
如果您正在寻找设备字体大小(在智能手机的设置活动中设置),您可以使用MediaQuery类的textScaleFactor属性。
double textScale = MediaQuery.of(context).textScaleFactor;

另外,您也可以这样获取相同的值:
double textScale = MediaQuery.textScaleFactorOf(context);

提醒一下,Flutter 中的所有字体大小都会自动根据此设置进行缩放,因此如果用户将字体缩放到很大,您可能会遇到一些溢出错误。话虽如此,在调试时进行相同的操作是找到布局可能溢出的位置的绝佳方法。
查看 Flutter 文档中的可访问性部分以获取更多信息。

0
你需要检测屏幕高度并根据其给出Container()的高度,并在每次重新调用build()方法时保持检测。
这就是如何为你的Container()获得响应式高度的方法。 MediaQuery()可以实现这一点,如下所示:
Container(
       height: MediaQuery.of(context).size.height, // screen's size.height
       child: ListView(
         scrollDirection: Axis.horizontal,
         children: <Widget>[
           some widgets goes here...
         ],
       ),
     )

Flutter关于size属性的说明:

媒体的大小以逻辑像素为单位(例如,屏幕的大小)。


我想要的是容器的高度恰好等于其子元素的高度,而不是屏幕的高度。解决方案是使用4个if else情况,因为设备只有4种字体大小,但问题是我不知道当前设备的字体大小。 - Omar Fayad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接