• Casey Rogers's avatar
    Make `future` and `stream` required arguments in their respective builder widgets (#125838) · 4d86f5d0
    Casey Rogers authored
    cc'ing existing conversation participants: @domesticmouse @srawlins
    cc'ing to request review: @goderbauer 
    
    This PR makes the following constructor arguments required:
    1. `FutureBuilder.future`
    2. `StreamBuilderBase.stream`
    3. `StreamBuilder.stream`
    
    This fixes:
    https://github.com/flutter/flutter/issues/83081
    https://github.com/flutter/flutter/issues/125188 (dupe of 83081)
    
    This obviates:
    https://github.com/dart-lang/linter/issues/4309
    (I suggest we skip straight to merging this PR as this should be a low impact breaking change-assuming few to no devs are intentionally using the builders without their relevant arguments, however we could always merge 4309 first and then this)
    https://github.com/flutter/flutter/pull/83101 
    (The above PR required that at least one of future and initial data be non-null, this is undesirable as there are plenty of valid reasons to have both arguments be null)
    
    See above issues for a deeper dive, but here is a summary:
    It is very easy for a developer to forget to specify `future` or `stream` when using the respective `*Builder` widgets. This produces a non-obvious failure where the UI sits in a "no data yet received" state. It is easy for a dev to misinterpret this as the async work backing the future/stream hanging and they thus waste a lot of time trying to debug the async work.
    As such, we should require these two constructor arguments to make it impossible/much harder for devs to make this time-wasting mistake.
    
    This is a breaking change. However, it should break only a small number of active projects given that using a builder without specifying `future` or `stream` seems highly niche.
    The only place I've found non-accidental examples of this is in widget tests where you're calling `pumpWidget` with and without these arguments to test `*Builder.didUpdateWidget`'s behavior. In this and similar cases, it is a trivial fix to add `future: null`/`stream: null`.
    
    *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].*
    4d86f5d0
