flexible_table 2.0.0+1 copy "flexible_table: ^2.0.0+1" to clipboard
flexible_table: ^2.0.0+1 copied to clipboard

A table with flexible sized colums and an effectively unlimited number of rows that retains performance.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:table_example/src/alignment_flex_table.dart';
import 'package:table_example/src/csv_viewer.dart';
import 'package:table_example/src/dynamic_flex_table.dart';
import 'package:table_example/src/empty_flex_table.dart';
import 'package:table_example/src/filtered_flex_table.dart';
import 'package:table_example/src/initial_flex_table_sizes.dart';
import 'package:table_example/src/mixed_widgets_flex_table.dart';
import 'package:table_example/src/not_resizable_flex_table.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flex Table Demo'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(title),
      ),
      body: ListView(
        children: [
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const AlignmentFlexTable(
                  dataAlignment: Alignment.centerLeft,
                  headerAlignment: Alignment.centerLeft,
                  title: 'Alignment (Left)',
                ),
              ),
            ),
            title: const Text('Alignment (Left)'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const AlignmentFlexTable(
                  dataAlignment: Alignment.topCenter,
                  headerAlignment: Alignment.center,
                  title: 'Alignment (Mixed)',
                ),
              ),
            ),
            title: const Text('Alignment (Mixed)'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const AlignmentFlexTable(
                  dataAlignment: Alignment.centerRight,
                  headerAlignment: Alignment.centerRight,
                  title: 'Alignment (Right)',
                ),
              ),
            ),
            title: const Text('Alignment (Right)'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const DynamicFlexTable(
                  sortable: true,
                  striped: true,
                  title: 'Dynamic Loading',
                ),
              ),
            ),
            title: const Text('Dynamic Loading'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const FilteredFlexTable(
                  title: 'Filtered',
                ),
              ),
            ),
            title: const Text('Filtered'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const EmptyFlexTable(
                  title: 'Empty Builder',
                ),
              ),
            ),
            title: const Text('Empty Builder'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const InitialFlexTableSizes(
                  sortable: true,
                  striped: true,
                  title: 'Inital Column Sizes',
                ),
              ),
            ),
            title: const Text('Inital Column Sizes'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const MixedWidgetsFlexTable(),
              ),
            ),
            title: const Text('Mixed Widgets'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const NotResizableFlexTable(
                  title: 'Not Resizable',
                ),
              ),
            ),
            title: const Text('Not Resizable'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/ev_data.csv',
                  title: '190k rows; Not Sortable',
                ),
              ),
            ),
            title: const Text('190k rows; Not Sortable'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/iou_zipcodes.csv',
                  title: '52k rows; Not Sortable',
                ),
              ),
            ),
            title: const Text('52k rows; Not Sortable'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/ev_data.csv',
                  sortable: true,
                  title: '190k rows; Sortable',
                ),
              ),
            ),
            title: const Text('190k rows; Sortable'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/iou_zipcodes.csv',
                  sortable: true,
                  tristate: true,
                  title: '52k rows; Sortable; Tristate',
                ),
              ),
            ),
            title: const Text('52k rows; Sortable; Tristate'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/ev_data.csv',
                  striped: true,
                  title: '190k rows; Not Sortable; Striped',
                ),
              ),
            ),
            title: const Text('190k rows; Not Sortable; Striped'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/iou_zipcodes.csv',
                  striped: true,
                  title: '52k rows; Not Sortable; Striped',
                ),
              ),
            ),
            title: const Text('52k rows; Not Sortable; Striped'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/ev_data.csv',
                  striped: true,
                  sortable: true,
                  tristate: true,
                  title: '190k rows; Sortable; Tristate; Striped',
                ),
              ),
            ),
            title: const Text('190k rows; Sortable; Tristate; Striped'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/iou_zipcodes.csv',
                  striped: true,
                  sortable: true,
                  title: '52k rows; Sortable; Striped',
                ),
              ),
            ),
            title: const Text('52k rows; Sortable; Striped'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/ev_data.csv',
                  filterable: true,
                  striped: true,
                  title: '190k rows; Filterable; Striped',
                ),
              ),
            ),
            title: const Text('190k rows; Filterable; Striped'),
          ),
          ListTile(
            onTap: () => Navigator.of(context).push(
              MaterialPageRoute(
                builder: (context) => const CsvViewer(
                  asset: 'assets/iou_zipcodes.csv',
                  filterable: true,
                  striped: true,
                  title: '52k rows; Filterable; Striped',
                ),
              ),
            ),
            title: const Text('52k rows; Filterable; Striped'),
          ),
        ],
      ),
    );
  }
}
copied to clipboard
0
likes
160
points
17
downloads

Publisher

verified publisherpeifferinnovations.com

Weekly Downloads

2024.09.29 - 2025.04.13

A table with flexible sized colums and an effectively unlimited number of rows that retains performance.

Repository (GitHub)

Documentation

API reference

License

MIT (license)

Dependencies

flutter, multi_split_view, popover, provider

More

Packages that depend on flexible_table