super_table_field 3.2.2 copy "super_table_field: ^3.2.2" to clipboard
super_table_field: ^3.2.2 copied to clipboard

Super Table Field — a GeniusLink Flutter design-system package for ERP and accounting data grids. Includes read/edit modes, typed columns, change tracking, filtering, aggregations, selection stats, co [...]

example/lib/main.dart

// ============================================================
// example/lib/main.dart
// ------------------------------------------------------------
// Gallery launcher for super_table_field. Uses the super_core 3.3.0 Material
// theme with explicit SuperTextTheme typography, exposes Light/Dark + LTR/RTL
// toggle, and lists the shipped demos:
//   • SuperTable — the unified grid. Switch to Editable and double-click the
//     "Unit" cell: it is a `combo` column edited through the SuperAutoSuggestionsBox.
// ============================================================

import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:super_auto_suggestion_box/super_auto_suggestion_box.dart'
    show SuperAutoSuggestionLocalization;
import 'package:super_form_field/super_form_field.dart';
import 'package:super_table_field/super_table_field.dart';
import 'package:super_core/super_core.dart';
import 'package:super_table_field_example/localizations/generated/l10n.dart';

import 'examples/example_1_readonly_report.dart';
import 'examples/example_2_editable_journal.dart';
import 'examples/example_3_async_combo.dart';
import 'examples/example_4_controller_driven.dart';
import 'examples/example_5_styling_and_filters.dart';
import 'examples/example_6_playground.dart';
import 'examples/example_7_change_tracking.dart';
import 'examples/example_8_selection_stats.dart';
import 'examples/example_9_export.dart';
import 'examples/example_10_aggregations.dart';
import 'examples/example_11_cell_locking.dart';
import 'examples/example_12_row_reorder.dart';
import 'examples/example_13_group_aggregates.dart';
import 'examples/example_14_expandable_rows.dart';
import 'examples/example_15_validation_views.dart';
import 'examples/example_16_fill_and_footers.dart';
import 'examples/example_17_interaction_events.dart';
import 'examples/example_18_column_config.dart';
import 'examples/example_19_showcase.dart';
import 'examples/example_20_table_styles.dart';
import 'examples/example_21_column_width_fit.dart';
import 'examples/example_22_big_data_load_more.dart';
import 'examples/example_23_enumeration_select.dart';
import 'super_table_demo.dart';

void main() => runApp(const ExampleApp());

class ExampleApp extends StatefulWidget {
  const ExampleApp({super.key});

  @override
  State<ExampleApp> createState() => _ExampleAppState();
}

class _ExampleAppState extends State<ExampleApp> {
  ThemeMode _mode = ThemeMode.dark;
  TextDirection _dir = TextDirection.ltr;

  void _toggleTheme() => setState(
    () => _mode = _mode == ThemeMode.dark ? ThemeMode.light : ThemeMode.dark,
  );
  void _toggleDir() => setState(
    () => _dir = _dir == TextDirection.ltr
        ? TextDirection.rtl
        : TextDirection.ltr,
  );

  @override
  Widget build(BuildContext context) {
    final typography = SuperTextTheme(isArabic: _dir == TextDirection.rtl);

    return MaterialApp(
      debugShowCheckedModeBanner: false,
      onGenerateTitle: (context) =>
          SuperTableExampleLocalization.of(context).appTitle,
      themeMode: _mode,
      theme: SuperMaterialThemeData.light(
        textTheme: typography,
        primaryTextTheme: typography,
      ),
      darkTheme: SuperMaterialThemeData.dark(
        textTheme: typography,
        primaryTextTheme: typography,
      ),
      locale: _dir == TextDirection.rtl
          ? const Locale('ar')
          : const Locale('en'),
      localizationsDelegates: const [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        SuperTableLocalization.delegate,
        SuperFormTranslation.delegate,
        SuperAutoSuggestionLocalization.delegate,
        SuperTableExampleLocalization.delegate,
      ],
      supportedLocales: SuperTableExampleLocalization.supportedLocales,
      builder: (context, child) {
// return Directionality(textDirection: _dir, child: child!);
        return child!;
      },
      home: _Launcher(
        mode: _mode,
        dir: _dir,
        onToggleTheme: _toggleTheme,
        onToggleDir: _toggleDir,
      ),
    );
  }
}

class _Demo {
  final String title;
  final String subtitle;
  final IconData icon;
  final WidgetBuilder builder;
  const _Demo(this.title, this.subtitle, this.icon, this.builder);
}

class _Launcher extends StatelessWidget {
  const _Launcher({
    required this.mode,
    required this.dir,
    required this.onToggleTheme,
    required this.onToggleDir,
  });

