If a FutureBuilder starts an API request again after a rebuild, the usual problem is that the Future is being created inside build. Keep the future outside that method, or choose Riverpod or Bloc when the async state needs broader ownership or a more explicit workflow. FutureBuilder is not deprecated or inherently an anti-pattern: it works well for a local task when its future is retained and its builder only renders UI.
Why is my FutureBuilder calling the API again?
FutureBuilder renders UI from the latest snapshot of a Future. If you create that future while building the widget, a parent rebuild can create a new future, causing the asynchronous operation to run again. Flutter’s API documentation says the future must be obtained earlier—for example, in State.initState, State.didUpdateWidget, or State.didChangeDependencies, as appropriate to the inputs and lifecycle: Flutter FutureBuilder documentation.
A common cause is code like this:
FutureBuilder<List<Item>>(
future: repository.fetchItems(),
builder: (context, snapshot) {
// Render from snapshot.
},
)
Because repository.fetchItems() is evaluated while the widget is built, any rebuild can supply a newly created future. Retain it instead:
class ItemsPageState extends State<ItemsPage> {
late Future<List<Item>> _itemsFuture;
@override
void initState() {
super.initState();
_itemsFuture = repository.fetchItems();
}
@override
Widget build(BuildContext context) {
return FutureBuilder<List<Item>>(
future: _itemsFuture,
builder: (context, snapshot) {
// Render from snapshot.
},
);
}
}
If the future depends on a widget property that can change, update it in the lifecycle method suited to that change, such as didUpdateWidget, rather than recreating it on every build. Flutter controls when snapshot states are delivered, and a newly supplied, already-completed future can still show a waiting frame. Render loading, success, and error states rather than assuming completion will appear immediately.
#1 Best Overall
- Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
- Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
- Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
- Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
- 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
Keep the builder focused on rendering
The builder can run multiple times. Use its snapshot to return the appropriate widget; do not use it to trigger effects such as navigation, show a dialog, or make another request. Snapshots expose connection state and, when available, data or an error. Previous data may remain available while the configured future changes, so account for that when presenting refreshed content. See Flutter’s FutureBuilder API reference.
When a retained FutureBuilder is enough
For one screen-local computation with a straightforward lifecycle, retaining a future is often the smallest clear fix. Use FutureBuilder when the widget needs to render one future’s loading, result, or error and there is no meaningful need to share or manage that async state elsewhere.
Rank #2
- 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
- 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
- Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
- 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
- What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
- Obtain the future outside
build. - Choose its lifecycle based on whether the request is tied to initial screen setup or changing inputs.
- Keep the builder declarative: convert each snapshot into UI.
Adding a state-management package solely to prevent an inline future from restarting does not address a need the screen necessarily has. The key distinction is ownership and scope of async state, not that one widget is categorically wrong.
How Riverpod handles asynchronous state
Riverpod moves ownership of an async computation into a provider. A consumer widget can watch that provider through its Ref, and Riverpod’s FutureProvider represents a straightforward asynchronous value with loading, error, and data states. The Riverpod v2 documentation also describes caching and shows UI branching on AsyncValue: Riverpod FutureProvider documentation.
Rank #3
- Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
- Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
- Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
- Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
- What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
This can suit an async result that belongs in a provider graph, especially when provider composition or more than one consumer makes widget-local ownership awkward. The widget watches state and renders it, while the provider defines the computation and its dependencies. Exact APIs can vary by Riverpod version; check the documentation for the version used in your project.
Use a different provider for interaction-driven changes
FutureProvider is aimed at simple computations, not computations that users repeatedly modify through interactions. The cited Riverpod v2 documentation points to AsyncNotifierProvider for more advanced interaction-driven cases. Choose the provider around the behavior the feature needs rather than treating every request as a FutureProvider problem.
Rank #4
- Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
- Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
- Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
- Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
- Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
How Bloc handles an asynchronous workflow
Bloc organizes a feature as input events handled by business logic, which can call a repository asynchronously and emit states for the presentation layer. This is broader than swapping one widget for another: the event-to-state flow is part of how the feature is structured. The Bloc documentation describes the core concepts and Flutter integration.
Render states with BlocBuilder
BlocBuilder rebuilds UI in response to state changes. Its builder should be a pure rendering function; Bloc’s Flutter concepts documentation notes that it may be called many times. A BlocProvider can make the Bloc available through the widget tree’s context. See Bloc Flutter concepts.
Best Value
- 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
- Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
- Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
- HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
- What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Handle one-time effects with BlocListener
BlocListener is for reactions to state changes that should not be performed as part of rendering, such as navigation, showing a SnackBar, or opening a dialog. Its listener is not called for the initial state. If a widget needs both state-driven rendering and these reactions, BlocConsumer combines the builder and listener roles. See Bloc Flutter concepts.
Riverpod vs. Bloc vs. FutureBuilder
| Decision | FutureBuilder | Riverpod | Bloc |
|---|---|---|---|
| Where async state lives | In a future retained by the widget or its state. | In a provider; FutureProvider represents a straightforward async value. |
In states emitted by business logic, typically in response to events. |
| How the UI observes it | The builder receives a snapshot. | A consumer watches a provider through Ref. |
BlocBuilder renders states; BlocProvider can provide the instance through context. |
| Interaction-driven changes | Manage the future lifecycle and inputs in the widget’s state. | For advanced interaction-driven changes, the cited v2 docs point to AsyncNotifierProvider. |
Represent inputs as events and handle them to produce new states. |
| One-time UI effects | The builder is for rendering; do not trigger effects from it. | The cited FutureProvider material does not establish a full side-effect comparison. | BlocListener handles reactions such as navigation, dialogs, and SnackBars. |
| Best fit | A local async result with a correctly retained future. | Provider-owned async state, provider composition, or consumers that need to watch the result. | A feature that benefits from an explicit event-to-state workflow and separate effect handling. |
These are differences in abstraction, not benchmark results. Flutter’s architecture case study presents Riverpod and flutter_bloc among the available options alongside SDK tools; it does not prescribe a universal winner: Flutter architecture case study: state management.
How to choose for an API request
- Keep FutureBuilder if the result is local to one widget, its future can be retained at the right lifecycle point, and the builder only renders snapshots.
- Choose Riverpod if the async result belongs in a provider graph or provider-managed state better serves its consumers. Use
FutureProviderfor a simple read; consider the documentedAsyncNotifierProviderdirection when user interactions modify the computation. - Choose Bloc if the feature benefits from explicit events, business logic that handles repository calls, emitted UI states, and a distinct place for one-time effects.
- Follow the app’s conventions when an architecture is already established. The relevant trade-offs are state lifetime and sharing, interaction complexity, async-state handling, event traceability, effect handling, and team familiarity—not a documented speed advantage.
There is no evidence here establishing that Riverpod or Bloc is universally faster or better. The right choice depends on the feature’s workflow and the architecture your team can apply consistently.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Free tools Windows power users keep installed
One-click scans. No signup required.

