Android 如何强制小部件占用其周围的可用空间,而不管其形状如何?
对于上下文,我想创建如下内容: 我已经走了这么远: 我如何强制容器(或任何小部件,最终它应该作为不同颜色的按钮工作)采用这种形状? 此代码仅适用于您看到的卡:Android 如何强制小部件占用其周围的可用空间,而不管其形状如何?,android,flutter,dart,frontend,Android,Flutter,Dart,Frontend,对于上下文,我想创建如下内容: 我已经走了这么远: 我如何强制容器(或任何小部件,最终它应该作为不同颜色的按钮工作)采用这种形状? 此代码仅适用于您看到的卡: class ChooseUsageCardOffline extends StatelessWidget { final h; final w; ChooseUsageCardOffline({this.h, this.w}); @override Widget build(BuildContext context
class ChooseUsageCardOffline extends StatelessWidget {
final h;
final w;
ChooseUsageCardOffline({this.h, this.w});
@override
Widget build(BuildContext context) {
return AspectRatio(
aspectRatio: 1.4,
child: Card(
color: cc.dark_2,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(30)),
side: BorderSide(color: cc.dark_3),
),
child: FlatButton(
onPressed: () {},
child: Padding(
padding: EdgeInsets.fromLTRB(0, h/35, w/100, 0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Align(
alignment: Alignment.bottomLeft,
child: Text("OFFLINE", style: TextStyle(color: cc.light_1, fontWeight: FontWeight.w500, fontSize: h / 18)
)
),
SizedBox(width: w * 0.23),
Align(
alignment: Alignment.topRight,
child: Icon(Icons.device_hub, size: w * 0.15, color: cc.light_2,)
),
],
),
SizedBox(height: h / 50),
Text("Maximum Security, edit data Anywhere you are", style: TextStyle(color:cc.light_2, fontSize: h/40),),
SizedBox(height: h / 13),
Expanded(
child:Container(color: Colors.blue,)
)
],
),
)
),
),
);
}
}
问题在于填充应用于列的所有子级,包括下部容器 您需要删除列周围的填充,并将其分别应用于每个小部件(不包括较低的容器) 然后,在
卡
小部件上,您需要添加一个clipBehavior:Clip.hardEdge
以正确获得圆角边
下面是一个简单的示例,您可以复制并试用:
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展了无状态小部件{
MyHomePage({Key}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:中(
子:容器(
身高:400,
宽度:300,
孩子:卡片(
clipBehavior:Clip.hardEdge,
颜色:颜色,黑色,
形状:圆形矩形边框(
borderRadius:borderRadius.all(半径圆形(30)),
侧边:边框侧边(颜色:Colors.blue),
),
子:列(
儿童:[
已展开(子:容器()),
容器(高度:40,颜色:颜色。红色),
],
),
),
),
),
);
}
}
问题在于填充应用于列的所有子级,包括较低的容器
您需要删除列周围的填充,并将其分别应用于每个小部件(不包括较低的容器)
然后,在卡
小部件上,您需要添加一个clipBehavior:Clip.hardEdge
以正确获得圆角边
下面是一个简单的示例,您可以复制并试用:
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
debugShowCheckedModeBanner:false,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(),
);
}
}
类MyHomePage扩展了无状态小部件{
MyHomePage({Key}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(),
正文:中(
子:容器(
身高:400,
宽度:300,
孩子:卡片(
clipBehavior:Clip.hardEdge,
颜色:颜色,黑色,
形状:圆形矩形边框(
borderRadius:borderRadius.all(半径圆形(30)),
侧边:边框侧边(颜色:Colors.blue),
),
子:列(
儿童:[
已展开(子:容器()),
容器(高度:40,颜色:颜色。红色),
],
),
),
),
),
);
}
}
要使小部件根据其父小部件的边界调整自身大小,请使用FittedBox()
小部件包装它。查看颤振官方频道的视频了解更多细节
代码如下所示:
child:FittedBox(
fit:Boxfit.fill,//因为您希望它具有周围空间的形状。
孩子:你的小部件(
//...
),
),
要使小部件根据其父小部件的边界调整自身大小,请使用FittedBox()
小部件包装它。查看颤振官方频道的视频了解更多细节
代码如下所示:
child:FittedBox(
fit:Boxfit.fill,//因为您希望它具有周围空间的形状。
孩子:你的小部件(
//...
),
),
谢谢,工作顺利!谢谢你,工作了!
class ChooseUsageCardOffline extends StatelessWidget {
final h;
final w;
ChooseUsageCardOffline({this.h, this.w});
@override
Widget build(BuildContext context) {
return AspectRatio(
aspectRatio: 1.4,
child: Card(
color: Colors.red,
clipBehavior: Clip.antiAlias, // Add clip type.
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(30)),
side: BorderSide(color: Colors.green),
),
child: FlatButton(
padding: EdgeInsets.all(0), // Remove default padding in FlatButton
onPressed: () {},
child: Padding(
padding: EdgeInsets.fromLTRB(0, h/35, w/100, 0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Align(
alignment: Alignment.bottomLeft,
child: Text("OFFLINE", style: TextStyle(color: Colors.red, fontWeight: FontWeight.w500, fontSize: h / 18)
)
),
SizedBox(width: w * 0.23),
Align(
alignment: Alignment.topRight,
child: Icon(Icons.device_hub, size: w * 0.15, color: Colors.red,)
),
],
),
SizedBox(height: h / 50),
Text("Maximum Security, edit data Anywhere you are", style: TextStyle(color:Colors.red, fontSize: h/40),),
SizedBox(height: h / 13),
Expanded(
child:Container(color: Colors.blue,)
)
],
),
)
),
),
);
}
}