  final ThemeMode mode;
  final TextDirection dir;
  final VoidCallback onToggleTheme;
  final VoidCallback onToggleDir;

  List<_Demo> _demos(BuildContext context) => [
    _Demo(
      SuperTableExampleLocalization.of(context).superTable,
      SuperTableExampleLocalization.of(context).superTableDescription,
      Icons.grid_on_outlined,
      (_) => const SuperTableDemo(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).oneReadOnlyReport,
      SuperTableExampleLocalization.of(context).readOnlyReportDescription,
      Icons.assessment_outlined,
      (_) => const ReadonlyReportExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).twoEditableJournal,
      SuperTableExampleLocalization.of(context).validatorPlusOnChangeCtrlPlusEnterInsertLiveBalance,
      Icons.edit_note_outlined,
      (_) => const EditableJournalExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).threeAsyncCombo,
      SuperTableExampleLocalization.of(context).asyncComboDescription,
      Icons.cloud_sync_outlined,
      (_) => const AsyncComboExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).fourControllerDriven,
      SuperTableExampleLocalization.of(context).controllerDrivenDescription,
      Icons.tune_outlined,
      (_) => const ControllerDrivenExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).fiveStylingAndFilters,
      SuperTableExampleLocalization.of(context).stylingAndFiltersDescription,
      Icons.palette_outlined,
      (_) => const StylingAndFiltersExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).sixPlayground,
      SuperTableExampleLocalization.of(context).playgroundDescription,
      Icons.dashboard_customize_outlined,
      (_) => const PlaygroundExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).sevenChangeTracking,
      SuperTableExampleLocalization.of(context).changeTrackingDescription,
      Icons.fact_check_outlined,
      (_) => const ChangeTrackingExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).eightSelectionStatistics,
      SuperTableExampleLocalization.of(context).selectionStatisticsDescription,
      Icons.functions_outlined,
      (_) => const SelectionStatsExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).nineExport,
      SuperTableExampleLocalization.of(context).exportDescription,
      Icons.file_download_outlined,
      (_) => const ExportExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).tenAggregations,
      SuperTableExampleLocalization.of(context).aggregationsDescription,
      Icons.summarize_outlined,
      (_) => const AggregationsExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).elevenCellLocking,
      SuperTableExampleLocalization.of(context).cellLockingDescription,
      Icons.lock_outline,
      (_) => const CellLockingExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).twelveRowReordering,
      SuperTableExampleLocalization.of(context).rowReorderingDescription,
      Icons.swap_vert_outlined,
      (_) => const RowReorderExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).thirteenGroupAggregatesHiddenColumns,
      SuperTableExampleLocalization.of(context).groupAggregatesDescription,
      Icons.account_tree_outlined,
      (_) => const GroupAggregatesExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).fourteenExpandableRows,
      SuperTableExampleLocalization.of(context).expandableRowsDescription,
      Icons.unfold_more_outlined,
      (_) => const ExpandableRowsExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).fifteenValidationSavedViews,
      SuperTableExampleLocalization.of(context).validationAndSavedViewsDescription,
      Icons.rule_outlined,
      (_) => const ValidationViewsExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).sixteenFillGroupFootersRevert,
      SuperTableExampleLocalization.of(context).fillAndGroupFootersDescription,
      Icons.south_outlined,
      (_) => const FillAndFootersExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).seventeenInteractionEvents,
      SuperTableExampleLocalization.of(context).interactionEventsDescription,
      Icons.ads_click_outlined,
      (_) => const InteractionEventsExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).eighteenColumnConfig,
      SuperTableExampleLocalization.of(context).columnConfigDescription,
      Icons.view_column_outlined,
      (_) => const ColumnConfigExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).nineteenShowcase,
      SuperTableExampleLocalization.of(context)
          .interactionsPlusColumnManagerPlusGroupingPlusTotalsPlusTrackingPc4d7ca8,
      Icons.dashboard_outlined,
      (_) => const ShowcaseExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).twentyTableStyles,
      SuperTableExampleLocalization.of(context)
          .optionalSuperTableStylePresetsBandingGroupFootersTotals,
      Icons.table_chart_outlined,
      (_) => const TableStylesExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).twentyOneColumnWidthFit,
      SuperTableExampleLocalization.of(context).noneAutoMaxCellFitResponsiveViewportSizing,
      Icons.width_normal_outlined,
      (_) => const ColumnWidthFitExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).twentyTwoBigDataLoadMore,
      SuperTableExampleLocalization.of(context).message1k5k10kRowsPerLoad100kMaxPerformanceCounters,
      Icons.speed_rounded,
      (_) => const BigDataLoadMoreExample(),
    ),
    _Demo(
      SuperTableExampleLocalization.of(context).twentyThreeEnumerationSelect,
      SuperTableExampleLocalization.of(context)
          .superEnumerationColumnSuperSelectFormFieldRowAwareSources,
      Icons.list_alt_outlined,
      (_) => const EnumerationSelectExample(),
    ),
  ];

  @override
  Widget build(BuildContext context) {
    final theme = context.superTheme;
    final spacing = theme.spacing;
    final colorScheme = Theme.of(context).colorScheme;

    return Scaffold(
      backgroundColor: theme.bg,
      appBar: AppBar(
        backgroundColor: theme.bg,
        surfaceTintColor: Colors.transparent,
        actions: [
          IconButton(
            tooltip: mode == ThemeMode.dark
                ? SuperTableExampleLocalization.of(context).lightTheme
                : SuperTableExampleLocalization.of(context).darkTheme,
            onPressed: onToggleTheme,
            icon: Icon(
              mode == ThemeMode.dark
                  ? Icons.light_mode_rounded
                  : Icons.dark_mode_rounded,
            ),
          ),
          IconButton(
            tooltip: dir == TextDirection.ltr
                ? SuperTableExampleLocalization.of(context).switchToArabic
                : SuperTableExampleLocalization.of(context).switchToEnglish,
            onPressed: onToggleDir,
            icon: const Icon(Icons.language_rounded),
          ),
        ],
      ),
      body: SafeArea(
        child: SingleChildScrollView(
          child: SuperScaffold(
            maxWidth: 1120,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: [
                Text(
                  SuperTableExampleLocalization.of(context).galleryEyebrow,
                  style: context.superTextTheme.eyebrow.copyWith(
                    color: colorScheme.primary,
                  ),
                ),
                SizedBox(height: spacing.space2),
                Text(
                  SuperTableExampleLocalization.of(context).componentDemoseb5e41,
                  style: context.superTextTheme.h1.copyWith(color: theme.fg1),
                ),
                SizedBox(height: spacing.space8),
                for (final demo in _demos(context)) ...[
                  _DemoCard(demo: demo),
                  SizedBox(height: spacing.section),
                ],
              ],
            ),
          ),
        ),
      ),
    );
  }
}

