๐ฆ page_state_builder
A simple and customizable Flutter widget to manage page states like loading, success, and error without boilerplate. Designed for clean and maintainable UI in apps where content is dynamically loaded.
โจ Features
- โ Show loading, error, or success states using one widget
- ๐จ Fully customizable widgets for loading and error states
- โป๏ธ Supports retry callbacks for error state
- ๐ Built with simplicity and clean UI in mind
- โ๏ธ Works well with state management libraries like GetX, Riverpod, Provider, etc.
๐ธ Preview
| Loading State | Error State | Success State |
|---|---|---|
๐ Installation
Add this to your pubspec.yaml:
dependencies:
page_state_builder: ^1.0.0
Then run:
flutter pub get
๐ ๏ธ Usage
PageStateBuilder(
state: PageState.loading, // or PageState.success / PageState.error
errorMessage: 'Something went wrong!',
onRetry: () => loadData(),
successBuilder: (_) => Text("Content loaded successfully!"),
);
๐ก With state management (e.g., GetX):
Obx(
() => PageStateBuilder(
state: controller.state.value,
errorMessage: controller.errorMessage.value,
onRetry: controller.loadData,
successBuilder: (_) => MyContentWidget(),
),
);
๐งฉ Customizing
You can pass your own loading and error widgets:
PageStateBuilder(
state: myState,
successBuilder: (_) => MySuccessWidget(),
loadingBuilder: (_) => CircularProgressIndicator(),
errorBuilder: (context) => MyCustomErrorWidget(),
);
๐ API Reference
| Parameter | Type | Description |
|---|---|---|
state |
PageState |
Required. Current state of the widget. |
successBuilder |
WidgetBuilder |
Required. Builder for success state UI. |
loadingBuilder |
WidgetBuilder? |
Optional. Custom widget for loading state. |
errorBuilder |
WidgetBuilder? |
Optional. Custom widget for error state. |
onRetry |
VoidCallback? |
Optional. Retry callback for error state. |
errorMessage |
String? |
Optional. Message to show when in error state. |
๐ฆ PageState Enum
enum PageState {
loading,
success,
error,
}
Use this enum to manage your UI flow more cleanly.
๐งช Example
final controller = Get.put(MyController());
PageStateBuilder(
state: controller.pageState,
errorMessage: controller.errorMessage,
onRetry: controller.fetchData,
successBuilder: (_) => MyDataView(),
);
๐ License
MIT License ยฉ 2025 KlevaCode
โค๏ธ Contributing
Feel free to fork and improve this widget. PRs are welcome!