diff --git a/lib/widgets/table_view/table_view.dart b/lib/widgets/table_view/table_view.dart new file mode 100644 index 000000000..d77b971dd --- /dev/null +++ b/lib/widgets/table_view/table_view.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import 'package:stackwallet/widgets/table_view/table_view_row.dart'; + +class TableView extends StatefulWidget { + const TableView({Key? key, required this.rows}) : super(key: key); + + final List rows; + + @override + State createState() => _TableViewState(); +} + +class _TableViewState extends State { + @override + Widget build(BuildContext context) { + return Column( + children: widget.rows, + ); + } +} diff --git a/lib/widgets/table_view/table_view_cell.dart b/lib/widgets/table_view/table_view_cell.dart new file mode 100644 index 000000000..16a807d3c --- /dev/null +++ b/lib/widgets/table_view/table_view_cell.dart @@ -0,0 +1,17 @@ +import 'package:flutter/material.dart'; + +class TableViewCell extends StatelessWidget { + const TableViewCell({ + Key? key, + required this.flex, + required this.child, + }) : super(key: key); + + final int flex; + final Widget child; + + @override + Widget build(BuildContext context) { + return child; + } +} diff --git a/lib/widgets/table_view/table_view_row.dart b/lib/widgets/table_view/table_view_row.dart new file mode 100644 index 000000000..dc84a26d5 --- /dev/null +++ b/lib/widgets/table_view/table_view_row.dart @@ -0,0 +1,68 @@ +import 'package:flutter/material.dart'; +import 'package:stackwallet/utilities/cfcolors.dart'; +import 'package:stackwallet/widgets/expandable.dart'; +import 'package:stackwallet/widgets/table_view/table_view_cell.dart'; + +class TableViewRow extends StatelessWidget { + const TableViewRow({ + Key? key, + required this.cells, + required this.expandingChild, + this.decoration, + this.onExpandChanged, + this.padding = const EdgeInsets.all(0), + }) : super(key: key); + + final List cells; + final Widget? expandingChild; + final Decoration? decoration; + final void Function(ExpandableState)? onExpandChanged; + final EdgeInsetsGeometry padding; + + @override + Widget build(BuildContext context) { + return Container( + decoration: decoration, + child: expandingChild == null + ? Padding( + padding: padding, + child: Row( + children: [ + ...cells.map( + (e) => Expanded( + flex: e.flex, + child: e, + ), + ), + ], + ), + ) + : Expandable( + onExpandChanged: onExpandChanged, + header: Padding( + padding: padding, + child: Row( + children: [ + ...cells.map( + (e) => Expanded( + flex: e.flex, + child: e, + ), + ), + ], + ), + ), + body: Column( + children: [ + Container( + color: CFColors.buttonBackSecondary, + width: double.infinity, + height: 1, + ), + expandingChild!, + ], + ), + ), + ); + } +}