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.

✨ Key Features
- 🖥️ Responsive Layouts: Built-in
TLayoutwith responsiveTSidebar(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, andTFilePicker. - 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
TThemeextension for granular control over widget styling (Buttons, Inputs, Tables, Cards, etc.) independent of the global material theme. - Dark mode support out of the box.
- Extensive
- 🧩 Atoms & Molecules:
- Buttons:
TButtonwith variants (solid, tonal, outline, icon, text) and loading states. - Chips:
TChipwith various styles. - Dialogs & Overlays:
TModal,TAlert,TPopup, andTTooltip. - Cards:
TCardwith standardized elevations and padding.
- Buttons:
📦 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
- layouts/widgets/logo
- mixins/focus_mixin
- mixins/input_field_mixin
- mixins/input_validation_mixin
- mixins/input_value_mixin
- mixins/popup_mixin
- mixins/scroll_mixin
- te_widgets
- widgets/alert/alert
- widgets/alert/alert_service
- widgets/alert/alert_theme
- 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/modal/modal
- widgets/modal/modal_config
- widgets/modal/modal_service
- 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/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