如何根据设备的字体大小调整Flutter App的字体大小
How to adjust Font Size of Flutter App according to Font Size of Device
我正在学习 Flutter。
我无法在 Flutter 中找到问题的解决方案。
问题是:
我已经创建了一个应用程序并在我的 phone 中对其进行了测试,一切似乎都很好,但是当我 运行 在另一个 phone 中使用相同的应用程序时,phone 中的应用程序的字体] 比上一个大,溢出一些像素。
我的应用程序似乎无法根据设备字体大小调整其字体大小。
请任何人帮我解决这个问题
第一手机截图
Redme 5A
二手机截图
Realme 6
代码片段
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
home:Chicken(),
));
}
class Chicken extends StatefulWidget {
Chicken({Key key}) : super(key: key);
@override
_ChickenState createState() => _ChickenState();
}
class Item {
Item({this.isExpanded = false, this.headerValue, this.expandedValue});
bool isExpanded;
Widget expandedValue;
String headerValue;
}
Text customText({text}) {
return Text(
text,
style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.normal),
);
}
class _ChickenState extends State<Chicken> {
List<Item> _items = <Item>[
Item(
headerValue: 'Shop 1',
expandedValue: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: 'Time: '),
customText(text: 'Rate: '),
customText(text: 'Location: '),
],
),
SizedBox(
height: 15,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: '9:00 AM to 8:00 Pm'),
customText(text: 'Rs. 100'),
customText(text: 'ABC'),
],
),
],
)),
Item(
headerValue: 'Shop 2',
expandedValue: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: 'Time: '),
customText(text: 'Rate: '),
customText(text: 'Location: '),
],
),
SizedBox(
height: 15,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: '9:00 AM to 8:00 Pm'),
customText(text: 'Rs. 100'),
customText(text: 'ABC'),
],
),
],
)),
Item(
headerValue: 'Shop 3',
expandedValue: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: 'Time: '),
customText(text: 'Rate: '),
customText(text: 'Location: '),
],
),
SizedBox(
height: 15,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: '9:00 AM to 8:00 Pm'),
customText(text: 'Rs. 100'),
customText(text: 'ABC'),
],
),
],
)),
];
@override
Widget build(BuildContext context) {
Color headerColor;
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text(
'Chicken',
style: TextStyle(
fontSize: 30.0,
fontWeight: FontWeight.bold,
),
),
),
body: ListView(
children: <Widget>[
ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
_items[index].isExpanded = !_items[index].isExpanded;
});
},
children: _items.map<ExpansionPanel>((Item item) {
return ExpansionPanel(
canTapOnHeader: true,
headerBuilder: (BuildContext context, bool isExpanded) {
headerColor = isExpanded ? Colors.blue : Colors.black;
return Container(
padding: EdgeInsets.only(top: 8.0),
child: Text(
item.headerValue,
style: TextStyle(
fontSize: 30.0,
color: headerColor,
),
textAlign: TextAlign.center,
),
);
},
isExpanded: item.isExpanded,
body: Container(
child: item.expandedValue,
padding: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 10.0),
));
}).toList())
],
),
);
}
}
尝试使用媒体查询并动态定义字体大小。
double screenWidth = MediaQuery.of(context).size.width
double screenHeight = MediaQuery.of(context).size.height
所以,你的字体大小应该是这样的:
fontSize: screenWidth * 0.01. (change this constant according to your need)
示例:
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
final screenWidth = MediaQuery.of(context).size.width;
return Scaffold(
body: Center(
child: Container(
child: Text(
"Hey there",
style: TextStyle(
fontSize: screenWidth * 0.1
),
),
),
),
);
}
}
我也有回答,用简单的技术。它对我有用,
用于文本定义,
Text('Setting',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: sizeTextHeaderSet(context),
),
)
这是我的 sizeTextHeaderSet 方法(我使用该方法是因为我可能需要使用它)
double sizeTextHeaderSet(context){
double unitHeightValue = MediaQuery.of(context).size.height * 0.01;
double customSize = 2.5;
return customSize*unitHeightValue;
}
我正在学习 Flutter。
我无法在 Flutter 中找到问题的解决方案。
问题是:
我已经创建了一个应用程序并在我的 phone 中对其进行了测试,一切似乎都很好,但是当我 运行 在另一个 phone 中使用相同的应用程序时,phone 中的应用程序的字体] 比上一个大,溢出一些像素。
我的应用程序似乎无法根据设备字体大小调整其字体大小。
请任何人帮我解决这个问题
第一手机截图 Redme 5A
二手机截图 Realme 6
代码片段
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
home:Chicken(),
));
}
class Chicken extends StatefulWidget {
Chicken({Key key}) : super(key: key);
@override
_ChickenState createState() => _ChickenState();
}
class Item {
Item({this.isExpanded = false, this.headerValue, this.expandedValue});
bool isExpanded;
Widget expandedValue;
String headerValue;
}
Text customText({text}) {
return Text(
text,
style: TextStyle(fontSize: 25.0, fontWeight: FontWeight.normal),
);
}
class _ChickenState extends State<Chicken> {
List<Item> _items = <Item>[
Item(
headerValue: 'Shop 1',
expandedValue: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: 'Time: '),
customText(text: 'Rate: '),
customText(text: 'Location: '),
],
),
SizedBox(
height: 15,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: '9:00 AM to 8:00 Pm'),
customText(text: 'Rs. 100'),
customText(text: 'ABC'),
],
),
],
)),
Item(
headerValue: 'Shop 2',
expandedValue: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: 'Time: '),
customText(text: 'Rate: '),
customText(text: 'Location: '),
],
),
SizedBox(
height: 15,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: '9:00 AM to 8:00 Pm'),
customText(text: 'Rs. 100'),
customText(text: 'ABC'),
],
),
],
)),
Item(
headerValue: 'Shop 3',
expandedValue: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: 'Time: '),
customText(text: 'Rate: '),
customText(text: 'Location: '),
],
),
SizedBox(
height: 15,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
customText(text: '9:00 AM to 8:00 Pm'),
customText(text: 'Rs. 100'),
customText(text: 'ABC'),
],
),
],
)),
];
@override
Widget build(BuildContext context) {
Color headerColor;
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text(
'Chicken',
style: TextStyle(
fontSize: 30.0,
fontWeight: FontWeight.bold,
),
),
),
body: ListView(
children: <Widget>[
ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
_items[index].isExpanded = !_items[index].isExpanded;
});
},
children: _items.map<ExpansionPanel>((Item item) {
return ExpansionPanel(
canTapOnHeader: true,
headerBuilder: (BuildContext context, bool isExpanded) {
headerColor = isExpanded ? Colors.blue : Colors.black;
return Container(
padding: EdgeInsets.only(top: 8.0),
child: Text(
item.headerValue,
style: TextStyle(
fontSize: 30.0,
color: headerColor,
),
textAlign: TextAlign.center,
),
);
},
isExpanded: item.isExpanded,
body: Container(
child: item.expandedValue,
padding: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 10.0),
));
}).toList())
],
),
);
}
}
尝试使用媒体查询并动态定义字体大小。
double screenWidth = MediaQuery.of(context).size.width
double screenHeight = MediaQuery.of(context).size.height
所以,你的字体大小应该是这样的:
fontSize: screenWidth * 0.01. (change this constant according to your need)
示例:
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Home(),
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
final screenWidth = MediaQuery.of(context).size.width;
return Scaffold(
body: Center(
child: Container(
child: Text(
"Hey there",
style: TextStyle(
fontSize: screenWidth * 0.1
),
),
),
),
);
}
}
我也有回答,用简单的技术。它对我有用,
用于文本定义,
Text('Setting',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: sizeTextHeaderSet(context),
),
)
这是我的 sizeTextHeaderSet 方法(我使用该方法是因为我可能需要使用它)
double sizeTextHeaderSet(context){
double unitHeightValue = MediaQuery.of(context).size.height * 0.01;
double customSize = 2.5;
return customSize*unitHeightValue;
}