mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
## Description This adds support for M3 easing and duration tokens. This PR includes these changes: * Generation of duration and easing constants, in `Durations` and `Easing`, respectively (`Curves` is already taken in the `animation` library) * Add 3 Dart fixes Once this is merged, I'll migrate packages/plugins/customers and then uncomment the deprecation notices for the 3 M2 curves, all of which have 1:1 replacements. ## Related Issues - Fixes https://github.com/flutter/flutter/issues/116525 ## Tests - Added Dart fix tests ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [Features we expect every widget to implement]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat
323 lines
15 KiB
Plaintext
323 lines
15 KiB
Plaintext
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
void main() {
|
|
// Generic reference variables.
|
|
BuildContext context;
|
|
RenderObjectWidget renderObjectWidget;
|
|
RenderObject renderObject;
|
|
Object object;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/26259
|
|
Scaffold scaffold = Scaffold(resizeToAvoidBottomInset: true);
|
|
scaffold = Scaffold(error: '');
|
|
final bool resize = scaffold.resizeToAvoidBottomInset;
|
|
|
|
// Change made in https://github.com/flutter/flutter/pull/15303
|
|
showDialog(builder: (context) => Text('Fix me.'));
|
|
showDialog(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/44189
|
|
const Element element = Element(myWidget);
|
|
element.dependOnInheritedElement(ancestor);
|
|
element.dependOnInheritedWidgetOfExactType<targetType>();
|
|
element.getElementForInheritedWidgetOfExactType<targetType>();
|
|
element.findAncestorWidgetOfExactType<targetType>();
|
|
element.findAncestorStateOfType<targetType>();
|
|
element.findRootAncestorStateOfType<targetType>();
|
|
element.findAncestorRenderObjectOfType<targetType>();
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/45941 and https://github.com/flutter/flutter/pull/83843
|
|
final WidgetsBinding binding = WidgetsBinding.instance;
|
|
binding.deferFirstFrame();
|
|
binding.allowFirstFrame();
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/44189
|
|
const StatefulElement statefulElement = StatefulElement(myWidget);
|
|
statefulElement.dependOnInheritedElement(ancestor);
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/44189
|
|
const BuildContext buildContext = Element(myWidget);
|
|
buildContext.dependOnInheritedElement(ancestor);
|
|
buildContext.dependOnInheritedWidgetOfExactType<targetType>();
|
|
buildContext.getElementForInheritedWidgetOfExactType<targetType>();
|
|
buildContext.findAncestorWidgetOfExactType<targetType>();
|
|
buildContext.findAncestorStateOfType<targetType>();
|
|
buildContext.findRootAncestorStateOfType<targetType>();
|
|
buildContext.findAncestorRenderObjectOfType<targetType>();
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/66305
|
|
const Stack stack = Stack(clipBehavior: Clip.none);
|
|
const Stack stack = Stack(clipBehavior: Clip.hardEdge);
|
|
const Stack stack = Stack(error: '');
|
|
final behavior = stack.clipBehavior;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/61648
|
|
const Form form = Form(autovalidateMode: AutovalidateMode.always);
|
|
const Form form = Form(autovalidateMode: AutovalidateMode.disabled);
|
|
const Form form = Form(error: '');
|
|
final autoMode = form.autovalidateMode;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/61648
|
|
const FormField formField = FormField(autovalidateMode: AutovalidateMode.always);
|
|
const FormField formField = FormField(autovalidateMode: AutovalidateMode.disabled);
|
|
const FormField formField = FormField(error: '');
|
|
final autoMode = formField.autovalidateMode;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/61648
|
|
const TextFormField textFormField = TextFormField(autovalidateMode: AutovalidateMode.always);
|
|
const TextFormField textFormField = TextFormField(autovalidateMode: AutovalidateMode.disabled);
|
|
const TextFormField textFormField = TextFormField(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/61648
|
|
const DropdownButtonFormField dropDownButtonFormField = DropdownButtonFormField(autovalidateMode: AutovalidateMode.always);
|
|
const DropdownButtonFormField dropdownButtonFormField = DropdownButtonFormField(autovalidateMode: AutovalidateMode.disabled);
|
|
const DropdownButtonFormField dropdownButtonFormField = DropdownButtonFormField(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/68736
|
|
MediaQuery.maybeOf(context);
|
|
MediaQuery.of(context);
|
|
MediaQuery.of(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/70726
|
|
Navigator.maybeOf(context);
|
|
Navigator.of(context);
|
|
Navigator.of(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/68908
|
|
ScaffoldMessenger.maybeOf(context);
|
|
ScaffoldMessenger.of(context);
|
|
ScaffoldMessenger.of(error: '');
|
|
Scaffold.of(error: '');
|
|
Scaffold.maybeOf(context);
|
|
Scaffold.of(context);
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/68910
|
|
Router.maybeOf(context);
|
|
Router.of(context);
|
|
Router.of(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/68911
|
|
Localizations.maybeLocaleOf(context);
|
|
Localizations.localeOf(context);
|
|
Localizations.localeOf(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/68917
|
|
FocusTraversalOrder.maybeOf(context);
|
|
FocusTraversalOrder.of(context);
|
|
FocusTraversalOrder.of(error: '');
|
|
FocusTraversalGroup.of(error: '');
|
|
FocusTraversalGroup.maybeOf(context);
|
|
FocusTraversalGroup.of(context);
|
|
Focus.maybeOf(context);
|
|
Focus.of(context);
|
|
Focus.of(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/68921
|
|
Shortcuts.maybeOf(context);
|
|
Shortcuts.of(context);
|
|
Shortcuts.of(error: '');
|
|
Actions.find(error: '');
|
|
Actions.maybeFind(context);
|
|
Actions.find(context);
|
|
Actions.handler(context);
|
|
Actions.handler(context);
|
|
Actions.handler(error: '');
|
|
Actions.invoke(error: '');
|
|
Actions.maybeInvoke(context);
|
|
Actions.invoke(context);
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/68925
|
|
AnimatedList.maybeOf(context);
|
|
AnimatedList.of(context);
|
|
AnimatedList.of(error: '');
|
|
SliverAnimatedList.of(error: '');
|
|
SliverAnimatedList.maybeOf(context);
|
|
SliverAnimatedList.of(context);
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/68905
|
|
MaterialBasedCupertinoThemeData.resolveFrom(context);
|
|
MaterialBasedCupertinoThemeData.resolveFrom(context);
|
|
MaterialBasedCupertinoThemeData.resolveFrom(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/72043
|
|
TextField(maxLengthEnforcement: MaxLengthEnforcement.enforce);
|
|
TextField(maxLengthEnforcement: MaxLengthEnforcement.none);
|
|
TextField(error: '');
|
|
final TextField textField;
|
|
textField.maxLengthEnforcement;
|
|
TextFormField(maxLengthEnforcement: MaxLengthEnforcement.enforce);
|
|
TextFormField(maxLengthEnforcement: MaxLengthEnforcement.none);
|
|
TextFormField(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/59127
|
|
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(label: myTitle);
|
|
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem();
|
|
const BottomNavigationBarItem bottomNavigationBarItem = BottomNavigationBarItem(error: '');
|
|
bottomNavigationBarItem.label;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/65246
|
|
RectangularSliderTrackShape();
|
|
RectangularSliderTrackShape(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/46115
|
|
const InputDecoration inputDecoration = InputDecoration(floatingLabelBehavior: FloatingLabelBehavior.auto);
|
|
InputDecoration(floatingLabelBehavior: FloatingLabelBehavior.never);
|
|
InputDecoration();
|
|
InputDecoration(error: '');
|
|
InputDecoration.collapsed(floatingLabelBehavior: FloatingLabelBehavior.auto);
|
|
InputDecoration.collapsed(floatingLabelBehavior: FloatingLabelBehavior.never);
|
|
InputDecoration.collapsed();
|
|
InputDecoration.collapsed(error: '');
|
|
inputDecoration.floatingLabelBehavior;
|
|
const InputDecorationTheme inputDecorationTheme = InputDecorationTheme(floatingLabelBehavior: FloatingLabelBehavior.auto);
|
|
InputDecorationTheme(floatingLabelBehavior: FloatingLabelBehavior.never);
|
|
InputDecorationTheme();
|
|
InputDecorationTheme(error: '');
|
|
inputDecorationTheme.floatingLabelBehavior;
|
|
inputDecorationTheme.copyWith(floatingLabelBehavior: FloatingLabelBehavior.never);
|
|
inputDecorationTheme.copyWith(floatingLabelBehavior: FloatingLabelBehavior.auto);
|
|
inputDecorationTheme.copyWith();
|
|
inputDecorationTheme.copyWith(error: '');
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/79160
|
|
Draggable draggable = Draggable();
|
|
draggable = Draggable(dragAnchorStrategy: childDragAnchorStrategy);
|
|
draggable = Draggable(dragAnchorStrategy: pointerDragAnchorStrategy);
|
|
draggable = Draggable(error: '');
|
|
draggable.dragAnchorStrategy;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/79160
|
|
LongPressDraggable longPressDraggable = LongPressDraggable();
|
|
longPressDraggable = LongPressDraggable(dragAnchorStrategy: childDragAnchorStrategy);
|
|
longPressDraggable = LongPressDraggable(dragAnchorStrategy: pointerDragAnchorStrategy);
|
|
longPressDraggable = LongPressDraggable(error: '');
|
|
longPressDraggable.dragAnchorStrategy;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/64254
|
|
final LeafRenderObjectElement leafElement = LeafRenderObjectElement();
|
|
leafElement.insertRenderObjectChild(renderObject, object);
|
|
leafElement.moveRenderObjectChild(renderObject, object);
|
|
leafElement.removeRenderObjectChild(renderObject);
|
|
final ListWheelElement listWheelElement = ListWheelElement();
|
|
listWheelElement.insertRenderObjectChild(renderObject, object);
|
|
listWheelElement.moveRenderObjectChild(renderObject, object);
|
|
listWheelElement.removeRenderObjectChild(renderObject);
|
|
final MultiChildRenderObjectElement multiChildRenderObjectElement = MultiChildRenderObjectElement();
|
|
multiChildRenderObjectElement.insertRenderObjectChild(renderObject, object);
|
|
multiChildRenderObjectElement.moveRenderObjectChild(renderObject, object);
|
|
multiChildRenderObjectElement.removeRenderObjectChild(renderObject);
|
|
final SingleChildRenderObjectElement singleChildRenderObjectElement = SingleChildRenderObjectElement();
|
|
singleChildRenderObjectElement.insertRenderObjectChild(renderObject, object);
|
|
singleChildRenderObjectElement.moveRenderObjectChild(renderObject, object);
|
|
singleChildRenderObjectElement.removeRenderObjectChild(renderObject);
|
|
final SliverMultiBoxAdaptorElement sliverMultiBoxAdaptorElement = SliverMultiBoxAdaptorElement();
|
|
sliverMultiBoxAdaptorElement.insertRenderObjectChild(renderObject, object);
|
|
sliverMultiBoxAdaptorElement.moveRenderObjectChild(renderObject, object);
|
|
sliverMultiBoxAdaptorElement.removeRenderObjectChild(renderObject);
|
|
final RenderObjectToWidgetElement renderObjectToWidgetElement = RenderObjectToWidgetElement(widget);
|
|
renderObjectToWidgetElement.insertRenderObjectChild(renderObject, object);
|
|
renderObjectToWidgetElement.moveRenderObjectChild(renderObject, object);
|
|
renderObjectToWidgetElement.removeRenderObjectChild(renderObject);
|
|
|
|
// Changes made in https://flutter.dev/docs/release/breaking-changes/clip-behavior
|
|
ListWheelScrollView listWheelScrollView = ListWheelScrollView();
|
|
listWheelScrollView = ListWheelScrollView(clipBehavior: Clip.hardEdge);
|
|
listWheelScrollView = ListWheelScrollView(clipBehavior: Clip.none);
|
|
listWheelScrollView = ListWheelScrollView(error: '');
|
|
listWheelScrollView = ListWheelScrollView.useDelegate(error: '');
|
|
listWheelScrollView = ListWheelScrollView.useDelegate();
|
|
listWheelScrollView = ListWheelScrollView.useDelegate(clipBehavior: Clip.hardEdge);
|
|
listWheelScrollView = ListWheelScrollView.useDelegate(clipBehavior: Clip.none);
|
|
listWheelScrollView.clipBehavior;
|
|
ListWheelViewport listWheelViewport = ListWheelViewport();
|
|
listWheelViewport = ListWheelViewport(clipBehavior: Clip.hardEdge);
|
|
listWheelViewport = ListWheelViewport(clipBehavior: Clip.none);
|
|
listWheelViewport = ListWheelViewport(error: '');
|
|
listWheelViewport.clipBehavior;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/87839
|
|
final OverscrollIndicatorNotification notification = OverscrollIndicatorNotification(leading: true);
|
|
final OverscrollIndicatorNotification notification = OverscrollIndicatorNotification(error: '');
|
|
notification.disallowIndicator();
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/96115
|
|
Icon icon = Icons.pie_chart_outline;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/96957
|
|
Scrollbar scrollbar = Scrollbar(thumbVisibility: true);
|
|
bool nowShowing = scrollbar.thumbVisibility;
|
|
ScrollbarThemeData scrollbarTheme = ScrollbarThemeData(thumbVisibility: nowShowing);
|
|
scrollbarTheme.copyWith(thumbVisibility: nowShowing);
|
|
scrollbarTheme.thumbVisibility;
|
|
RawScrollbar rawScrollbar = RawScrollbar(thumbVisibility: true);
|
|
nowShowing = rawScrollbar.thumbVisibility;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/96174
|
|
Chip chip = Chip();
|
|
chip = Chip(deleteButtonTooltipMessage: '');
|
|
chip = Chip();
|
|
chip = Chip(deleteButtonTooltipMessage: 'Delete Tooltip');
|
|
chip.deleteButtonTooltipMessage;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/96174
|
|
InputChip inputChip = InputChip();
|
|
inputChip = InputChip(deleteButtonTooltipMessage: '');
|
|
inputChip = InputChip();
|
|
inputChip = InputChip(deleteButtonTooltipMessage: 'Delete Tooltip');
|
|
inputChip.deleteButtonTooltipMessage;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/96174
|
|
RawChip rawChip = Rawchip();
|
|
rawChip = RawChip(deleteButtonTooltipMessage: '');
|
|
rawChip = RawChip();
|
|
rawChip = RawChip(deleteButtonTooltipMessage: 'Delete Tooltip');
|
|
rawChip.deleteButtonTooltipMessage;
|
|
|
|
// Change made in https://github.com/flutter/flutter/pull/100381
|
|
SelectionOverlay.fadeDuration;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/105291
|
|
ButtonStyle elevationButtonStyle = ElevatedButton.styleFrom(
|
|
foregroundColor: Colors.white, backgroundColor: Colors.blue, disabledForegroundColor: Colors.grey.withOpacity(0.38), disabledBackgroundColor: Colors.grey.withOpacity(0.12),
|
|
);
|
|
ButtonStyle outlinedButtonStyle = OutlinedButton.styleFrom(
|
|
foregroundColor: Colors.blue, disabledForegroundColor: Colors.grey.withOpacity(0.38),
|
|
);
|
|
ButtonStyle textButtonStyle = TextButton.styleFrom(
|
|
foregroundColor: Colors.blue, disabledForegroundColor: Colors.grey.withOpacity(0.38),
|
|
);
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/78588
|
|
final ScrollBehavior scrollBehavior = ScrollBehavior();
|
|
scrollBehavior.buildOverscrollIndicator(context, child, axisDirection);
|
|
final MaterialScrollBehavior materialScrollBehavior = MaterialScrollBehavior();
|
|
materialScrollBehavior.buildOverscrollIndicator(context, child, axisDirection);
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/111706
|
|
Scrollbar scrollbar = Scrollbar(trackVisibility: true);
|
|
bool nowShowing = scrollbar.trackVisibility;
|
|
ScrollbarThemeData scrollbarTheme = ScrollbarThemeData(trackVisibility: nowShowing);
|
|
scrollbarTheme.copyWith(trackVisibility: nowShowing);
|
|
scrollbarTheme.trackVisibility;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/114459
|
|
MediaQuery.boldTextOf(context);
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/122555
|
|
final ScrollableDetails details = ScrollableDetails(
|
|
direction: AxisDirection.down,
|
|
decorationClipBehavior: Clip.none,
|
|
);
|
|
final Clip clip = details.decorationClipBehavior;
|
|
|
|
// Changes made in https://github.com/flutter/flutter/pull/129942
|
|
// TODO(guidezpl): enable fix after https://github.com/dart-lang/sdk/issues/52902
|
|
// const Curve curve = standardEasing; expect Easing.legacy
|
|
// const Curve curve = accelerateEasing; expect Easing.legacyAccelerate
|
|
// const Curve curve = decelerateEasing; expect Easing.legacyDecelerate
|
|
}
|