Replace blank screens and cryptic errors with branded error pages. Create separate Components for network errors, page not found, and empty search results. Each includes an illustration, descriptive message, and action buttons — Retry to reload data and Go Home as a fallback. Use Conditional Visibility tied to Backend Query error states and the connectivity_plus package to detect network issues.
Building Friendly Error Screens in FlutterFlow
Users will encounter errors — network drops, missing pages, empty search results. A blank screen with no explanation is the worst experience. This tutorial builds three reusable error Components with clear messages and recovery actions.
Prerequisites
- A FlutterFlow project open in the builder
- Error illustration images or Lottie animations
- Understanding of Backend Queries and Conditional Visibility
Step-by-step guide
Create a NetworkError Component with retry functionality
Create a NetworkError Component with retry functionality
Create a Component called NetworkErrorWidget. Layout: Column (mainAxisAlignment: center, crossAxisAlignment: center). Children: Image widget (wifi_off illustration, 150x150), SizedBox(24), Text 'No Internet Connection' (Headline Small), SizedBox(8), Text 'Check your connection and try again.' (Body Medium, grey), SizedBox(24), Button 'Retry' (Primary, On Tap: Action Parameter callback onRetry). The onRetry callback lets the parent page re-execute its Backend Query.
Expected result: A centered error screen with connectivity message and a Retry button.
Create a NotFoundError Component for missing pages or data
Create a NotFoundError Component for missing pages or data
Create NotFoundWidget: Column centered with Image (404 illustration), Text 'Page Not Found' (Headline Small), Text 'The page you are looking for does not exist.' (Body Medium, grey), two Buttons: 'Go Back' (On Tap: Navigator Pop) and 'Go Home' (On Tap: Navigate to HomePage with Replace Route). This handles deep links to deleted content or manual URL entry.
Expected result: A 404 error page with navigation options to go back or go home.
Create an EmptyState Component for zero search results
Create an EmptyState Component for zero search results
Create EmptyStateWidget with parameter: message (String). Layout: Column centered with Image (empty box illustration), Text bound to message param (Body Medium, grey), optional Button 'Browse All' or 'Clear Filters'. Use this inside ListViews and GridViews when the Backend Query returns zero results — wrap the list and EmptyState in a Stack or use Conditional Visibility based on query result count.
Expected result: A friendly empty state message shown when a query returns no results.
Show the correct error Component based on Backend Query state
Show the correct error Component based on Backend Query state
On your data page, use a Stack with three layers: (1) your actual content Column, (2) NetworkErrorWidget with Conditional Visibility when connectivity fails, (3) EmptyStateWidget when query returns empty. For Backend Query errors, add an On Error branch in the Action Flow that sets a Page State errorType variable. Use Conditional Visibility on each error Component based on errorType value.
Expected result: The correct error screen shows based on whether the failure is network, data, or empty results.
Add network connectivity detection with a Custom Action
Add network connectivity detection with a Custom Action
Add the connectivity_plus package to Pubspec Dependencies. Create a Custom Action called checkConnectivity that returns a boolean. Use Connectivity().checkConnectivity() — returns ConnectivityResult.none if offline. Call this action before Backend Queries or on error to determine if the issue is network-related. If offline, show NetworkErrorWidget. If online but query failed, show a generic error.
1import 'package:connectivity_plus/connectivity_plus.dart';23Future<bool> checkConnectivity() async {4 final result = await Connectivity().checkConnectivity();5 return result != ConnectivityResult.none;6}Expected result: The Custom Action detects network status and informs which error Component to display.
Complete working example
1COMPONENTS:231. NetworkErrorWidget4 Column (center)5 Image (wifi_off, 150x150)6 Text "No Internet Connection" (Headline Small)7 Text "Check your connection and try again." (Body Medium, grey)8 Button "Retry" → Execute Callback onRetry9102. NotFoundWidget11 Column (center)12 Image (404 illustration, 150x150)13 Text "Page Not Found" (Headline Small)14 Text "The page you are looking for does not exist." (Body Medium, grey)15 Row16 Button "Go Back" → Navigator Pop17 Button "Go Home" → Navigate(Replace) HomePage18193. EmptyStateWidget20 Parameters: message (String)21 Column (center)22 Image (empty box, 120x120)23 Text (message param, Body Medium, grey)24 Button "Browse All" (optional)2526PAGE INTEGRATION:27 Stack28 ├── Content Column (Visibility: no error)29 ├── NetworkErrorWidget (Visibility: errorType == 'network')30 ├── EmptyStateWidget (Visibility: queryResults.isEmpty)31 └── GenericErrorWidget (Visibility: errorType == 'server')3233CUSTOM ACTION: checkConnectivity()34 Returns bool (true = online, false = offline)Common mistakes when creating a Custom Error Screen for Your FlutterFlow App
Why it's a problem: Showing a generic 'Error' text with no way for users to recover
How to avoid: Always provide a descriptive message explaining the problem and a Retry button or Go Home fallback.
Why it's a problem: Placing the error Component inside the Backend Query widget
How to avoid: Place error Components OUTSIDE the Backend Query widget, controlled by Conditional Visibility based on error state.
Why it's a problem: Not distinguishing between network errors and server errors
How to avoid: Use connectivity_plus to check network first. If online but query fails, show a different message about server issues.
Best practices
- Always provide a Retry button on error screens to let users recover without navigating
- Include a Go Home fallback so users are never completely stuck
- Use different error Components for network, server, and empty state scenarios
- Add descriptive messages that tell users what happened and what to do
- Show empty state illustrations instead of blank lists when queries return zero results
- Detect network connectivity to show appropriate error messages
- Log errors to analytics for debugging (Custom Action with print or analytics event)
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I want to build custom error screens in FlutterFlow for network errors, 404 not found, and empty search results. Each should have an illustration, descriptive message, and action buttons (Retry, Go Home). Include network detection using connectivity_plus.
Create a centered Column with an image, a heading text, a subtitle text, and two buttons below for my error screen.
Frequently asked questions
How do I handle errors from API calls?
Wrap API calls in Custom Actions with try/catch blocks. On catch, return an error type string. In the Action Flow, check the return value and show the appropriate error Component.
Can I add a 'Report Issue' button on error screens?
Yes. Add a secondary button that opens a feedback form or sends a pre-filled email with the error details. This helps you identify and fix recurring issues.
Should I show error screens for form validation errors?
No. Form validation errors should show inline error messages on the fields themselves, not a full error screen. Error screens are for data loading failures and navigation errors.
How do I test the network error screen?
On a physical device, enable airplane mode and navigate to the page. The connectivity check returns offline and your NetworkErrorWidget should display.
Can I animate the transition between loading and error states?
Yes. Use AnimatedSwitcher in a Custom Widget that cross-fades between loading, content, and error children based on a state variable.
Can RapidDev help build comprehensive error handling?
Yes. RapidDev can implement global error boundaries, automatic retry with exponential backoff, offline caching, and centralized error logging.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation