diff --git a/packages/flutter/lib/src/cupertino/activity_indicator.dart b/packages/flutter/lib/src/cupertino/activity_indicator.dart index d4c1aafe14d..b624f902199 100644 --- a/packages/flutter/lib/src/cupertino/activity_indicator.dart +++ b/packages/flutter/lib/src/cupertino/activity_indicator.dart @@ -49,6 +49,7 @@ class _CupertinoActivityIndicatorState extends State @override void didUpdateWidget(CupertinoActivityIndicator oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.animating != oldWidget.animating) { if (widget.animating) _controller.repeat(); diff --git a/packages/flutter/lib/src/material/bottom_navigation_bar.dart b/packages/flutter/lib/src/material/bottom_navigation_bar.dart index 285c88f7890..d868495b1e1 100644 --- a/packages/flutter/lib/src/material/bottom_navigation_bar.dart +++ b/packages/flutter/lib/src/material/bottom_navigation_bar.dart @@ -291,6 +291,7 @@ class _BottomNavigationBarState extends State with TickerPr @override void didUpdateWidget(BottomNavigationBar oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.currentIndex != oldWidget.currentIndex) { if (widget.type == BottomNavigationBarType.shifting) _pushCircle(widget.currentIndex); diff --git a/packages/flutter/lib/src/material/date_picker.dart b/packages/flutter/lib/src/material/date_picker.dart index 2d8762086de..ab562739d54 100644 --- a/packages/flutter/lib/src/material/date_picker.dart +++ b/packages/flutter/lib/src/material/date_picker.dart @@ -372,6 +372,7 @@ class _MonthPickerState extends State { @override void didUpdateWidget(MonthPicker oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.selectedDate != oldWidget.selectedDate) { _dayPickerController = new PageController(initialPage: _monthDelta(widget.firstDate, widget.selectedDate)); _currentDisplayedMonthDate = diff --git a/packages/flutter/lib/src/material/dropdown.dart b/packages/flutter/lib/src/material/dropdown.dart index 0eaadc65b1d..385958aea52 100644 --- a/packages/flutter/lib/src/material/dropdown.dart +++ b/packages/flutter/lib/src/material/dropdown.dart @@ -480,6 +480,7 @@ class _DropdownButtonState extends State> { @override void didUpdateWidget(DropdownButton oldWidget) { + super.didUpdateWidget(oldWidget); _updateSelectedIndex(); } diff --git a/packages/flutter/lib/src/material/expand_icon.dart b/packages/flutter/lib/src/material/expand_icon.dart index 0c4140ab964..ade426e36b8 100644 --- a/packages/flutter/lib/src/material/expand_icon.dart +++ b/packages/flutter/lib/src/material/expand_icon.dart @@ -84,6 +84,7 @@ class _ExpandIconState extends State with SingleTickerProviderStateM @override void didUpdateWidget(ExpandIcon oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.isExpanded != oldWidget.isExpanded) { if (widget.isExpanded) { _controller.forward(); diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart index 8157c0427de..11aa6e9053d 100644 --- a/packages/flutter/lib/src/material/scaffold.dart +++ b/packages/flutter/lib/src/material/scaffold.dart @@ -196,6 +196,7 @@ class _FloatingActionButtonTransitionState extends State<_FloatingActionButtonTr @override void didUpdateWidget(_FloatingActionButtonTransition oldWidget) { + super.didUpdateWidget(oldWidget); final bool oldChildIsNull = oldWidget.child == null; final bool newChildIsNull = widget.child == null; if (oldChildIsNull == newChildIsNull && oldWidget.child?.key == widget.child?.key) diff --git a/packages/flutter/lib/src/material/text_field.dart b/packages/flutter/lib/src/material/text_field.dart index a42966e2c0a..3641bb335d0 100644 --- a/packages/flutter/lib/src/material/text_field.dart +++ b/packages/flutter/lib/src/material/text_field.dart @@ -183,6 +183,7 @@ class _TextFieldState extends State { @override void didUpdateWidget(TextField oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.controller == null && oldWidget.controller != null) _controller == new TextEditingController.fromValue(oldWidget.controller.value); else if (widget.controller != null && oldWidget.controller == null) diff --git a/packages/flutter/lib/src/material/time_picker.dart b/packages/flutter/lib/src/material/time_picker.dart index 17b4c632802..0367f5c4275 100644 --- a/packages/flutter/lib/src/material/time_picker.dart +++ b/packages/flutter/lib/src/material/time_picker.dart @@ -479,6 +479,7 @@ class _DialState extends State<_Dial> with SingleTickerProviderStateMixin { @override void didUpdateWidget(_Dial oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.mode != oldWidget.mode && !_dragging) _animateTo(_getThetaForTime(widget.selectedTime)); } diff --git a/packages/flutter/lib/src/widgets/async.dart b/packages/flutter/lib/src/widgets/async.dart index 9119fd20559..8bc039c7fdc 100644 --- a/packages/flutter/lib/src/widgets/async.dart +++ b/packages/flutter/lib/src/widgets/async.dart @@ -107,6 +107,7 @@ class _StreamBuilderBaseState extends State> { @override void didUpdateWidget(StreamBuilderBase oldWidget) { + super.didUpdateWidget(oldWidget); if (oldWidget.stream != widget.stream) { if (_subscription != null) { _unsubscribe(); @@ -419,6 +420,7 @@ class _FutureBuilderState extends State> { @override void didUpdateWidget(FutureBuilder oldWidget) { + super.didUpdateWidget(oldWidget); if (oldWidget.future != widget.future) { if (_activeCallbackIdentity != null) { _unsubscribe(); diff --git a/packages/flutter/lib/src/widgets/editable_text.dart b/packages/flutter/lib/src/widgets/editable_text.dart index 34b998e425a..d8800709b1d 100644 --- a/packages/flutter/lib/src/widgets/editable_text.dart +++ b/packages/flutter/lib/src/widgets/editable_text.dart @@ -236,6 +236,7 @@ class EditableTextState extends State implements TextInputClient { @override void didUpdateWidget(EditableText oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.controller != oldWidget.controller) { oldWidget.controller.removeListener(_didChangeTextEditingValue); widget.controller.addListener(_didChangeTextEditingValue); diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart index d26387394c1..e56cb97b8d1 100644 --- a/packages/flutter/lib/src/widgets/framework.dart +++ b/packages/flutter/lib/src/widgets/framework.dart @@ -831,7 +831,7 @@ abstract class State { /// /// If you override this, make sure your method starts with a call to /// super.didUpdateWidget(oldWidget). - // TODO(abarth): Add @mustCallSuper. + @mustCallSuper @protected void didUpdateWidget(covariant T oldWidget) { } diff --git a/packages/flutter/lib/src/widgets/gesture_detector.dart b/packages/flutter/lib/src/widgets/gesture_detector.dart index 5c2b5353fcc..03b60f8f276 100644 --- a/packages/flutter/lib/src/widgets/gesture_detector.dart +++ b/packages/flutter/lib/src/widgets/gesture_detector.dart @@ -368,6 +368,7 @@ class RawGestureDetectorState extends State { @override void didUpdateWidget(RawGestureDetector oldWidget) { + super.didUpdateWidget(oldWidget); _syncAll(widget.gestures); } diff --git a/packages/flutter/lib/src/widgets/image.dart b/packages/flutter/lib/src/widgets/image.dart index 9ab5a49ea11..38153bb8b7c 100644 --- a/packages/flutter/lib/src/widgets/image.dart +++ b/packages/flutter/lib/src/widgets/image.dart @@ -244,6 +244,7 @@ class _ImageState extends State { @override void didUpdateWidget(Image oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.image != oldWidget.image) _resolveImage(); } diff --git a/packages/flutter/lib/src/widgets/implicit_animations.dart b/packages/flutter/lib/src/widgets/implicit_animations.dart index 990cb015c90..785a795adc5 100644 --- a/packages/flutter/lib/src/widgets/implicit_animations.dart +++ b/packages/flutter/lib/src/widgets/implicit_animations.dart @@ -148,6 +148,7 @@ abstract class AnimatedWidgetBaseState exten @override void didUpdateWidget(T oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.curve != oldWidget.curve) _updateCurve(); _controller.duration = widget.duration; @@ -229,11 +230,11 @@ abstract class AnimatedWidgetBaseState exten /// The [AnimatedContainer] will automatically animate between the old and /// new values of properties when they change using the provided curve and /// duration. Properties that are null are not animated. -/// +/// /// This class is useful for generating simple implicit transitions between /// different parameters to [Container] with its internal /// [AnimationController]. For more complex animations, you'll likely want to -/// use a subclass of [Transition] such as the [DecoratedBoxTransition] or use +/// use a subclass of [Transition] such as the [DecoratedBoxTransition] or use /// your own [AnimationController]. class AnimatedContainer extends ImplicitlyAnimatedWidget { /// Creates a container that animates its parameters implicitly. diff --git a/packages/flutter/lib/src/widgets/navigator.dart b/packages/flutter/lib/src/widgets/navigator.dart index 0e4615d4a4f..4f4cfea0c5c 100644 --- a/packages/flutter/lib/src/widgets/navigator.dart +++ b/packages/flutter/lib/src/widgets/navigator.dart @@ -716,6 +716,7 @@ class NavigatorState extends State with TickerProviderStateMixin { @override void didUpdateWidget(Navigator oldWidget) { + super.didUpdateWidget(oldWidget); if (oldWidget.observers != widget.observers) { for (NavigatorObserver observer in oldWidget.observers) observer._navigator = null; diff --git a/packages/flutter/lib/src/widgets/overscroll_indicator.dart b/packages/flutter/lib/src/widgets/overscroll_indicator.dart index 64aeafeb928..ab120409092 100644 --- a/packages/flutter/lib/src/widgets/overscroll_indicator.dart +++ b/packages/flutter/lib/src/widgets/overscroll_indicator.dart @@ -122,6 +122,7 @@ class _GlowingOverscrollIndicatorState extends State @override void didUpdateWidget(GlowingOverscrollIndicator oldWidget) { + super.didUpdateWidget(oldWidget); if (oldWidget.color != widget.color || oldWidget.axis != widget.axis) { _leadingController.color = widget.color; _leadingController.axis = widget.axis; diff --git a/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart b/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart index b4f54d66275..8a0d7c3e620 100644 --- a/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart +++ b/packages/flutter/lib/src/widgets/raw_keyboard_listener.dart @@ -60,6 +60,7 @@ class _RawKeyboardListenerState extends State { @override void didUpdateWidget(RawKeyboardListener oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.focusNode != oldWidget.focusNode) { oldWidget.focusNode.removeListener(_handleFocusChanged); widget.focusNode.addListener(_handleFocusChanged); diff --git a/packages/flutter/lib/src/widgets/routes.dart b/packages/flutter/lib/src/widgets/routes.dart index 01542991cdd..684056d3537 100644 --- a/packages/flutter/lib/src/widgets/routes.dart +++ b/packages/flutter/lib/src/widgets/routes.dart @@ -442,6 +442,7 @@ class _ModalScopeState extends State<_ModalScope> { @override void didUpdateWidget(_ModalScope oldWidget) { + super.didUpdateWidget(oldWidget); assert(widget.route == oldWidget.route); } diff --git a/packages/flutter/lib/src/widgets/status_transitions.dart b/packages/flutter/lib/src/widgets/status_transitions.dart index 1909d264373..6b6fc6c2e79 100644 --- a/packages/flutter/lib/src/widgets/status_transitions.dart +++ b/packages/flutter/lib/src/widgets/status_transitions.dart @@ -39,6 +39,7 @@ class _StatusTransitionState extends State { @override void didUpdateWidget(StatusTransitionWidget oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.animation != oldWidget.animation) { oldWidget.animation.removeStatusListener(_animationStatusChanged); widget.animation.addStatusListener(_animationStatusChanged); diff --git a/packages/flutter/lib/src/widgets/transitions.dart b/packages/flutter/lib/src/widgets/transitions.dart index 65cac3cc832..34f33599f49 100644 --- a/packages/flutter/lib/src/widgets/transitions.dart +++ b/packages/flutter/lib/src/widgets/transitions.dart @@ -74,6 +74,7 @@ class _AnimatedState extends State { @override void didUpdateWidget(AnimatedWidget oldWidget) { + super.didUpdateWidget(oldWidget); if (widget.listenable != oldWidget.listenable) { oldWidget.listenable.removeListener(_handleChange); widget.listenable.addListener(_handleChange); @@ -391,20 +392,20 @@ class RelativePositionedTransition extends AnimatedWidget { /// Animated version of a [DecoratedBox] that animates the different properties /// of its [Decoration]. -/// +/// /// See also: /// /// * [DecoratedBox], which also draws a [Decoration] but is not animated. -/// * [AnimatedContainer], a more full-featured container that also animates on +/// * [AnimatedContainer], a more full-featured container that also animates on /// decoration using an internal animation. class DecoratedBoxTransition extends AnimatedWidget { /// Creates an animated [DecorationBox] whose [Decoration] animation updates - /// the widget. - /// - /// The [decoration] and [position] cannot be null. - /// + /// the widget. + /// + /// The [decoration] and [position] cannot be null. + /// /// See also: - /// + /// /// * [new DecoratedBox]. DecoratedBoxTransition({ Key key, diff --git a/packages/flutter/lib/src/widgets/will_pop_scope.dart b/packages/flutter/lib/src/widgets/will_pop_scope.dart index 8acd574ecf4..7bb4620db8f 100644 --- a/packages/flutter/lib/src/widgets/will_pop_scope.dart +++ b/packages/flutter/lib/src/widgets/will_pop_scope.dart @@ -55,6 +55,7 @@ class _WillPopScopeState extends State { @override void didUpdateWidget(WillPopScope oldWidget) { + super.didUpdateWidget(oldWidget); assert(_route == ModalRoute.of(context)); if (widget.onWillPop != oldWidget.onWillPop && _route != null) { if (oldWidget.onWillPop != null) diff --git a/packages/flutter/test/widgets/build_scope_test.dart b/packages/flutter/test/widgets/build_scope_test.dart index 00f66d3788f..deb862c7a3d 100644 --- a/packages/flutter/test/widgets/build_scope_test.dart +++ b/packages/flutter/test/widgets/build_scope_test.dart @@ -23,6 +23,7 @@ class ProbeWidgetState extends State { @override void didUpdateWidget(ProbeWidget oldWidget) { + super.didUpdateWidget(oldWidget); setState(() {}); } diff --git a/packages/flutter/test/widgets/independent_widget_layout_test.dart b/packages/flutter/test/widgets/independent_widget_layout_test.dart index 1e1b64c46b8..9e31a30059b 100644 --- a/packages/flutter/test/widgets/independent_widget_layout_test.dart +++ b/packages/flutter/test/widgets/independent_widget_layout_test.dart @@ -78,6 +78,7 @@ class TriggerableState extends State { @override void didUpdateWidget(TriggerableWidget oldWidget) { + super.didUpdateWidget(oldWidget); widget.trigger.callback = fire; } diff --git a/packages/flutter/test/widgets/syncing_test.dart b/packages/flutter/test/widgets/syncing_test.dart index dffc47b390f..05293878ade 100644 --- a/packages/flutter/test/widgets/syncing_test.dart +++ b/packages/flutter/test/widgets/syncing_test.dart @@ -30,6 +30,7 @@ class TestWidgetState extends State { @override void didUpdateWidget(TestWidget oldWidget) { + super.didUpdateWidget(oldWidget); syncedState = widget.syncedState; // we explicitly do NOT sync the persistentState from the new instance // because we're using that to track whether we got recreated