Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
4760068
Replace Single Quotes
rayliverified Apr 26, 2020
15c64ea
Create Responsive Value #1
rayliverified Apr 26, 2020
1a2aebd
Replace Single Quotes #2
rayliverified Apr 26, 2020
18e7eb6
Shrink Wrap Creation
rayliverified Apr 26, 2020
846a1b5
Shrink Wrap Creation #2
rayliverified Apr 27, 2020
1b633ea
Named Breakpoints Override Creation #1
rayliverified Apr 27, 2020
0475110
QUICKFIX MaxWidth Breakpoint Logic
rayliverified Apr 27, 2020
2b08fe4
Create Responsive Breakpoint Constructors
rayliverified Apr 30, 2020
a211498
Responsive Wrapper Creation #2
rayliverified Apr 30, 2020
1d3067a
Responsive Wrapper Creation #2 Part 2
rayliverified Apr 30, 2020
bd7658d
Create Debug Log Parameter
rayliverified Apr 30, 2020
6b14249
QUICKFIX 0 Width and Height
rayliverified Apr 30, 2020
9aea255
QUICKFIX 0 Width and Height
rayliverified Apr 30, 2020
b5cb0d2
Responsive Wrapper Creation #2 Part 3
rayliverified Apr 30, 2020
4271f57
Responsive Row Column Creation #2
rayliverified May 1, 2020
9c31c91
AutoScaleDown Creation
rayliverified May 1, 2020
161e59b
ResponsiveFlexible Creation
rayliverified May 1, 2020
84353f4
Responsive Visibility Creation #3
rayliverified May 1, 2020
863c008
AutoScaleDown Creation #2
rayliverified May 1, 2020
23fcc48
Create Responsive Value #2
rayliverified May 2, 2020
6bcb983
Responsive Row Column Creation #3
rayliverified May 2, 2020
d32cfbd
Responsive Row Column Creation #3 Part 2
rayliverified May 2, 2020
c34ea4c
Responsive Row Column Creation #3 Part 3
rayliverified May 2, 2020
0ca2e84
Responsive Row Column Creation #3 Part 4
rayliverified May 2, 2020
eaef614
Responsive Row Column Creation #3 Part 5
rayliverified May 2, 2020
541bfb4
Responsive Value Creation #2 Part 2
rayliverified May 3, 2020
5389286
Add Documentation
rayliverified May 5, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion example
Submodule example updated 2 files
+7 −8 lib/main.dart
+2 −1 pubspec.yaml
2 changes: 2 additions & 0 deletions lib/responsive_framework.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
library responsive_framework;

export 'responsive_row_column.dart';
export 'responsive_value.dart';
export 'responsive_wrapper.dart';
export 'utils/scroll_behavior.dart';
186 changes: 186 additions & 0 deletions lib/responsive_row_column.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/widgets.dart';

