๐Ÿ“ฆ 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
Loading Error Success

๐Ÿš€ 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!



Libraries

page_state_builder