simple tableview with optional expandable rows

This commit is contained in:
julian 2022-09-19 11:37:27 -06:00
parent e2bd064ba5
commit 79327a145c
3 changed files with 105 additions and 0 deletions

View file

@ -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<TableViewRow> rows;
@override
State<TableView> createState() => _TableViewState();
}
class _TableViewState extends State<TableView> {
@override
Widget build(BuildContext context) {
return Column(
children: widget.rows,
);
}
}

View file

@ -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;
}
}

View file

@ -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<TableViewCell> 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!,
],
),
),
);
}
}