/// A convenience wrapper for responsive [Row] and
/// [Column] switching with padding and spacing.
///
/// ResponsiveRowColumn combines responsiveness
/// behaviors for managing rows and columns into one
/// convenience widget. This widget requires all [children]
/// to be [ResponsiveRowColumnItem] widgets.
/// Row vs column layout is controlled by [rowColumn].
/// RowColumn is Row layout when true and Column
/// layout when false.
/// Add spacing between widgets with [rowSpacing] and
/// [columnSpacing]. Add padding around widgets with
/// [rowPadding] and [columnPadding].
///
/// See [ResponsiveRowColumnItem] for [Flex] and
/// [FlexFit] options.
class ResponsiveRowColumn extends StatelessWidget {
final List<ResponsiveRowColumnItem> children;
final bool rowColumn;
final MainAxisAlignment rowMainAxisAlignment;
final MainAxisSize rowMainAxisSize;
final CrossAxisAlignment rowCrossAxisAlignment;
final TextDirection rowTextDirection;
final VerticalDirection rowVerticalDirection;
final TextBaseline rowTextBaseline;
final MainAxisAlignment columnMainAxisAlignment;
final MainAxisSize columnMainAxisSize;
final CrossAxisAlignment columnCrossAxisAlignment;
final TextDirection columnTextDirection;
final VerticalDirection columnVerticalDirection;
final TextBaseline columnTextBaseline;
final double rowSpacing;
final double columnSpacing;
final EdgeInsets rowPadding;
final EdgeInsets columnPadding;
get isRow => rowColumn;
get isColumn => !rowColumn;

const ResponsiveRowColumn(
{Key key,
this.children = const [],
@required this.rowColumn,
this.rowMainAxisAlignment = MainAxisAlignment.start,
this.rowMainAxisSize = MainAxisSize.max,
this.rowCrossAxisAlignment = CrossAxisAlignment.center,
this.rowTextDirection,
this.rowVerticalDirection = VerticalDirection.down,
this.rowTextBaseline,
this.columnMainAxisAlignment = MainAxisAlignment.start,
this.columnMainAxisSize = MainAxisSize.max,
this.columnCrossAxisAlignment = CrossAxisAlignment.center,
this.columnTextDirection,
this.columnVerticalDirection = VerticalDirection.down,
this.columnTextBaseline,
this.rowSpacing,
this.columnSpacing,
this.rowPadding = EdgeInsets.zero,
this.columnPadding = EdgeInsets.zero})
: super(key: key);

@override
Widget build(BuildContext context) {
return rowColumn
? Padding(
padding: rowPadding,
child: Row(
mainAxisAlignment: rowMainAxisAlignment,
mainAxisSize: rowMainAxisSize,
crossAxisAlignment: rowCrossAxisAlignment,
textDirection: rowTextDirection,
verticalDirection: rowVerticalDirection,
textBaseline: rowTextBaseline,
children: [
...buildChildren(children, rowColumn, rowSpacing),
],
),
)
: Padding(
padding: columnPadding,
child: Column(
mainAxisAlignment: columnMainAxisAlignment,
mainAxisSize: columnMainAxisSize,
crossAxisAlignment: columnCrossAxisAlignment,
textDirection: columnTextDirection,
verticalDirection: columnVerticalDirection,
textBaseline: columnTextBaseline,
children: [
...buildChildren(children, rowColumn, columnSpacing),
],
),
);
}

/// Logic to construct widget [children].
List<Widget> buildChildren(
List<ResponsiveRowColumnItem> children, bool rowColumn, double spacing) {
// Sort ResponsiveRowColumnItems by their order.
List<ResponsiveRowColumnItem> childrenHolder = children;
childrenHolder.sort((a, b) {
if (rowColumn) {
return a.rowOrder.compareTo(b.rowOrder);
} else {
return a.columnOrder.compareTo(b.columnOrder);
}
});
// Add padding between widgets..
List<Widget> widgetList = [];
for (int i = 0; i < childrenHolder.length; i++) {
widgetList.add(childrenHolder[i].copyWith(rowColumn: rowColumn));
if (spacing != null && i != childrenHolder.length - 1)
widgetList.add(Padding(
padding: rowColumn
? EdgeInsets.only(right: spacing)
: EdgeInsets.only(bottom: spacing)));
}
return widgetList;
}
}

/// A wrapper for [ResponsiveRowColumn] children with
/// responsiveness.
///
/// Control the order of widgets within [ResponsiveRowColumn]
/// by assigning a [rowOrder] or [columnOrder] value.
/// Widgets without an order value are ranked behind
/// those with order values.
/// Set a widget's [Flex] value through [rowFlex] and
/// [columnFlex]. Set a widget's [FlexFit] through
/// [rowFit] and [columnFit].
class ResponsiveRowColumnItem extends StatelessWidget {
final Widget child;
final int rowOrder;
final int columnOrder;
final bool rowColumn;
final int rowFlex;
final int columnFlex;
final FlexFit rowFit;
final FlexFit columnFit;

const ResponsiveRowColumnItem(
{Key key,
@required this.child,
this.rowOrder = 1073741823,
this.columnOrder = 1073741823,
this.rowColumn = true,
this.rowFlex,
this.columnFlex,
this.rowFit,
this.columnFit})
: super(key: key);

@override
Widget build(BuildContext context) {
if (rowColumn && (rowFlex != null || rowFit != null)) {
return Flexible(flex: rowFlex, fit: rowFit, child: child);
} else if (!rowColumn && (columnFlex != null || columnFit != null)) {
return Flexible(flex: columnFlex, fit: columnFit, child: child);
}

return child;
}

ResponsiveRowColumnItem copyWith({
Widget child,
int rowOrder,
int columnOrder,
bool rowColumn,
int rowFlex,
int columnFlex,
FlexFit rowFlexFit,
FlexFit columnFlexFit,
}) =>
ResponsiveRowColumnItem(
child: child ?? this.child,
rowOrder: rowOrder ?? this.rowOrder,
columnOrder: columnOrder ?? this.columnOrder,
rowColumn: rowColumn ?? this.rowColumn,
rowFlex: rowFlex ?? this.rowFlex,
columnFlex: columnFlex ?? this.columnFlex,
rowFit: rowFlexFit ?? this.rowFit,
columnFit: columnFlexFit ?? this.columnFit,
);
}
Loading