mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Add support for M3 motion (#129942)
## 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
This commit is contained in:
parent
b54e83e4fc
commit
0830a362d5
@ -37,6 +37,7 @@ import 'package:gen_defaults/input_chip_template.dart';
|
||||
import 'package:gen_defaults/input_decorator_template.dart';
|
||||
import 'package:gen_defaults/list_tile_template.dart';
|
||||
import 'package:gen_defaults/menu_template.dart';
|
||||
import 'package:gen_defaults/motion_template.dart';
|
||||
import 'package:gen_defaults/navigation_bar_template.dart';
|
||||
import 'package:gen_defaults/navigation_drawer_template.dart';
|
||||
import 'package:gen_defaults/navigation_rail_template.dart';
|
||||
@ -131,6 +132,7 @@ Future<void> main(List<String> args) async {
|
||||
ListTileTemplate('LisTile', '$materialLib/list_tile.dart', tokens).updateFile();
|
||||
InputDecoratorTemplate('InputDecorator', '$materialLib/input_decorator.dart', tokens).updateFile();
|
||||
MenuTemplate('Menu', '$materialLib/menu_anchor.dart', tokens).updateFile();
|
||||
MotionTemplate('Motion', '$materialLib/motion.dart', tokens, tokenLogger).updateFile();
|
||||
NavigationBarTemplate('NavigationBar', '$materialLib/navigation_bar.dart', tokens).updateFile();
|
||||
NavigationDrawerTemplate('NavigationDrawer', '$materialLib/navigation_drawer.dart', tokens).updateFile();
|
||||
NavigationRailTemplate('NavigationRail', '$materialLib/navigation_rail.dart', tokens).updateFile();
|
||||
|
@ -856,6 +856,31 @@ md.sys.elevation.level2,
|
||||
md.sys.elevation.level3,
|
||||
md.sys.elevation.level4,
|
||||
md.sys.elevation.level5,
|
||||
md.sys.motion.duration.extra-long1Ms,
|
||||
md.sys.motion.duration.extra-long2Ms,
|
||||
md.sys.motion.duration.extra-long3Ms,
|
||||
md.sys.motion.duration.extra-long4Ms,
|
||||
md.sys.motion.duration.long1Ms,
|
||||
md.sys.motion.duration.long2Ms,
|
||||
md.sys.motion.duration.long3Ms,
|
||||
md.sys.motion.duration.long4Ms,
|
||||
md.sys.motion.duration.medium1Ms,
|
||||
md.sys.motion.duration.medium2Ms,
|
||||
md.sys.motion.duration.medium3Ms,
|
||||
md.sys.motion.duration.medium4Ms,
|
||||
md.sys.motion.duration.short1Ms,
|
||||
md.sys.motion.duration.short2Ms,
|
||||
md.sys.motion.duration.short3Ms,
|
||||
md.sys.motion.duration.short4Ms,
|
||||
md.sys.motion.easing.emphasized.accelerate,
|
||||
md.sys.motion.easing.emphasized.decelerate,
|
||||
md.sys.motion.easing.legacy,
|
||||
md.sys.motion.easing.legacy.accelerate,
|
||||
md.sys.motion.easing.legacy.decelerate,
|
||||
md.sys.motion.easing.linear,
|
||||
md.sys.motion.easing.standard,
|
||||
md.sys.motion.easing.standard.accelerate,
|
||||
md.sys.motion.easing.standard.decelerate,
|
||||
md.sys.shape.corner.extra-large,
|
||||
md.sys.shape.corner.extra-large.top,
|
||||
md.sys.shape.corner.extra-small,
|
||||
|
|
90
dev/tools/gen_defaults/lib/motion_template.dart
Normal file
90
dev/tools/gen_defaults/lib/motion_template.dart
Normal file
@ -0,0 +1,90 @@
|
||||
// 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 'template.dart';
|
||||
import 'token_logger.dart';
|
||||
|
||||
class MotionTemplate extends TokenTemplate {
|
||||
/// Since we generate the tokens dynamically, we need to store them and log
|
||||
/// them manually, instead of using [getToken].
|
||||
MotionTemplate(String blockName, String fileName, this.tokens, this.tokensLogger) : super(blockName, fileName, tokens);
|
||||
Map<String, dynamic> tokens;
|
||||
TokenLogger tokensLogger;
|
||||
|
||||
// List of duration tokens.
|
||||
late List<MapEntry<String, dynamic>> durationTokens = tokens.entries.where(
|
||||
(MapEntry<String, dynamic> entry) => entry.key.contains('.duration.')
|
||||
).toList()
|
||||
..sort(
|
||||
(MapEntry<String, dynamic> a, MapEntry<String, dynamic> b) => (a.value as double).compareTo(b.value as double)
|
||||
);
|
||||
|
||||
// List of easing curve tokens.
|
||||
late List<MapEntry<String, dynamic>> easingCurveTokens = tokens.entries.where(
|
||||
(MapEntry<String, dynamic> entry) => entry.key.contains('.easing.')
|
||||
).toList()
|
||||
..sort(
|
||||
// Sort the legacy curves at the end of the list.
|
||||
(MapEntry<String, dynamic> a, MapEntry<String, dynamic> b) => a.key.contains('legacy') ? 1 : a.key.compareTo(b.key)
|
||||
);
|
||||
|
||||
String durationTokenString(String token, dynamic tokenValue) {
|
||||
tokensLogger.log(token);
|
||||
final String tokenName = token.split('.').last.replaceAll('-', '').replaceFirst('Ms', '');
|
||||
final int milliseconds = (tokenValue as double).toInt();
|
||||
return
|
||||
'''
|
||||
/// The $tokenName duration (${milliseconds}ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration $tokenName = Duration(milliseconds: $milliseconds);
|
||||
''';
|
||||
}
|
||||
|
||||
String easingCurveTokenString(String token, dynamic tokenValue) {
|
||||
tokensLogger.log(token);
|
||||
final String tokenName = token
|
||||
.replaceFirst('md.sys.motion.easing.', '')
|
||||
.replaceAllMapped(RegExp(r'[-\.](\w)'), (Match match) {
|
||||
return match.group(1)!.toUpperCase();
|
||||
});
|
||||
return '''
|
||||
/// The $tokenName easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve $tokenName = $tokenValue;
|
||||
''';
|
||||
}
|
||||
|
||||
@override
|
||||
String generate() => '''
|
||||
/// The set of durations in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
abstract final class Durations {
|
||||
${durationTokens.map((MapEntry<String, dynamic> entry) => durationTokenString(entry.key, entry.value)).join('\n')}}
|
||||
|
||||
|
||||
// TODO(guidezpl): Improve with description and assets, b/289870605
|
||||
|
||||
/// The set of easing curves in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
/// * [Curves], for a collection of non-Material animation easing curves.
|
||||
abstract final class Easing {
|
||||
${easingCurveTokens.map((MapEntry<String, dynamic> entry) => easingCurveTokenString(entry.key, entry.value)).join('\n')}}
|
||||
''';
|
||||
}
|
@ -897,4 +897,43 @@ transforms:
|
||||
oldName: 'showTrackOnHover'
|
||||
newName: 'trackVisibility'
|
||||
|
||||
# Changes made in https://github.com/flutter/flutter/pull/129942
|
||||
- title: "Migrate to 'Easing.legacy'"
|
||||
date: 2023-07-04
|
||||
element:
|
||||
uris: [ 'material.dart' ]
|
||||
variable: 'standardEasing'
|
||||
changes:
|
||||
- kind: 'replacedBy'
|
||||
newElement:
|
||||
uris: [ 'material.dart' ]
|
||||
field: legacy
|
||||
inClass: Easing
|
||||
|
||||
# Changes made in https://github.com/flutter/flutter/pull/129942
|
||||
- title: "Migrate to 'Easing.legacyAccelerate'"
|
||||
date: 2023-07-04
|
||||
element:
|
||||
uris: [ 'material.dart' ]
|
||||
variable: 'accelerateEasing'
|
||||
changes:
|
||||
- kind: 'replacedBy'
|
||||
newElement:
|
||||
uris: [ 'material.dart' ]
|
||||
field: legacyAccelerate
|
||||
inClass: Easing
|
||||
|
||||
# Changes made in https://github.com/flutter/flutter/pull/129942
|
||||
- title: "Migrate to 'Easing.legacyDecelerate'"
|
||||
date: 2023-07-04
|
||||
element:
|
||||
uris: [ 'material.dart' ]
|
||||
variable: 'decelerateEasing'
|
||||
changes:
|
||||
- kind: 'replacedBy'
|
||||
newElement:
|
||||
uris: [ 'material.dart' ]
|
||||
field: legacyDecelerate
|
||||
inClass: Easing
|
||||
|
||||
# Before adding a new fix: read instructions at the top of this file.
|
||||
|
@ -122,6 +122,7 @@ export 'src/material/menu_button_theme.dart';
|
||||
export 'src/material/menu_style.dart';
|
||||
export 'src/material/menu_theme.dart';
|
||||
export 'src/material/mergeable_material.dart';
|
||||
export 'src/material/motion.dart';
|
||||
export 'src/material/navigation_bar.dart';
|
||||
export 'src/material/navigation_bar_theme.dart';
|
||||
export 'src/material/navigation_drawer.dart';
|
||||
|
@ -1354,6 +1354,7 @@ class ElasticInOutCurve extends Curve {
|
||||
///
|
||||
/// * [Curve], the interface implemented by the constants available from the
|
||||
/// [Curves] class.
|
||||
/// * [Easing], for the Material animation curves.
|
||||
abstract final class Curves {
|
||||
/// A linear animation curve.
|
||||
///
|
||||
@ -1741,7 +1742,7 @@ abstract final class Curves {
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [standardEasing], the name for this curve in the Material specification.
|
||||
/// * [Easing.legacy], the name for this curve in the Material specification.
|
||||
static const Cubic fastOutSlowIn = Cubic(0.4, 0.0, 0.2, 1.0);
|
||||
|
||||
/// A cubic animation curve that starts quickly, slows down, and then ends
|
||||
|
@ -6,6 +6,8 @@ import 'package:flutter/animation.dart';
|
||||
|
||||
// The easing curves of the Material Library
|
||||
|
||||
// TODO(guidezpl): deprecate the three curves below once customers (packages/plugins) are migrated
|
||||
|
||||
/// The standard easing curve in the Material specification.
|
||||
///
|
||||
/// Elements that begin and end at rest use standard easing.
|
||||
|
234
packages/flutter/lib/src/material/motion.dart
Normal file
234
packages/flutter/lib/src/material/motion.dart
Normal file
@ -0,0 +1,234 @@
|
||||
// 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/animation.dart';
|
||||
|
||||
// BEGIN GENERATED TOKEN PROPERTIES - Motion
|
||||
|
||||
// Do not edit by hand. The code between the "BEGIN GENERATED" and
|
||||
// "END GENERATED" comments are generated from data in the Material
|
||||
// Design token database by the script:
|
||||
// dev/tools/gen_defaults/bin/gen_defaults.dart.
|
||||
|
||||
/// The set of durations in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
abstract final class Durations {
|
||||
/// The short1 duration (50ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration short1 = Duration(milliseconds: 50);
|
||||
|
||||
/// The short2 duration (100ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration short2 = Duration(milliseconds: 100);
|
||||
|
||||
/// The short3 duration (150ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration short3 = Duration(milliseconds: 150);
|
||||
|
||||
/// The short4 duration (200ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration short4 = Duration(milliseconds: 200);
|
||||
|
||||
/// The medium1 duration (250ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration medium1 = Duration(milliseconds: 250);
|
||||
|
||||
/// The medium2 duration (300ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration medium2 = Duration(milliseconds: 300);
|
||||
|
||||
/// The medium3 duration (350ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration medium3 = Duration(milliseconds: 350);
|
||||
|
||||
/// The medium4 duration (400ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration medium4 = Duration(milliseconds: 400);
|
||||
|
||||
/// The long1 duration (450ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration long1 = Duration(milliseconds: 450);
|
||||
|
||||
/// The long2 duration (500ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration long2 = Duration(milliseconds: 500);
|
||||
|
||||
/// The long3 duration (550ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration long3 = Duration(milliseconds: 550);
|
||||
|
||||
/// The long4 duration (600ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration long4 = Duration(milliseconds: 600);
|
||||
|
||||
/// The extralong1 duration (700ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration extralong1 = Duration(milliseconds: 700);
|
||||
|
||||
/// The extralong2 duration (800ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration extralong2 = Duration(milliseconds: 800);
|
||||
|
||||
/// The extralong3 duration (900ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration extralong3 = Duration(milliseconds: 900);
|
||||
|
||||
/// The extralong4 duration (1000ms) in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Duration tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#c009dec6-f29b-4503-b9f0-482af14a8bbd)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Duration extralong4 = Duration(milliseconds: 1000);
|
||||
}
|
||||
|
||||
|
||||
// TODO(guidezpl): Improve with description and assets, b/289870605
|
||||
|
||||
/// The set of easing curves in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
/// * [Curves], for a collection of non-Material animation easing curves.
|
||||
abstract final class Easing {
|
||||
/// The emphasizedAccelerate easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve emphasizedAccelerate = Cubic(0.3, 0.0, 0.8, 0.15);
|
||||
|
||||
/// The emphasizedDecelerate easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve emphasizedDecelerate = Cubic(0.05, 0.7, 0.1, 1.0);
|
||||
|
||||
/// The linear easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve linear = Cubic(0.0, 0.0, 1.0, 1.0);
|
||||
|
||||
/// The standard easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve standard = Cubic(0.2, 0.0, 0.0, 1.0);
|
||||
|
||||
/// The standardAccelerate easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve standardAccelerate = Cubic(0.3, 0.0, 1.0, 1.0);
|
||||
|
||||
/// The standardDecelerate easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve standardDecelerate = Cubic(0.0, 0.0, 0.0, 1.0);
|
||||
|
||||
/// The legacyDecelerate easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve legacyDecelerate = Cubic(0.0, 0.0, 0.2, 1.0);
|
||||
|
||||
/// The legacyAccelerate easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve legacyAccelerate = Cubic(0.4, 0.0, 1.0, 1.0);
|
||||
|
||||
/// The legacy easing curve in the Material specification.
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [M3 guidelines: Easing tokens](https://m3.material.io/styles/motion/easing-and-duration/tokens-specs#433b1153-2ea3-4fe2-9748-803a47bc97ee)
|
||||
/// * [M3 guidelines: Applying easing and duration](https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration)
|
||||
static const Curve legacy = Cubic(0.4, 0.0, 0.2, 1.0);
|
||||
}
|
||||
|
||||
// END GENERATED TOKEN PROPERTIES - Motion
|
@ -317,4 +317,10 @@ void main() {
|
||||
clipBehavior: Clip.none,
|
||||
);
|
||||
final Clip clip = details.clipBehavior;
|
||||
|
||||
// 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
|
||||
}
|
||||
|
@ -313,4 +313,10 @@ void main() {
|
||||
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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user