Flutter table 结构
Flutter table structure
我想得到这个结构:
-----------------------------------------------------------------------------------
item 1 item 2
item 3 item 4
-----------------------------------------------------------------------------------
基本上我需要有一个 Table
和 2 columns
每个 column
有 2 个 rows
,但这是我得到的效果:
这是我的代码:
new Container(
decoration: new BoxDecoration(color: Colors.grey),
child: new Row(
children: <Widget>[
new Column(
children: <Widget>[
new Container(
decoration: new BoxDecoration(color: Colors.red),
child: new Text("item 1"),
),
new Container(
decoration: new BoxDecoration(color: Colors.amber),
child: new Text("item 3"),
),
],
),
new Column(
children: <Widget>[
new Container(
decoration: new BoxDecoration(color: Colors.green),
child: new Text("item 2"),
),
new Container(
decoration: new BoxDecoration(color: Colors.teal),
child: new Text("item 4"),
)
],
)
],
),
)
我希望每个 column
拿走 width
space 可用的一半。
在 Android
我会使用 weight
属性 就是这样。
使用 flex
(默认情况下为 1),您可以将两列分开,然后使用 crossAxisAlignment
将它们对齐到开头的项目:
new Container(
decoration: new BoxDecoration(color: Colors.grey),
child: new Row(
children: <Widget>[
Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Container(
decoration: new BoxDecoration(color: Colors.red),
child: new Text("item 1"),
),
new Container(
decoration: new BoxDecoration(color: Colors.amber),
child: new Text("item 3"),
),
],
),
),
Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Container(
decoration: new BoxDecoration(color: Colors.green),
child: new Text("item 2"),
),
new Container(
decoration: new BoxDecoration(color: Colors.teal),
child: new Text("item 4"),
)
],
),
)
],
),
)
我建议使用 Table 小工具来确保一致性和易用性,因为嵌套的行和列可能会变得有点混乱且缩进太多。
https://docs.flutter.io/flutter/widgets/Table-class.html
...
Table(children: [
TableRow(children: [
Text("item 1"),
Text("item 2"),
]),
TableRow(children:[
Text("item 3"),
Text("item 4"),
]),
]);
创建带有页眉和滚动条的table。
return Container(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Column(
children: <Widget>[
headerRow(), /* Header Row */
dataRow(), /* Row 1 Data */
dataRow(), /* Row 2 Data */
Column(
children: /* Add row cell data dynamically */,
),
],
),
),
);
headerRow(List<dynamic> titleRowData) {
return Container(
height: ScreenUtil().setHeight(100),
child: Row(
children: /* Add header cell data dynamically */,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
),
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
stops: [0, 1],
colors: [skyBlueColor, indigoColor],
),
),
);
}
我想得到这个结构:
-----------------------------------------------------------------------------------
item 1 item 2
item 3 item 4
-----------------------------------------------------------------------------------
基本上我需要有一个 Table
和 2 columns
每个 column
有 2 个 rows
,但这是我得到的效果:
这是我的代码:
new Container(
decoration: new BoxDecoration(color: Colors.grey),
child: new Row(
children: <Widget>[
new Column(
children: <Widget>[
new Container(
decoration: new BoxDecoration(color: Colors.red),
child: new Text("item 1"),
),
new Container(
decoration: new BoxDecoration(color: Colors.amber),
child: new Text("item 3"),
),
],
),
new Column(
children: <Widget>[
new Container(
decoration: new BoxDecoration(color: Colors.green),
child: new Text("item 2"),
),
new Container(
decoration: new BoxDecoration(color: Colors.teal),
child: new Text("item 4"),
)
],
)
],
),
)
我希望每个 column
拿走 width
space 可用的一半。
在 Android
我会使用 weight
属性 就是这样。
使用 flex
(默认情况下为 1),您可以将两列分开,然后使用 crossAxisAlignment
将它们对齐到开头的项目:
new Container(
decoration: new BoxDecoration(color: Colors.grey),
child: new Row(
children: <Widget>[
Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Container(
decoration: new BoxDecoration(color: Colors.red),
child: new Text("item 1"),
),
new Container(
decoration: new BoxDecoration(color: Colors.amber),
child: new Text("item 3"),
),
],
),
),
Expanded(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
new Container(
decoration: new BoxDecoration(color: Colors.green),
child: new Text("item 2"),
),
new Container(
decoration: new BoxDecoration(color: Colors.teal),
child: new Text("item 4"),
)
],
),
)
],
),
)
我建议使用 Table 小工具来确保一致性和易用性,因为嵌套的行和列可能会变得有点混乱且缩进太多。
https://docs.flutter.io/flutter/widgets/Table-class.html
...
Table(children: [
TableRow(children: [
Text("item 1"),
Text("item 2"),
]),
TableRow(children:[
Text("item 3"),
Text("item 4"),
]),
]);
创建带有页眉和滚动条的table。
return Container(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Column(
children: <Widget>[
headerRow(), /* Header Row */
dataRow(), /* Row 1 Data */
dataRow(), /* Row 2 Data */
Column(
children: /* Add row cell data dynamically */,
),
],
),
),
);
headerRow(List<dynamic> titleRowData) {
return Container(
height: ScreenUtil().setHeight(100),
child: Row(
children: /* Add header cell data dynamically */,
),
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10),
topRight: Radius.circular(10),
),
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
stops: [0, 1],
colors: [skyBlueColor, indigoColor],
),
),
);
}