如何在Flutter的endDrawer组件中实现CircleAvatar居中显示
解决方案
出现该问题的原因是UserAccountsDrawerHeader内置了固定的布局规则,默认约束了currentAccountPicture的可用尺寸与对齐方式,外部包裹Center、修改父容器Padding无法覆盖内置规则,可选择以下两种方案解决:
方案1:调整内置组件参数(保留原有组件结构)
给UserAccountsDrawerHeader添加currentAccountPictureSize属性自定义头像区域尺寸,再用Center包裹CircleAvatar即可实现居中:
endDrawer: Drawer( child: ListView( padding: EdgeInsets.zero, children: [ UserAccountsDrawerHeader( margin: EdgeInsets.only(bottom: 40.h), decoration: BoxDecoration(color: Colors.blue[100]), // 自定义头像可用区域尺寸,需大于CircleAvatar的直径(2*radius) currentAccountPictureSize: Size.square(130.r), currentAccountPicture: Center( child: CircleAvatar( radius: 60.r, backgroundColor: Colors.white, child: Image.asset('assets/sermedhavuz.png')), ), accountName: SizedBox(child: Text(user.userName.toUpperCase())), accountEmail: SizedBox(child: Text(user.email)), ), ], ), )
方案2:自定义头部组件(布局完全可控)
如果需要实现头像、用户名、邮箱整体在头部区域居中,建议直接自定义头部容器,不受内置组件的布局限制:
endDrawer: Drawer( child: ListView( padding: EdgeInsets.zero, children: [ // 自定义头部替代UserAccountsDrawerHeader Container( padding: EdgeInsets.symmetric(vertical: 30.h, horizontal: 20.w), margin: EdgeInsets.only(bottom: 40.h), decoration: BoxDecoration(color: Colors.blue[100]), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ CircleAvatar( radius: 60.r, backgroundColor: Colors.white, child: Image.asset('assets/sermedhavuz.png')), SizedBox(height: 12.h), Text(user.userName.toUpperCase()), SizedBox(height: 4.h), Text(user.email), ], ), ), // 后续抽屉列表项可继续往下添加 ], ), )
内容的提问来源于stack exchange,提问作者Burak Aybi
相关产品推荐
相关产品推荐

