te_widgets

A comprehensive, opinionated collection of high-quality Flutter widgets designed for building enterprise-grade applications with speed and consistency.

te_widgets provides a robust set of UI components, form builders, and layout utilities that adhere to a unified design system. From powerful data tables and dynamic forms to responsive sidebars and polished input fields, this package aims to reduce boilerplate and ensure visual consistency across your app.

Screenshot 1 Screenshot 2 Screenshot 3

✨ Key Features

  • 🖥️ Responsive Layouts: Built-in TLayout with responsive TSidebar (drawer/rail/minimized modes) integration.
  • 📝 Advanced Forms:
    • TFormBuilder: Create complex forms with validation and state management easily.
    • Rich Input Fields: TTextField, TNumberField (decimal/integer), TTagsField, TSelect, TMultiSelect, TDatePicker, TTimePicker, and TFilePicker.
    • Validation: Built-in validation mixins and rules (required, email, min/max, etc.).
  • 📊 Powerful Data Tables:
    • TDataTable: Server-side pagination, sorting, filtering, expandable rows, and sticky headers.
    • TCrudTable: A wrapper for rapid CRUD operations.
  • 🎨 Theming System:
    • Extensive TTheme extension for granular control over widget styling (Buttons, Inputs, Tables, Cards, etc.) independent of the global material theme.
    • Dark mode support out of the box.
  • 🧩 Atoms & Molecules:
    • Buttons: TButton with variants (solid, tonal, outline, icon, text) and loading states.
    • Chips: TChip with various styles.
    • Dialogs & Overlays: TModal, TAlert, TPopup, and TTooltip.
    • Cards: TCard with standardized elevations and padding.

📦 Installation

Add this to your pubspec.yaml:

dependencies:
  te_widgets: ^2.0.4

🚀 Getting Started

1. Setup Theme

Wrap your application with the TTheme extensions or configure your ThemeData to utilize te_widgets defaults.

import 'package:te_widgets/te_widgets.dart';

MaterialApp(
  theme: ThemeData(
    extensions: [
      TWidgetThemeExtension.light, // Or .dark
    ],
  ),
  // ...
);

2. Basic Layout

Use TLayout to quickly scaffold a responsive application structure with a sidebar.

TLayout(
  logo: TLogo(text: 'My App'),
  items: [
    TSidebarItem(icon: Icons.dashboard, text: 'Dashboard', route: '/'),
    TSidebarItem(icon: Icons.settings, text: 'Settings', route: '/settings'),
  ],
  child: MyPage(),
);

3. Building a Form

Use TFormBuilder to create robust forms with validation.

class UserForm extends TFormBase {
  final name = TFieldProp('');
  final email = TFieldProp('');
  final role = TFieldProp<String?>(null);

  @override
  List<TFormField> get fields => [
    TFormField.text(name, 'Full Name', isRequired: true),
    TFormField.text(email, 'Email Address', 
      rules: [Validations.email('Invalid email')]
    ),
    TFormField.select<String, String, String>(
        role, 
        'Role',
        options: ['Admin', 'User', 'Guest'],
        itemText: (item) => item,
        itemKey: (item) => item,
    ),
  ];
}

// In your widget:
final form = UserForm();

// Show as a modal
TFormService.show(context, form);

4. Data Tables

Create sophisticated tables with minimal code.

TDataTable<User, int>(
  headers: [
    TTableHeader.text('ID', (user) => user.id.toString()),
    TTableHeader.text('Name', (user) => user.name),
    TTableHeader.chip('Status', 
      (user) => user.status, 
      color: (user) => user.isActive ? Colors.green : Colors.red
    ),
  ],
  onLoad: (options) async {
    // Fetch data from API based on options.page, options.search, etc.
    return await fetchUsers(options);
  },
);

🛠️ Widgets Overview

