Flutter 颤振/省道-适合卡片的动态字体大小

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

我正在尝试在页面视图中创建一些ocassion卡,想知道是否有办法使我的fontsize动态化,以避免像素溢出。下面是一张工作正常的卡片的屏幕截图:

但是当我加入一个有更多角色的场合

这是我的密码:

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使卡片响应或提供固定的高度和宽度