Name
Last commit
Last update
..
_platform_selectable_region_context_menu_io.dart Loading commit data...
_platform_selectable_region_context_menu_web.dart Loading commit data...
actions.dart Loading commit data...
animated_cross_fade.dart Loading commit data...
animated_scroll_view.dart Loading commit data...
animated_size.dart Loading commit data...
animated_switcher.dart Loading commit data...
annotated_region.dart Loading commit data...
app.dart Loading commit data...
async.dart Loading commit data...
autocomplete.dart Loading commit data...
autofill.dart Loading commit data...
automatic_keep_alive.dart Loading commit data...
banner.dart Loading commit data...
basic.dart Loading commit data...
binding.dart Loading commit data...
bottom_navigation_bar_item.dart Loading commit data...
color_filter.dart Loading commit data...
constants.dart Loading commit data...
container.dart Loading commit data...
context_menu_button_item.dart Loading commit data...
context_menu_controller.dart Loading commit data...
debug.dart Loading commit data...
default_selection_style.dart Loading commit data...
default_text_editing_shortcuts.dart Loading commit data...
desktop_text_selection_toolbar_layout_delegate.dart Loading commit data...
dismissible.dart Loading commit data...
display_feature_sub_screen.dart Loading commit data...
disposable_build_context.dart Loading commit data...
drag_target.dart Loading commit data...
draggable_scrollable_sheet.dart Loading commit data...
dual_transition_builder.dart Loading commit data...
editable_text.dart Loading commit data...
fade_in_image.dart Loading commit data...
focus_manager.dart Loading commit data...
focus_scope.dart Loading commit data...
focus_traversal.dart Loading commit data...
form.dart Loading commit data...
framework.dart Loading commit data...
gesture_detector.dart Loading commit data...
grid_paper.dart Loading commit data...
heroes.dart Loading commit data...
icon.dart Loading commit data...
icon_data.dart Loading commit data...
icon_theme.dart Loading commit data...
icon_theme_data.dart Loading commit data...
image.dart Loading commit data...
image_filter.dart Loading commit data...
image_icon.dart Loading commit data...
implicit_animations.dart Loading commit data...
inherited_model.dart Loading commit data...
inherited_notifier.dart Loading commit data...
inherited_theme.dart Loading commit data...
interactive_viewer.dart Loading commit data...
keyboard_listener.dart Loading commit data...
layout_builder.dart Loading commit data...
list_wheel_scroll_view.dart Loading commit data...
localizations.dart Loading commit data...
lookup_boundary.dart Loading commit data...
magnifier.dart Loading commit data...
media_query.dart Loading commit data...
modal_barrier.dart Loading commit data...
navigation_toolbar.dart Loading commit data...
navigator.dart Loading commit data...
nested_scroll_view.dart Loading commit data...
notification_listener.dart Loading commit data...
orientation_builder.dart Loading commit data...
overflow_bar.dart Loading commit data...
overlay.dart Loading commit data...
overscroll_indicator.dart Loading commit data...
page_storage.dart Loading commit data...
page_view.dart Loading commit data...
pages.dart Loading commit data...
performance_overlay.dart Loading commit data...
placeholder.dart Loading commit data...
platform_menu_bar.dart Loading commit data...
platform_selectable_region_context_menu.dart Loading commit data...
platform_view.dart Loading commit data...
preferred_size.dart Loading commit data...
primary_scroll_controller.dart Loading commit data...
raw_keyboard_listener.dart Loading commit data...
reorderable_list.dart Loading commit data...
restoration.dart Loading commit data...
restoration_properties.dart Loading commit data...
router.dart Loading commit data...
routes.dart Loading commit data...
safe_area.dart Loading commit data...
scroll_activity.dart Loading commit data...
scroll_aware_image_provider.dart Loading commit data...
scroll_configuration.dart Loading commit data...
scroll_context.dart Loading commit data...
scroll_controller.dart Loading commit data...
scroll_delegate.dart Loading commit data...
scroll_metrics.dart Loading commit data...
scroll_notification.dart Loading commit data...
scroll_notification_observer.dart Loading commit data...
scroll_physics.dart Loading commit data...
scroll_position.dart Loading commit data...
scroll_position_with_single_context.dart Loading commit data...
scroll_simulation.dart Loading commit data...
scroll_view.dart Loading commit data...
scrollable.dart Loading commit data...
scrollable_helpers.dart Loading commit data...
scrollbar.dart Loading commit data...
selectable_region.dart Loading commit data...
selection_container.dart Loading commit data...
semantics_debugger.dart Loading commit data...
service_extensions.dart Loading commit data...
shared_app_data.dart Loading commit data...
shortcuts.dart Loading commit data...
single_child_scroll_view.dart Loading commit data...
size_changed_layout_notifier.dart Loading commit data...
sliver.dart Loading commit data...
sliver_fill.dart Loading commit data...
sliver_layout_builder.dart Loading commit data...
sliver_persistent_header.dart Loading commit data...
sliver_prototype_extent_list.dart Loading commit data...
slotted_render_object_widget.dart Loading commit data...
snapshot_widget.dart Loading commit data...
spacer.dart Loading commit data...
spell_check.dart Loading commit data...
status_transitions.dart Loading commit data...
table.dart Loading commit data...
tap_and_drag_gestures.dart Loading commit data...
tap_region.dart Loading commit data...
text.dart Loading commit data...
text_editing_intents.dart Loading commit data...
text_selection.dart Loading commit data...
text_selection_toolbar_anchors.dart Loading commit data...
text_selection_toolbar_layout_delegate.dart Loading commit data...
texture.dart Loading commit data...
ticker_provider.dart Loading commit data...
title.dart Loading commit data...
transitions.dart Loading commit data...
tween_animation_builder.dart Loading commit data...
undo_history.dart Loading commit data...
unique_widget.dart Loading commit data...
value_listenable_builder.dart Loading commit data...
view.dart Loading commit data...
viewport.dart Loading commit data...
visibility.dart Loading commit data...
widget_inspector.dart Loading commit data...
widget_span.dart Loading commit data...
will_pop_scope.dart Loading commit data...
window.dart Loading commit data...