Category Widgets
Inputs TTextField, TNumberField, TSelect, TMultiSelect, TCheckbox, TSwitch, TRadio
Pickers TDatePicker, TTimePicker, TFilePicker
Display TCard, TChip, TBadge, TAvatar, TImage
Feedback TAlert, TToast, TModal, TLoading
Layout TLayout, TSidebar, THeader, TFooter
Data TList, TTable, TDataTable, TCrudTable

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

Libraries

configs/theme/app_colors
configs/theme/default_theme_data
configs/theme/theme_notifier
configs/widget-theme/input_field_theme
configs/widget-theme/widget_theme
configs/widget-theme/widget_theme_extension
enum/file_type
enum/input_size
enum/value_type
extensions/boolean_x
extensions/box_constraints_x
extensions/build_context_x
extensions/color_scheme_x
extensions/color_x
extensions/date_format_x
extensions/date_time_x
extensions/file_picker_result_x
extensions/iterable_x
extensions/kotlin_x
extensions/list_x
extensions/media_query_data_x
extensions/pdf_document_x
extensions/string_x
extensions/time_of_day_x
formatters/decimal_input_formatter
formatters/integer_input_formatter
helpers/color_helper
helpers/debouncer
helpers/search_filter
helpers/validations
helpers/widget_state_property_helper
layouts/layout
mixins/focus_mixin
mixins/input_field_mixin
mixins/input_validation_mixin
mixins/input_value_mixin
mixins/scroll_mixin
te_widgets
widgets/alert/alert
widgets/alert/alert_service
widgets/alert/alert_theme
widgets/button/button
widgets/card/card
widgets/checkbox/checkbox
widgets/checkbox/checkbox_config
widgets/checkbox/checkbox_decoration
widgets/checkbox/checkbox_group
widgets/chip/chip
widgets/crud-table/crud_table
widgets/crud-table/crud_table_config
widgets/data-table/data_table
widgets/date-picker/date_picker
widgets/date-time-picker/date_time_picker
widgets/file-picker/file
widgets/file-picker/file_picker
widgets/file-picker/file_picker_theme
widgets/form/form_builder
widgets/form/form_service
widgets/form/items_form_builder
widgets/guard/guard
widgets/guard/guard_config
widgets/hoverable/hoverable
widgets/icon/icon
widgets/image/image
widgets/key-value-section/key_value
widgets/key-value-section/key_value_section
widgets/key-value-section/key_value_theme
widgets/lazy-indexed-stack/lazy_indexed_stack
widgets/list/controller/list_controller
widgets/list/list
widgets/list/list_animation
widgets/list/list_card
widgets/list/list_card_theme
widgets/list/list_config
widgets/list/list_mixin
widgets/list/list_scope
widgets/list/list_state
widgets/list/list_theme
widgets/list/list_view
widgets/loading-icon/loading_icon
widgets/number-field/number_field
widgets/number-field/number_field_theme
widgets/pagination/pagination
widgets/pdf/pdf_config
widgets/pdf/pdf_table
widgets/pdf/pdf_table_config
widgets/reactive-selector/reactive_selector
widgets/scrollbar/scrollbar
widgets/select/multi_select
widgets/select/select
widgets/switch/switch
widgets/table/mobile-card/table_mobile_card
widgets/table/mobile-card/table_mobile_card_theme
widgets/table/row-card/table_row_card
widgets/table/row-card/table_row_card_theme
widgets/table/row-header/table_row_header
widgets/table/row-header/table_row_header_theme
widgets/table/table
widgets/table/table_header
widgets/table/table_scope
widgets/table/table_theme
widgets/tabs/tabs
widgets/tags-field/tags_controller
widgets/tags-field/tags_field
widgets/tags-field/tags_field_mixin
widgets/tags-field/tags_field_theme
widgets/text-field/text_field
widgets/text-field/text_field_mixin
widgets/text-field/text_field_theme
widgets/time-picker/clock_time_picker
widgets/time-picker/spinner_time_picker
widgets/time-picker/time_picker
widgets/toast/toast_service
widgets/tooltip/tooltip
widgets/tooltip/tooltip_config