Flutter 颤振/省道-适合卡片的动态字体大小
我正在尝试在页面视图中创建一些ocassion卡,想知道是否有办法使我的fontsize动态化,以避免像素溢出。下面是一张工作正常的卡片的屏幕截图: 但是当我加入一个有更多角色的场合 这是我的密码:Flutter 颤振/省道-适合卡片的动态字体大小,flutter,dart,Flutter,Dart,我正在尝试在页面视图中创建一些ocassion卡,想知道是否有办法使我的fontsize动态化,以避免像素溢出。下面是一张工作正常的卡片的屏幕截图: 但是当我加入一个有更多角色的场合 这是我的密码: class Category { String name; IconData icon; Widget route; Category(this.name, this.icon, this.route); } class CalendarEvents { String title; S
class Category {
String name;
IconData icon;
Widget route;
Category(this.name, this.icon, this.route);
}
class CalendarEvents {
String title;
String date;
CalendarEvents(this.title, this.date);
}
class AccountPage extends StatefulWidget {
@override
_AccountPageState createState() => _AccountPageState();
}
class _AccountPageState extends State<AccountPage> {
List<Category> _categories = [
Category('My History', Icons.history, MyHistory()),
Category('Dates to Remember', Icons.event_note, DatesToRemember()),
Category('Terms and Conditions', Icons.assignment, TermsandConditions()),
Category('Privacy Notice', Icons.security, PrivacyNotice()),
Category('Rate us' , Icons.stars, RateUs()),
Category('Send us Feedback' , Icons.feedback, GiveUsFeedback())
];
DateFormat formatter = DateFormat('dd/MM/yyyy');
List<CalendarEvents> _events = [
CalendarEvents('Christmas Day', "25/12/2020"),
CalendarEvents('New Years Eve', "31/12/2020"),
CalendarEvents('New Years Day',"01/01/2021"),
CalendarEvents('Valentines Day', "14/02/2021"),
CalendarEvents('A very long occasion that needs to be resized','01/01/2021')
];
int _index = 0;
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(
children: [
Container(
child: SizedBox(
height: 75, // card height
child: PageView.builder(
itemCount: _events.length,
controller: PageController(viewportFraction: 0.5),
onPageChanged: (int index) => setState(() => _index = index),
itemBuilder: (_, i) {
return Transform.scale(
scale: i == _index ? 1 : 0.5,
child: Card(
elevation: 6,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(formatter.parse(_events[i].date).day.toString()),
Text(DateFormat.MMMM().format(formatter.parse(_events[i].date)).toString()),
Text(
_events[i].title,
style: AppBarTextStyle,
),
],
),
),
);
},
),
),
),
// SizedBox(height: 100.0,),
Container(
height: MediaQuery.of(context).size.height * 0.7,
child: ListView.builder(
itemCount: _categories.length,
itemBuilder: (context, index) {
return Column(
children: <Widget>[
ListTile(
leading: Icon(_categories[index].icon, color: Colors.black,),
title: Text(_categories[index].name),
trailing: Icon(Icons.arrow_forward_ios),
onTap: () => Navigator.push(context, MaterialPageRoute(builder: (context) => _categories[index].route)),
),
Divider(), //
],
);
}),
),
],
),
);
}
}
类别{
字符串名;
Iconda图标;
小部件路径;
类别(this.name、this.icon、this.route);
}
类日历事件{
字符串标题;
字符串日期;
日历事件(this.title,this.date);
}
类AccountPage扩展StatefulWidget{
@凌驾
_AccountPageState createState()=>\u AccountPageState();
}
类_AccountPageState扩展状态{
列表_类别=[
类别('My History',Icons.History,MyHistory()),
类别('要记住的日期',Icons.event_note,DatesToRemember()),
类别('Terms and Conditions',Icons.assignment,TermsandConditions()),
类别('Privacy Notice',Icons.security,PrivacyNotice()),
类别('Rate us',Icons.stars,RateUs()),
类别('向我们发送反馈',Icons.Feedback,GiveUsFeedback())
];
DateFormat formatter=DateFormat('dd/MM/yyyy');
列表_事件=[
日历事件(“圣诞节”,“2020年12月25日”),
日历事件(“除夕夜”,“2020年12月31日”),
日历事件(“新年日”,“2021年1月1日”),
日历事件(“情人节”,“14/02/2021”),
CalendarEvents('01/01/2021'是一个需要调整大小的很长的场合)
];
int _指数=0;
@凌驾
小部件构建(构建上下文){
返回SingleChildScrollView(
滚动方向:轴垂直,
子:列(
儿童:[
容器(
孩子:大小盒子(
高度:75,//卡片高度
子项:PageView.builder(
itemCount:_events.length,
控制器:页面控制器(视口分数:0.5),
onPageChanged:(int index)=>setState(()=>_index=index),
itemBuilder:(u,i){
返回变换比例(
标度:i==\u指数?1:0.5,
孩子:卡片(
标高:6,
形状:RoundedRectangleBorder(borderRadius:borderRadius.circular(10)),
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
Text(formatter.parse(_events[i].date).day.toString()),
Text(DateFormat.MMMM().format(formatter.parse(_events[i].date)).toString()),
正文(
_事件[i].标题,
样式:AppBarTextStyle,
),
],
),
),
);
},
),
),
),
//尺寸箱(高度:100.0,),
容器(
高度:MediaQuery.of(上下文).size.height*0.7,
子项:ListView.builder(
itemCount:_categories.length,
itemBuilder:(上下文,索引){
返回列(
儿童:[
列表砖(
前导:图标(_categories[index]。图标,颜色:Colors.black,),
标题:文本(_categories[index].name),
尾随:图标(图标。箭头\前进\ ios),
onTap:()=>Navigator.push(上下文,MaterialPage路由(生成器:(上下文)=>_categories[index].route)),
),
分隔符(),//
],
);
}),
),
],
),
);
}
}
根据场合的长度调整字体大小会很有用。如果这是可能的,那么实现这些结果的最佳方式是什么?谢谢您可以像这样使用软件包
title: Text(_categories[index].name),
而不是这个
title: AutoSizeText(
_categories[index].name,
minFontSize: 10,
stepGranularity: 10,
maxLines: 4,
overflow: TextOverflow.ellipsis,
)
如果您想控制fontsize,即使在调整大小之后,也应该使用@Abhishek这样的包 如果您只想自由调整文本大小,可以使用FittedBox并将其环绕在文本小部件上,如下所示:
FittedBox(
fit: BoxFit.contain,
child: Text()
)
感谢Abhishek,我已经实现了建议的解决方案,但仍然会导致底部溢出1像素?使用
isThreeLine:true,
在listTileSorry中我有点困惑,需要更改的不是列表tile,而是上面的卡片元素?更改下面的列表可以解决我上面的卡问题吗?Thankso使卡片响应或提供固定的高度和宽度