Структура флаттера
Я хочу получить эту структуру:
-----------------------------------------------------------------------------------
item 1 item 2
item 3 item 4
-----------------------------------------------------------------------------------
По сути, мне нужно иметь Table
с 2 columns
с 2 rows
в каждом column
, но это эффект, который я получаю:
вот мой код:
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
доступное пространство. На Android
Я бы использовал weight
собственность и все тут.
1 ответ
Решение
С помощью 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"),
)
],
),
)
],
),
)
Я бы предложил использовать виджет таблицы для согласованности и простоты, так как вложенные строки и столбцы могут стать немного грязными и иметь большой отступ.
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"),
]),
]);
Чтобы создать таблицу с заголовком и прокруткой.
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],
),
),
);
}