Skip to content

Commit c34ea4c

Browse files
committed
Responsive Row Column Creation #3 Part 3
*Create rowFlex and columnFlex. *Automatically determine isFlexible for ResponsiveRowColumnItem based on rowFlex and columnFlex.
1 parent d32cfbd commit c34ea4c

File tree

1 file changed

+43
-13
lines changed

1 file changed

+43
-13
lines changed

lib/responsive_row_column.dart

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import 'package:flutter/widgets.dart';
33

44
class ResponsiveRowColumn extends StatelessWidget {
55
final List<ResponsiveRowColumnItem> children;
6-
final isRow;
7-
final isColumn;
6+
final bool isRow;
7+
final bool isColumn;
88
final MainAxisAlignment rowMainAxisAlignment;
99
final MainAxisSize rowMainAxisSize;
1010
final CrossAxisAlignment rowCrossAxisAlignment;
@@ -49,7 +49,8 @@ class ResponsiveRowColumn extends StatelessWidget {
4949

5050
@override
5151
Widget build(BuildContext context) {
52-
assert(isRow != null || isColumn != null);
52+
assert(isRow != null || isColumn != null,
53+
"Missing default isRow or isColumn value.");
5354
assert(!(isRow != null && isColumn != null),
5455
"isRow and isColumn are mutually exclusive and cannot be used simultaneously.");
5556
bool rowColumn;
@@ -105,7 +106,7 @@ class ResponsiveRowColumn extends StatelessWidget {
105106
// Add padding between items.
106107
List<Widget> widgetList = [];
107108
for (int i = 0; i < childrenHolder.length; i++) {
108-
widgetList.add(childrenHolder[i]);
109+
widgetList.add(childrenHolder[i].copyWith(rowColumn: rowColumn));
109110
if (spacing != null && i != childrenHolder.length - 1)
110111
widgetList.add(Padding(padding: EdgeInsets.only(bottom: spacing)));
111112
}
@@ -117,24 +118,53 @@ class ResponsiveRowColumnItem extends StatelessWidget {
117118
final Widget child;
118119
final int rowOrder;
119120
final int columnOrder;
120-
final bool isFlexible;
121-
final int flex;
122-
final FlexFit flexFit;
121+
final bool rowColumn;
122+
final int rowFlex;
123+
final int columnFlex;
124+
final FlexFit rowFlexFit;
125+
final FlexFit columnFlexFit;
123126

124127
const ResponsiveRowColumnItem(
125128
{Key key,
126129
@required this.child,
127130
this.rowOrder = 1073741823,
128131
this.columnOrder = 1073741823,
129-
this.isFlexible = false,
130-
this.flex,
131-
this.flexFit})
132+
this.rowColumn = true,
133+
this.rowFlex,
134+
this.columnFlex,
135+
this.rowFlexFit,
136+
this.columnFlexFit})
132137
: super(key: key);
133138

134139
@override
135140
Widget build(BuildContext context) {
136-
return isFlexible
137-
? Flexible(flex: flex, fit: flexFit, child: child)
138-
: child;
141+
if (rowColumn && rowFlex != null) {
142+
return Flexible(flex: rowFlex, fit: rowFlexFit, child: child);
143+
} else if (!rowColumn && columnFlex != null) {
144+
return Flexible(flex: columnFlex, fit: columnFlexFit, child: child);
145+
}
146+
147+
return child;
139148
}
149+
150+
ResponsiveRowColumnItem copyWith({
151+
Widget child,
152+
int rowOrder,
153+
int columnOrder,
154+
bool rowColumn,
155+
int rowFlex,
156+
int columnFlex,
157+
FlexFit rowFlexFit,
158+
FlexFit columnFlexFit,
159+
}) =>
160+
ResponsiveRowColumnItem(
161+
child: child ?? this.child,
162+
rowOrder: rowOrder ?? this.rowOrder,
163+
columnOrder: columnOrder ?? this.columnOrder,
164+
rowColumn: rowColumn ?? this.rowColumn,
165+
rowFlex: rowFlex ?? this.rowFlex,
166+
columnFlex: columnFlex ?? this.columnFlex,
167+
rowFlexFit: rowFlexFit ?? this.rowFlexFit,
168+
columnFlexFit: columnFlexFit ?? this.columnFlexFit,
169+
);
140170
}

0 commit comments

Comments
 (0)