Flutter 在没有桌子的情况下,将材料对齐到相同的宽度和高度
我为我的应用程序创建了一个材料,其中应该包含一些文本。看起来是这样的: 有时,文本会溢出。有了一个灵活的按钮,它看起来像这样: 我还想让它像桌子一样对齐。如果不与其他对象对齐,它看起来是这样的: 对于所有这些元素,颜色之间的边界应位于同一位置,以便看起来干净 我怎样才能做到这一切?灵活的小部件在放入表时抛出错误的父异常 我的代码:Flutter 在没有桌子的情况下,将材料对齐到相同的宽度和高度,flutter,Flutter,我为我的应用程序创建了一个材料,其中应该包含一些文本。看起来是这样的: 有时,文本会溢出。有了一个灵活的按钮,它看起来像这样: 我还想让它像桌子一样对齐。如果不与其他对象对齐,它看起来是这样的: 对于所有这些元素,颜色之间的边界应位于同一位置,以便看起来干净 我怎样才能做到这一切?灵活的小部件在放入表时抛出错误的父异常 我的代码: import 'dart:math'; import 'package:flutter/material.dart'; import 'nook_const
import 'dart:math';
import 'package:flutter/material.dart';
import 'nook_constants.dart';
class NookTable extends StatelessWidget {
final double width;
final double height;
final EdgeInsets margin;
final Widget child;
final String title;
final String text;
final String font;
NookTable({
this.width,
this.height,
this.margin: nookDefaultMargin,
this.child,
this.title,
this.text,
this.font
});
final cell = (Widget widget) => Padding(
padding: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 15),
child: widget,
);
@override
Widget build(BuildContext context) {
var margin = EdgeInsets.only(
left: this.margin?.left ?? 0.0,
right: this.margin?.right ?? 0.0,
top: this.margin?.top ?? 0.0,
bottom: max(2, this.margin?.bottom ?? 0.0),
);
return Container(
width: width,
height: height,
clipBehavior: Clip.antiAlias,
margin: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 15),
decoration: BoxDecoration(
color: Colors.transparent,
),
child: Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
NookTitleDetails(text: title, width: width,),
NookTextDetails(text: text,),
],
),
);
}
}
class NookTextDetails extends StatelessWidget {
final String text;
final String font;
NookTextDetails({
this.text,
this.font
});
final cell = (Widget widget) => Padding(
padding: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 15),
child: widget,
);
@override
Widget build(BuildContext context) {
return Flexible(
child: Material(
clipBehavior: Clip.antiAlias,
borderRadius: BorderRadius.only(bottomRight: Radius.circular(25), topRight: Radius.circular(25)),
color: nookBeige,
child: cell(Text(text))
),
);
}
}
class NookTitleDetails extends StatelessWidget {
final String text;
final String font;
final double width;
NookTitleDetails({
this.text,
this.font,
this.width
});
final cell = (Widget widget) => Padding(
padding: EdgeInsets.only(left: 15, top: 5, bottom: 5, right: 15),
child: widget,
);
@override
Widget build(BuildContext context) {
return Container(
width: width,
child: Material(
clipBehavior: Clip.antiAlias,
borderRadius: BorderRadius.only(bottomLeft: Radius.circular(25), topLeft: Radius.circular(25)),
color: nooklightGreen,
child: cell(Text(text, style: TextStyle(color: nookWhite)))
),
);
}
}
行(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
灵活的(
弹性:0,
子:容器(
宽度:100,
子项:文本('文本到左边')
)
),
扩大(
弹性:4,
子项:文本(“右侧的文本”)
),
],
),
行(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
灵活的(
弹性:0,
子:容器(
宽度:100,
子项:文本('文本到左边')
)
),
扩大(
弹性:4,
子项:文本(“右侧的文本”)
),
],
),
容器(
装饰:盒子装饰(
颜色:Colors.lime,
边界半径:边界半径。全部(半径。圆形(10))
),
孩子:排(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
灵活的(
弹性:1,
子:堆栈(
儿童:[集装箱(
宽度:100,
填充:边缘设置。全部(5),
子项:Text('Fundort',textAlign:textAlign.center,)],
)),
扩大(
弹性:4,
子:容器(
装饰:盒子装饰(
颜色:颜色。浅绿色,
边界半径:边界半径。水平(右:半径。圆形(10))
),
填充:边缘设置。全部(10),
子项:文本('使用Facebooks登录使用Facebook登录',
样式:TextStyle(字体大小:18,颜色:Colors.white)),
),
)
]),
),
容器(
装饰:盒子装饰(
颜色:Colors.lime,
边界半径:边界半径。全部(半径。圆形(10))
),
孩子:排(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
灵活的(
弹性:1,
子:堆栈(
儿童:[集装箱(
宽度:100,
填充:边缘设置。全部(5),
子项:Text('Fundort',textAlign:textAlign.center,)],
)),
扩大(
弹性:4,
子:容器(
装饰:盒子装饰(
颜色:颜色。浅绿色,
边界半径:边界半径。水平(右:半径。圆形(10))
),
填充:边缘设置。全部(10),
子项:文本('使用Facebooks登录使用Facebook登录',
样式:TextStyle(字体大小:18,颜色:Colors.white)),
),
)
]),
),
使用行而不是表。然后使用相应的flex值的flex和expandable。材料已经排好了。Expanded only Horizontally然后将列也放在行内,并可在列中展开。然后它将垂直工作。你必须放置一个特定的宽度来保持边界在相同的位置。假设文本位于左侧(Fundort),使用容器小部件包装并放置特定宽度,然后将整个容器包装在灵活的小部件内。右边的文本应该在一个可扩展的小部件中。我将左边的一个包装到一个容器中,并放入一个灵活的容器中。将正确的一个转换为扩展的。它看起来几乎完全像我的姿势行的第二张图片,而不是一张桌子。然后使用相应的flex值的flex和expandable。材料已经排好了。Expanded only Horizontally然后将列也放在行内,并可在列中展开。然后它将垂直工作。你必须放置一个特定的宽度来保持边界在相同的位置。假设文本位于左侧(Fundort),使用容器小部件包装并放置特定宽度,然后将整个容器包装在灵活的小部件内。右边的文本应该在可扩展的ABL中
Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Flexible(
flex: 0,
child: Container(
width:100,
child:Text('Text to the left')
)
),
Expanded(
flex: 4,
child:Text('Text to the right')
),
],
),
Container(
decoration: BoxDecoration(
color: Colors.lime,
borderRadius: BorderRadius.all(Radius.circular(10))
),
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Flexible(
flex: 1,
child: Stack(
children: <Widget>[Container(
width: 100,
padding: EdgeInsets.all(5),
child: Text('Fundort',textAlign: TextAlign.center,))],
)),
Expanded(
flex: 4,
child: Container(
decoration: BoxDecoration(
color: Colors.lightGreen,
borderRadius: BorderRadius.horizontal(right:Radius.circular(10))
),
padding: EdgeInsets.all(10),
child: Text('Sign in with FacebookSign in with Facebook',
style: TextStyle(fontSize: 18, color: Colors.white)),
),
)
]),
),