class _DemoCard extends StatelessWidget {
  const _DemoCard({required this.demo});

  final _Demo demo;

  @override
  Widget build(BuildContext context) {
    final theme = context.superTheme;
    final spacing = theme.spacing;
    final colorScheme = Theme.of(context).colorScheme;

    return SuperSectionCard1(
      padding: EdgeInsets.zero,
      child: Material(
        color: Colors.transparent,
        child: InkWell(
          borderRadius: spacing.borderRadiusCard,
          onTap: () => Navigator.of(
            context,
          ).push(MaterialPageRoute<void>(builder: demo.builder)),
          child: Padding(
            padding: spacing.cardPadding,
            child: Row(
              children: [
                Container(
                  width: spacing.controlHeight,
                  height: spacing.controlHeight,
                  decoration: BoxDecoration(
                    color: Color.alphaBlend(
                      colorScheme.primary.withValues(alpha: 0.14),
                      theme.surface,
                    ),
                    borderRadius: spacing.borderRadiusControl,
                  ),
                  child: Icon(demo.icon, size: 22, color: colorScheme.primary),
                ),
                SizedBox(width: spacing.space4),
                Expanded(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Text(
                        demo.title,
                        style: context.superTextTheme.heading.copyWith(
                          color: theme.fg1,
                        ),
                      ),
                      SizedBox(height: spacing.space1),
                      Text(
                        demo.subtitle,
                        style: context.superTextTheme.caption.copyWith(
                          color: theme.fg3,
                        ),
                      ),
                    ],
                  ),
                ),
                Icon(Icons.chevron_right, color: theme.fg4),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
0
likes
145
points
643
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Super Table Field — a GeniusLink Flutter design-system package for ERP and accounting data grids. Includes read/edit modes, typed columns, change tracking, filtering, aggregations, selection stats, conditional styling, grouping, totals, pagination, CSV/TSV/JSON export, row reordering, cell locking, interaction events, runtime column config (reorder/pin/show-hide), clipboard, undo/redo, and SuperAutoSuggestionsBox integration. Supports light/dark themes and LTR/RTL via SuperMaterialThemeData.

Homepage
Repository (GitHub)
View/report issues

Topics

#flutter #widget #data-grid #tables #form

License

MIT (license)

Dependencies

flutter, flutter_localizations, intl, super_auto_suggestion_box, super_core, super_form_field

More

Packages that depend on super_table_field