Bring TextTheme into alignment with the current Material spec (#22330)
This commit is contained in:
parent
87f97ca358
commit
8bfb4b3ee5
@ -2,9 +2,10 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
// This program generates a Dart "localizations" Map definition that combines
|
||||
// the contents of the arb files. The map can be used to lookup a localized
|
||||
// string: `localizations[localeString][resourceId]`.
|
||||
// This program generates a getTranslation() function that looks up the
|
||||
// translations contained by the arb files. The returned value is an
|
||||
// instance of GlobalMaterialLocalizations that corresponds to a single
|
||||
// locale.
|
||||
//
|
||||
// The *.arb files are in packages/flutter_localizations/lib/src/l10n.
|
||||
//
|
||||
@ -273,6 +274,8 @@ String generateType(Map<String, dynamic> attributes) {
|
||||
switch (attributes['x-flutter-type']) {
|
||||
case 'icuShortTimePattern':
|
||||
return 'TimeOfDayFormat';
|
||||
case 'scriptCategory':
|
||||
return 'ScriptCategory';
|
||||
}
|
||||
}
|
||||
return 'String';
|
||||
@ -308,6 +311,12 @@ const Map<String, String> _icuTimeOfDayToEnum = <String, String>{
|
||||
'ah:mm': 'TimeOfDayFormat.a_space_h_colon_mm',
|
||||
};
|
||||
|
||||
const Map<String, String> _scriptCategoryToEnum = <String, String>{
|
||||
'English-like': 'ScriptCategory.englishLike',
|
||||
'dense': 'ScriptCategory.dense',
|
||||
'tall': 'ScriptCategory.tall',
|
||||
};
|
||||
|
||||
/// Returns the literal that describes the value returned by getters
|
||||
/// with the given attributes.
|
||||
///
|
||||
@ -330,6 +339,15 @@ String generateValue(String value, Map<String, dynamic> attributes) {
|
||||
);
|
||||
}
|
||||
return _icuTimeOfDayToEnum[value];
|
||||
case 'scriptCategory':
|
||||
if (!_scriptCategoryToEnum.containsKey(value)) {
|
||||
throw Exception(
|
||||
'"$value" is not one of the scriptCategory values supported '
|
||||
'by the material library. Here is the list of supported '
|
||||
'values:\n ' + _scriptCategoryToEnum.keys.join('\n ')
|
||||
);
|
||||
}
|
||||
return _scriptCategoryToEnum[value];
|
||||
}
|
||||
}
|
||||
return generateString(value);
|
||||
|
@ -57,7 +57,7 @@ class TypographyDemo extends StatelessWidget {
|
||||
TextStyleItem(name: 'Body 2', style: textTheme.body2, text: 'Medium 14sp'),
|
||||
TextStyleItem(name: 'Body 1', style: textTheme.body1, text: 'Regular 14sp'),
|
||||
TextStyleItem(name: 'Caption', style: textTheme.caption, text: 'Regular 12sp'),
|
||||
TextStyleItem(name: 'Button', style: textTheme.button, text: 'MEDIUM (ALL CAPS) 14sp')
|
||||
TextStyleItem(name: 'Button', style: textTheme.button, text: 'MEDIUM (ALL CAPS) 14sp'),
|
||||
];
|
||||
|
||||
if (MediaQuery.of(context).size.width > 500.0) {
|
||||
|
@ -97,6 +97,7 @@ export 'src/material/tabs.dart';
|
||||
export 'src/material/text_field.dart';
|
||||
export 'src/material/text_form_field.dart';
|
||||
export 'src/material/text_selection.dart';
|
||||
export 'src/material/text_theme.dart';
|
||||
export 'src/material/theme.dart';
|
||||
export 'src/material/theme_data.dart';
|
||||
export 'src/material/time.dart';
|
||||
|
@ -19,8 +19,8 @@ import 'material.dart';
|
||||
import 'material_localizations.dart';
|
||||
import 'scaffold.dart';
|
||||
import 'tabs.dart';
|
||||
import 'text_theme.dart';
|
||||
import 'theme.dart';
|
||||
import 'typography.dart';
|
||||
|
||||
// Examples can assume:
|
||||
// void _airDress() { }
|
||||
|
@ -14,8 +14,8 @@ import 'debug.dart';
|
||||
import 'ink_well.dart';
|
||||
import 'material.dart';
|
||||
import 'material_localizations.dart';
|
||||
import 'text_theme.dart';
|
||||
import 'theme.dart';
|
||||
import 'typography.dart';
|
||||
|
||||
const double _kActiveFontSize = 14.0;
|
||||
const double _kInactiveFontSize = 12.0;
|
||||
|
@ -21,8 +21,8 @@ import 'icons.dart';
|
||||
import 'ink_well.dart';
|
||||
import 'material.dart';
|
||||
import 'material_localizations.dart';
|
||||
import 'text_theme.dart';
|
||||
import 'theme.dart';
|
||||
import 'typography.dart';
|
||||
|
||||
/// Initial display mode of the date picker dialog.
|
||||
///
|
||||
|
@ -7,6 +7,7 @@ import 'dart:async';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
|
||||
import 'text_theme.dart';
|
||||
import 'time.dart';
|
||||
import 'typography.dart';
|
||||
|
||||
@ -34,6 +35,10 @@ import 'typography.dart';
|
||||
//
|
||||
// 5. If you are a Google employee, you should then also follow the instructions
|
||||
// at go/flutter-l10n. If you're not, don't worry about it.
|
||||
//
|
||||
// 6. If you're adding a String for the sake of Flutter, not for an app-specific
|
||||
// version of this interface, you are making a breaking API change. See
|
||||
// https://flutter.io/design-principles/#handling-breaking-changes.
|
||||
|
||||
/// Defines the localized resource values used by the Material widgets.
|
||||
///
|
||||
@ -168,22 +173,17 @@ abstract class MaterialLocalizations {
|
||||
/// each supported layout.
|
||||
TimeOfDayFormat timeOfDayFormat({ bool alwaysUse24HourFormat = false });
|
||||
|
||||
/// Provides geometric text preferences for the current locale.
|
||||
/// Defines the localized [TextStyle] geometry for [ThemeData.textTheme].
|
||||
///
|
||||
/// This text theme is incomplete. For example, it lacks text color
|
||||
/// information. This theme must be merged with another text theme that
|
||||
/// provides the missing values.
|
||||
/// The [scriptCategory] defines the overall geometry of a [TextTheme] for
|
||||
/// the static [MaterialTextGeometry.localizedFor] method in terms of the
|
||||
/// three language categories defined in https://material.io/go/design-typography.
|
||||
///
|
||||
/// Typically a complete theme is obtained via [Theme.of], which can be
|
||||
/// localized using the [Localizations] widget.
|
||||
///
|
||||
/// The text styles provided by this theme are expected to have their
|
||||
/// [TextStyle.inherit] property set to false, so that the [ThemeData]
|
||||
/// obtained from [Theme.of] no longer inherits text style properties and
|
||||
/// contains a complete set of properties needed to style a [Text] widget.
|
||||
///
|
||||
/// See also: https://material.io/go/design-typography
|
||||
TextTheme get localTextGeometry;
|
||||
/// Generally speaking, font sizes for [ScriptCategory.tall] and
|
||||
/// [ScriptCategory.dense] scripts - for text styles that are smaller than the
|
||||
/// title style - are one unit larger than they are for
|
||||
/// [ScriptCategory.englishLike] scripts.
|
||||
ScriptCategory get scriptCategory;
|
||||
|
||||
/// Formats [number] as a decimal, inserting locale-appropriate thousands
|
||||
/// separators as necessary.
|
||||
@ -652,6 +652,9 @@ class DefaultMaterialLocalizations implements MaterialLocalizations {
|
||||
@override
|
||||
String get modalBarrierDismissLabel => 'Dismiss';
|
||||
|
||||
@override
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
TimeOfDayFormat timeOfDayFormat({ bool alwaysUse24HourFormat = false }) {
|
||||
return alwaysUse24HourFormat
|
||||
@ -659,10 +662,6 @@ class DefaultMaterialLocalizations implements MaterialLocalizations {
|
||||
: TimeOfDayFormat.h_colon_mm_space_a;
|
||||
}
|
||||
|
||||
/// Looks up text geometry defined in [MaterialTextGeometry].
|
||||
@override
|
||||
TextTheme get localTextGeometry => MaterialTextGeometry.englishLike;
|
||||
|
||||
@override
|
||||
String get signedInLabel => 'Signed in';
|
||||
|
||||
|
@ -12,8 +12,8 @@ import 'icons.dart';
|
||||
import 'ink_well.dart';
|
||||
import 'material.dart';
|
||||
import 'material_localizations.dart';
|
||||
import 'text_theme.dart';
|
||||
import 'theme.dart';
|
||||
import 'typography.dart';
|
||||
|
||||
// TODO(dragostis): Missing functionality:
|
||||
// * mobile horizontal mode with adding/removing steps
|
||||
|
540
packages/flutter/lib/src/material/text_theme.dart
Normal file
540
packages/flutter/lib/src/material/text_theme.dart
Normal file
@ -0,0 +1,540 @@
|
||||
// Copyright 2018 The Chromium 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/foundation.dart';
|
||||
import 'package:flutter/painting.dart';
|
||||
|
||||
import 'typography.dart';
|
||||
|
||||
/// Material design text theme.
|
||||
///
|
||||
/// Definitions for the various typographical styles found in material design
|
||||
/// (e.g., button, caption). Rather than creating a [TextTheme] directly,
|
||||
/// you can obtain an instance as [Typography.black] or [Typography.white].
|
||||
///
|
||||
/// To obtain the current text theme, call [Theme.of] with the current
|
||||
/// [BuildContext] and read the [ThemeData.textTheme] property.
|
||||
///
|
||||
/// The Material Design typography scheme was signficantly changed in the
|
||||
/// current (2018) version of the specification
|
||||
/// (https://material.io/design/typography).
|
||||
///
|
||||
/// The 2018 spec has thirteen text styles:
|
||||
/// ```
|
||||
/// NAME SIZE WEIGHT SPACING
|
||||
/// headline1 96.0 light -1.5
|
||||
/// headline2 60.0 light -0.5
|
||||
/// headline3 48.0 normal 0.0
|
||||
/// headline4 34.0 normal 0.25
|
||||
/// headline5 24.0 normal 0.0
|
||||
/// headline6 20.0 medium 0.15
|
||||
/// subtitle1 16.0 normal 0.15
|
||||
/// subtitle2 14.0 medium 0.1
|
||||
/// body1 16.0 normal 0.5
|
||||
/// body2 14.0 normal 0.25
|
||||
/// button 14.0 medium 0.75
|
||||
/// caption 12.0 normal 0.4
|
||||
/// overline 10.0 normal 1.5
|
||||
///
|
||||
/// ```
|
||||
/// Where "light" is `FontWeight.w300`, "normal" is `FontWeight.w400` and
|
||||
/// "medium" is `FontWeight.w500`.
|
||||
///
|
||||
/// The [TextTheme] API is based on the original material (2014)
|
||||
/// design spec, which used different text style names. For backwards
|
||||
/// compatability's sake, this API continues to use the original
|
||||
/// names. The table below should help with understanding the API in
|
||||
/// terms of the 2018 material spec.
|
||||
///
|
||||
/// Each of the [TextTheme] text styles corresponds to one of the
|
||||
/// styles from 2018 spec. By default, the font sizes, font weights
|
||||
/// and letter spacings have not changed from their original,
|
||||
/// 2014, values.
|
||||
/// ```
|
||||
/// NAME SIZE WEIGHT SPACING 2018 NAME
|
||||
/// display4 112.0 thin 0.0 headline1
|
||||
/// display3 56.0 normal 0.0 headline2
|
||||
/// display2 45.0 normal 0.0 headline3
|
||||
/// display1 34.0 normal 0.0 headline4
|
||||
/// headline 24.0 normal 0.0 headline5
|
||||
/// title 20.0 medium 0.0 headline6
|
||||
/// subhead 16.0 normal 0.0 subtitle1
|
||||
/// body2 14.0 medium 0.0 body1
|
||||
/// body1 14.0 normal 0.0 body2
|
||||
/// caption 12.0 normal 0.0 caption
|
||||
/// button 14.0 medium 0.0 button
|
||||
/// subtitle 14.0 medium 0.0 subtitle2
|
||||
/// overline 10.0 normal 0.0 overline
|
||||
/// ```
|
||||
///
|
||||
/// Where "thin" is `FontWeight.w100`, "normal" is `FontWeight.w400` and
|
||||
/// "medium" is `FontWeight.w500`. Letter spacing for all of the original
|
||||
/// text styles was 0.0.
|
||||
///
|
||||
/// To configure a [Theme] for the new sizes, weights, and letter spacings,
|
||||
/// initialize its [ThemeData.typography] value with a [Typography] that
|
||||
/// object that specifies the 2018 versions of the geometry themes:
|
||||
/// [Typography.englishLike2018], [Typography.dense2018],
|
||||
/// and [Typography.tall2018].
|
||||
///
|
||||
/// The following image [from the material design
|
||||
/// specification](https://material.io/go/design-typography#typography-styles)
|
||||
/// shows the recommended styles for each of the properties of a [TextTheme].
|
||||
/// This image uses the `Roboto` font, which is the font used on Android. On
|
||||
/// iOS, the [San Francisco
|
||||
/// font](https://developer.apple.com/ios/human-interface-guidelines/visual-design/typography/)
|
||||
/// is automatically used instead.
|
||||
///
|
||||
/// 
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [Typography], the class that generates [TextTheme]s appropriate for a platform.
|
||||
/// * [Theme], for other aspects of a material design application that can be
|
||||
/// globally adjusted, such as the color scheme.
|
||||
/// * <http://material.google.com/style/typography.html>
|
||||
@immutable
|
||||
class TextTheme extends Diagnosticable {
|
||||
/// Creates a text theme that uses the given values.
|
||||
///
|
||||
/// Rather than creating a new text theme, consider using [Typography.black]
|
||||
/// or [Typography.white], which implement the typography styles in the
|
||||
/// material design specification:
|
||||
///
|
||||
/// <https://material.google.com/style/typography.html#typography-styles>
|
||||
///
|
||||
/// If you do decide to create your own text theme, consider using one of
|
||||
/// those predefined themes as a starting point for [copyWith] or [apply].
|
||||
const TextTheme({
|
||||
this.display4,
|
||||
this.display3,
|
||||
this.display2,
|
||||
this.display1,
|
||||
this.headline,
|
||||
this.title,
|
||||
this.subhead,
|
||||
this.body2,
|
||||
this.body1,
|
||||
this.caption,
|
||||
this.button,
|
||||
this.subtitle,
|
||||
this.overline,
|
||||
});
|
||||
|
||||
/// Extremely large text.
|
||||
///
|
||||
/// The font size is 112 pixels.
|
||||
final TextStyle display4;
|
||||
|
||||
/// Very, very large text.
|
||||
///
|
||||
/// Used for the date in the dialog shown by [showDatePicker].
|
||||
final TextStyle display3;
|
||||
|
||||
/// Very large text.
|
||||
final TextStyle display2;
|
||||
|
||||
/// Large text.
|
||||
final TextStyle display1;
|
||||
|
||||
/// Used for large text in dialogs (e.g., the month and year in the dialog
|
||||
/// shown by [showDatePicker]).
|
||||
final TextStyle headline;
|
||||
|
||||
/// Used for the primary text in app bars and dialogs (e.g., [AppBar.title]
|
||||
/// and [AlertDialog.title]).
|
||||
final TextStyle title;
|
||||
|
||||
/// Used for the primary text in lists (e.g., [ListTile.title]).
|
||||
final TextStyle subhead;
|
||||
|
||||
/// Used for emphasizing text that would otherwise be [body1].
|
||||
final TextStyle body2;
|
||||
|
||||
/// Used for the default text style for [Material].
|
||||
final TextStyle body1;
|
||||
|
||||
/// Used for auxiliary text associated with images.
|
||||
final TextStyle caption;
|
||||
|
||||
/// Used for text on [RaisedButton] and [FlatButton].
|
||||
final TextStyle button;
|
||||
|
||||
/// For medium emphasis text that's a little smaller than [subhead].
|
||||
final TextStyle subtitle;
|
||||
|
||||
/// The smallest style,
|
||||
///
|
||||
/// Typically used for captions or to introduce a (larger) headline.
|
||||
final TextStyle overline;
|
||||
|
||||
/// Creates a copy of this text theme but with the given fields replaced with
|
||||
/// the new values.
|
||||
///
|
||||
/// Consider using [Typography.black] or [Typography.white], which implement
|
||||
/// the typography styles in the material design specification, as a starting
|
||||
/// point.
|
||||
///
|
||||
/// ## Sample code
|
||||
///
|
||||
/// ```dart
|
||||
/// /// A Widget that sets the ambient theme's title text color for its
|
||||
/// /// descendants, while leaving other ambient theme attributes alone.
|
||||
/// class TitleColorThemeCopy extends StatelessWidget {
|
||||
/// TitleColorThemeCopy({Key key, this.child, this.titleColor}) : super(key: key);
|
||||
///
|
||||
/// final Color titleColor;
|
||||
/// final Widget child;
|
||||
///
|
||||
/// @override
|
||||
/// Widget build(BuildContext context) {
|
||||
/// final ThemeData theme = Theme.of(context);
|
||||
/// return Theme(
|
||||
/// data: theme.copyWith(
|
||||
/// textTheme: theme.textTheme.copyWith(
|
||||
/// title: theme.textTheme.title.copyWith(
|
||||
/// color: titleColor,
|
||||
/// ),
|
||||
/// ),
|
||||
/// ),
|
||||
/// child: child,
|
||||
/// );
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [merge] is used instead of [copyWith] when you want to merge all
|
||||
/// of the fields of a TextTheme instead of individual fields.
|
||||
TextTheme copyWith({
|
||||
TextStyle display4,
|
||||
TextStyle display3,
|
||||
TextStyle display2,
|
||||
TextStyle display1,
|
||||
TextStyle headline,
|
||||
TextStyle title,
|
||||
TextStyle subhead,
|
||||
TextStyle body2,
|
||||
TextStyle body1,
|
||||
TextStyle caption,
|
||||
TextStyle button,
|
||||
TextStyle subtitle,
|
||||
TextStyle overline,
|
||||
}) {
|
||||
return TextTheme(
|
||||
display4: display4 ?? this.display4,
|
||||
display3: display3 ?? this.display3,
|
||||
display2: display2 ?? this.display2,
|
||||
display1: display1 ?? this.display1,
|
||||
headline: headline ?? this.headline,
|
||||
title: title ?? this.title,
|
||||
subhead: subhead ?? this.subhead,
|
||||
body2: body2 ?? this.body2,
|
||||
body1: body1 ?? this.body1,
|
||||
caption: caption ?? this.caption,
|
||||
button: button ?? this.button,
|
||||
subtitle: subtitle ?? this.subtitle,
|
||||
overline: overline ?? this.overline,
|
||||
);
|
||||
}
|
||||
|
||||
/// Creates a new [TextTheme] where each text style from this object has been
|
||||
/// merged with the matching text style from the `other` object.
|
||||
///
|
||||
/// The merging is done by calling [TextStyle.merge] on each respective pair
|
||||
/// of text styles from this and the [other] text themes and is subject to
|
||||
/// the value of [TextStyle.inherit] flag. For more details, see the
|
||||
/// documentation on [TextStyle.merge] and [TextStyle.inherit].
|
||||
///
|
||||
/// If this theme, or the `other` theme has members that are null, then the
|
||||
/// non-null one (if any) is used. If the `other` theme is itself null, then
|
||||
/// this [TextTheme] is returned unchanged. If values in both are set, then
|
||||
/// the values are merged using [TextStyle.merge].
|
||||
///
|
||||
/// This is particularly useful if one [TextTheme] defines one set of
|
||||
/// properties and another defines a different set, e.g. having colors
|
||||
/// defined in one text theme and font sizes in another, or when one
|
||||
/// [TextTheme] has only some fields defined, and you want to define the rest
|
||||
/// by merging it with a default theme.
|
||||
///
|
||||
/// ## Sample code
|
||||
///
|
||||
/// ```dart
|
||||
/// /// A Widget that sets the ambient theme's title text color for its
|
||||
/// /// descendants, while leaving other ambient theme attributes alone.
|
||||
/// class TitleColorTheme extends StatelessWidget {
|
||||
/// TitleColorTheme({Key key, this.child, this.titleColor}) : super(key: key);
|
||||
///
|
||||
/// final Color titleColor;
|
||||
/// final Widget child;
|
||||
///
|
||||
/// @override
|
||||
/// Widget build(BuildContext context) {
|
||||
/// ThemeData theme = Theme.of(context);
|
||||
/// // This partialTheme is incomplete: it only has the title style
|
||||
/// // defined. Just replacing theme.textTheme with partialTheme would
|
||||
/// // set the title, but everything else would be null. This isn't very
|
||||
/// // useful, so merge it with the existing theme to keep all of the
|
||||
/// // preexisting definitions for the other styles.
|
||||
/// TextTheme partialTheme = TextTheme(title: TextStyle(color: titleColor));
|
||||
/// theme = theme.copyWith(textTheme: theme.textTheme.merge(partialTheme));
|
||||
/// return Theme(data: theme, child: child);
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// See also:
|
||||
///
|
||||
/// * [copyWith] is used instead of [merge] when you wish to override
|
||||
/// individual fields in the [TextTheme] instead of merging all of the
|
||||
/// fields of two [TextTheme]s.
|
||||
TextTheme merge(TextTheme other) {
|
||||
if (other == null)
|
||||
return this;
|
||||
return copyWith(
|
||||
display4: display4?.merge(other.display4) ?? other.display4,
|
||||
display3: display3?.merge(other.display3) ?? other.display3,
|
||||
display2: display2?.merge(other.display2) ?? other.display2,
|
||||
display1: display1?.merge(other.display1) ?? other.display1,
|
||||
headline: headline?.merge(other.headline) ?? other.headline,
|
||||
title: title?.merge(other.title) ?? other.title,
|
||||
subhead: subhead?.merge(other.subhead) ?? other.subhead,
|
||||
body2: body2?.merge(other.body2) ?? other.body2,
|
||||
body1: body1?.merge(other.body1) ?? other.body1,
|
||||
caption: caption?.merge(other.caption) ?? other.caption,
|
||||
button: button?.merge(other.button) ?? other.button,
|
||||
subtitle: subtitle?.merge(other.subtitle) ?? other.subtitle,
|
||||
overline: overline?.merge(other.overline) ?? other.overline,
|
||||
);
|
||||
}
|
||||
|
||||
/// Creates a copy of this text theme but with the given field replaced in
|
||||
/// each of the individual text styles.
|
||||
///
|
||||
/// The `displayColor` is applied to [display4], [display3], [display2],
|
||||
/// [display1], and [caption]. The `bodyColor` is applied to the remaining
|
||||
/// text styles.
|
||||
///
|
||||
/// Consider using [Typography.black] or [Typography.white], which implement
|
||||
/// the typography styles in the material design specification, as a starting
|
||||
/// point.
|
||||
TextTheme apply({
|
||||
String fontFamily,
|
||||
double fontSizeFactor = 1.0,
|
||||
double fontSizeDelta = 0.0,
|
||||
Color displayColor,
|
||||
Color bodyColor,
|
||||
TextDecoration decoration,
|
||||
Color decorationColor,
|
||||
TextDecorationStyle decorationStyle,
|
||||
}) {
|
||||
return TextTheme(
|
||||
display4: display4.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
display3: display3.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
display2: display2.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
display1: display1.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
headline: headline.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
title: title.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
subhead: subhead.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
body2: body2.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
body1: body1.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
caption: caption.apply(
|
||||
color: displayColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
button: button.apply(
|
||||
color: bodyColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
subtitle: subtitle.apply(
|
||||
color: bodyColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
overline: overline.apply(
|
||||
color: bodyColor,
|
||||
decoration: decoration,
|
||||
decorationColor: decorationColor,
|
||||
decorationStyle: decorationStyle,
|
||||
fontFamily: fontFamily,
|
||||
fontSizeFactor: fontSizeFactor,
|
||||
fontSizeDelta: fontSizeDelta,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Linearly interpolate between two text themes.
|
||||
///
|
||||
/// The arguments must not be null.
|
||||
///
|
||||
/// {@macro flutter.material.themeData.lerp}
|
||||
static TextTheme lerp(TextTheme a, TextTheme b, double t) {
|
||||
assert(a != null);
|
||||
assert(b != null);
|
||||
assert(t != null);
|
||||
return TextTheme(
|
||||
display4: TextStyle.lerp(a.display4, b.display4, t),
|
||||
display3: TextStyle.lerp(a.display3, b.display3, t),
|
||||
display2: TextStyle.lerp(a.display2, b.display2, t),
|
||||
display1: TextStyle.lerp(a.display1, b.display1, t),
|
||||
headline: TextStyle.lerp(a.headline, b.headline, t),
|
||||
title: TextStyle.lerp(a.title, b.title, t),
|
||||
subhead: TextStyle.lerp(a.subhead, b.subhead, t),
|
||||
body2: TextStyle.lerp(a.body2, b.body2, t),
|
||||
body1: TextStyle.lerp(a.body1, b.body1, t),
|
||||
caption: TextStyle.lerp(a.caption, b.caption, t),
|
||||
button: TextStyle.lerp(a.button, b.button, t),
|
||||
subtitle: TextStyle.lerp(a.subtitle, b.subtitle, t),
|
||||
overline: TextStyle.lerp(a.overline, b.overline, t),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(dynamic other) {
|
||||
if (identical(this, other))
|
||||
return true;
|
||||
if (other.runtimeType != runtimeType)
|
||||
return false;
|
||||
final TextTheme typedOther = other;
|
||||
return display4 == typedOther.display4
|
||||
&& display3 == typedOther.display3
|
||||
&& display2 == typedOther.display2
|
||||
&& display1 == typedOther.display1
|
||||
&& headline == typedOther.headline
|
||||
&& title == typedOther.title
|
||||
&& subhead == typedOther.subhead
|
||||
&& body2 == typedOther.body2
|
||||
&& body1 == typedOther.body1
|
||||
&& caption == typedOther.caption
|
||||
&& button == typedOther.button
|
||||
&& subtitle == typedOther.subtitle
|
||||
&& overline == typedOther.overline;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
// The hashValues() function supports up to 20 arguments.
|
||||
return hashValues(
|
||||
display4,
|
||||
display3,
|
||||
display2,
|
||||
display1,
|
||||
headline,
|
||||
title,
|
||||
subhead,
|
||||
body2,
|
||||
body1,
|
||||
caption,
|
||||
button,
|
||||
subtitle,
|
||||
overline,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
|
||||
super.debugFillProperties(properties);
|
||||
final TextTheme defaultTheme = Typography(platform: defaultTargetPlatform).black;
|
||||
properties.add(DiagnosticsProperty<TextStyle>('display4', display4, defaultValue: defaultTheme.display4));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('display3', display3, defaultValue: defaultTheme.display3));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('display2', display2, defaultValue: defaultTheme.display2));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('display1', display1, defaultValue: defaultTheme.display1));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('headline', headline, defaultValue: defaultTheme.headline));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('title', title, defaultValue: defaultTheme.title));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('subhead', subhead, defaultValue: defaultTheme.subhead));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('body2', body2, defaultValue: defaultTheme.body2));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('body1', body1, defaultValue: defaultTheme.body1));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('caption', caption, defaultValue: defaultTheme.caption));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('button', button, defaultValue: defaultTheme.button));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('subtitle)', subtitle, defaultValue: defaultTheme.subtitle));
|
||||
properties.add(DiagnosticsProperty<TextStyle>('overline', overline, defaultValue: defaultTheme.overline));
|
||||
}
|
||||
}
|
@ -124,18 +124,17 @@ class Theme extends StatelessWidget {
|
||||
/// }
|
||||
/// ```
|
||||
static ThemeData of(BuildContext context, { bool shadowThemeOnly = false }) {
|
||||
final _InheritedTheme inheritedTheme =
|
||||
context.inheritFromWidgetOfExactType(_InheritedTheme);
|
||||
final _InheritedTheme inheritedTheme = context.inheritFromWidgetOfExactType(_InheritedTheme);
|
||||
if (shadowThemeOnly) {
|
||||
if (inheritedTheme == null || inheritedTheme.theme.isMaterialAppTheme)
|
||||
return null;
|
||||
return inheritedTheme.theme.data;
|
||||
}
|
||||
|
||||
final ThemeData colorTheme = (inheritedTheme != null) ? inheritedTheme.theme.data : _kFallbackTheme;
|
||||
final MaterialLocalizations localizations = MaterialLocalizations.of(context);
|
||||
final TextTheme geometryTheme = localizations?.localTextGeometry ?? MaterialTextGeometry.englishLike;
|
||||
return ThemeData.localize(colorTheme, geometryTheme);
|
||||
final ScriptCategory category = localizations?.scriptCategory ?? ScriptCategory.englishLike;
|
||||
final ThemeData theme = inheritedTheme?.theme?.data ?? _kFallbackTheme;
|
||||
return ThemeData.localize(theme, theme.typography.geometryThemeFor(category));
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -18,6 +18,7 @@ import 'input_decorator.dart';
|
||||
import 'page_transitions_theme.dart';
|
||||
import 'slider_theme.dart';
|
||||
import 'tab_bar_theme.dart';
|
||||
import 'text_theme.dart';
|
||||
import 'typography.dart';
|
||||
|
||||
export 'package:flutter/services.dart' show Brightness;
|
||||
@ -149,6 +150,7 @@ class ThemeData extends Diagnosticable {
|
||||
MaterialTapTargetSize materialTapTargetSize,
|
||||
PageTransitionsTheme pageTransitionsTheme,
|
||||
ColorScheme colorScheme,
|
||||
Typography typography,
|
||||
}) {
|
||||
brightness ??= Brightness.light;
|
||||
final bool isDark = brightness == Brightness.dark;
|
||||
@ -200,7 +202,7 @@ class ThemeData extends Diagnosticable {
|
||||
accentIconTheme ??= accentIsDark ? const IconThemeData(color: Colors.white) : const IconThemeData(color: Colors.black);
|
||||
iconTheme ??= isDark ? const IconThemeData(color: Colors.white) : const IconThemeData(color: Colors.black87);
|
||||
platform ??= defaultTargetPlatform;
|
||||
final Typography typography = Typography(platform: platform);
|
||||
typography ??= Typography(platform: platform);
|
||||
final TextTheme defaultTextTheme = isDark ? typography.white : typography.black;
|
||||
textTheme = defaultTextTheme.merge(textTheme);
|
||||
final TextTheme defaultPrimaryTextTheme = primaryIsDark ? typography.white : typography.black;
|
||||
@ -287,6 +289,7 @@ class ThemeData extends Diagnosticable {
|
||||
materialTapTargetSize: materialTapTargetSize,
|
||||
pageTransitionsTheme: pageTransitionsTheme,
|
||||
colorScheme: colorScheme,
|
||||
typography: typography,
|
||||
);
|
||||
}
|
||||
|
||||
@ -344,6 +347,7 @@ class ThemeData extends Diagnosticable {
|
||||
@required this.materialTapTargetSize,
|
||||
@required this.pageTransitionsTheme,
|
||||
@required this.colorScheme,
|
||||
@required this.typography,
|
||||
}) : assert(brightness != null),
|
||||
assert(primaryColor != null),
|
||||
assert(primaryColorBrightness != null),
|
||||
@ -386,7 +390,8 @@ class ThemeData extends Diagnosticable {
|
||||
assert(platform != null),
|
||||
assert(materialTapTargetSize != null),
|
||||
assert(pageTransitionsTheme != null),
|
||||
assert(colorScheme != null);
|
||||
assert(colorScheme != null),
|
||||
assert(typography != null);
|
||||
|
||||
// Warning: make sure these properties are in the exact same order as in
|
||||
// hashValues() and in the raw constructor and in the order of fields in
|
||||
@ -612,6 +617,10 @@ class ThemeData extends Diagnosticable {
|
||||
/// that is possible without significant backwards compatibility breaks.
|
||||
final ColorScheme colorScheme;
|
||||
|
||||
/// The color and geometry [TextTheme] values used to configure [textTheme],
|
||||
/// [primaryTextTheme], and [accentTextTheme].
|
||||
final Typography typography;
|
||||
|
||||
/// Creates a copy of this theme but with the given fields replaced with the new values.
|
||||
ThemeData copyWith({
|
||||
Brightness brightness,
|
||||
@ -658,6 +667,7 @@ class ThemeData extends Diagnosticable {
|
||||
MaterialTapTargetSize materialTapTargetSize,
|
||||
PageTransitionsTheme pageTransitionsTheme,
|
||||
ColorScheme colorScheme,
|
||||
Typography typography,
|
||||
}) {
|
||||
return ThemeData.raw(
|
||||
brightness: brightness ?? this.brightness,
|
||||
@ -704,6 +714,7 @@ class ThemeData extends Diagnosticable {
|
||||
materialTapTargetSize: materialTapTargetSize ?? this.materialTapTargetSize,
|
||||
pageTransitionsTheme: pageTransitionsTheme ?? this.pageTransitionsTheme,
|
||||
colorScheme: colorScheme ?? this.colorScheme,
|
||||
typography: typography ?? this.typography,
|
||||
);
|
||||
}
|
||||
|
||||
@ -829,6 +840,7 @@ class ThemeData extends Diagnosticable {
|
||||
materialTapTargetSize: t < 0.5 ? a.materialTapTargetSize : b.materialTapTargetSize,
|
||||
pageTransitionsTheme: t < 0.5 ? a.pageTransitionsTheme : b.pageTransitionsTheme,
|
||||
colorScheme: ColorScheme.lerp(a.colorScheme, b.colorScheme, t),
|
||||
typography: Typography.lerp(a.typography, b.typography, t),
|
||||
);
|
||||
}
|
||||
|
||||
@ -883,7 +895,8 @@ class ThemeData extends Diagnosticable {
|
||||
(otherData.platform == platform) &&
|
||||
(otherData.materialTapTargetSize == materialTapTargetSize) &&
|
||||
(otherData.pageTransitionsTheme == pageTransitionsTheme) &&
|
||||
(otherData.colorScheme == colorScheme);
|
||||
(otherData.colorScheme == colorScheme) &&
|
||||
(otherData.typography == typography);
|
||||
}
|
||||
|
||||
@override
|
||||
@ -939,6 +952,7 @@ class ThemeData extends Diagnosticable {
|
||||
materialTapTargetSize,
|
||||
pageTransitionsTheme,
|
||||
colorScheme,
|
||||
typography,
|
||||
),
|
||||
),
|
||||
);
|
||||
@ -989,6 +1003,7 @@ class ThemeData extends Diagnosticable {
|
||||
properties.add(DiagnosticsProperty<MaterialTapTargetSize>('materialTapTargetSize', materialTapTargetSize));
|
||||
properties.add(DiagnosticsProperty<PageTransitionsTheme>('pageTransitionsTheme', pageTransitionsTheme));
|
||||
properties.add(DiagnosticsProperty<ColorScheme>('colorScheme', colorScheme, defaultValue: defaultData.colorScheme));
|
||||
properties.add(DiagnosticsProperty<Typography>('typography', typography, defaultValue: defaultData.typography));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,10 +16,10 @@ import 'dialog.dart';
|
||||
import 'feedback.dart';
|
||||
import 'flat_button.dart';
|
||||
import 'material_localizations.dart';
|
||||
import 'text_theme.dart';
|
||||
import 'theme.dart';
|
||||
import 'theme_data.dart';
|
||||
import 'time.dart';
|
||||
import 'typography.dart';
|
||||
|
||||
const Duration _kDialAnimateDuration = Duration(milliseconds: 200);
|
||||
const double _kTwoPi = 2 * math.pi;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -915,7 +915,7 @@ void main() {
|
||||
);
|
||||
final Text helperText = tester.widget(find.text('helper text'));
|
||||
expect(helperText.style.color, themeData.hintColor);
|
||||
expect(helperText.style.fontSize, MaterialTextGeometry.englishLike.caption.fontSize);
|
||||
expect(helperText.style.fontSize, Typography.englishLike2014.caption.fontSize);
|
||||
});
|
||||
|
||||
testWidgets('TextField with specified helperStyle', (WidgetTester tester) async {
|
||||
|
@ -9,6 +9,8 @@ import 'package:flutter/src/foundation/diagnostics.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
const TextTheme defaultGeometryTheme = Typography.englishLike2014;
|
||||
|
||||
test('ThemeDataTween control test', () {
|
||||
final ThemeData light = ThemeData.light();
|
||||
final ThemeData dark = ThemeData.dark();
|
||||
@ -55,7 +57,7 @@ void main() {
|
||||
)
|
||||
);
|
||||
|
||||
expect(Theme.of(capturedContext), equals(ThemeData.localize(ThemeData.fallback(), MaterialTextGeometry.englishLike)));
|
||||
expect(Theme.of(capturedContext), equals(ThemeData.localize(ThemeData.fallback(), defaultGeometryTheme)));
|
||||
expect(Theme.of(capturedContext, shadowThemeOnly: true), isNull);
|
||||
});
|
||||
|
||||
@ -65,20 +67,20 @@ void main() {
|
||||
|
||||
// Same input, same output.
|
||||
expect(
|
||||
ThemeData.localize(light, MaterialTextGeometry.englishLike),
|
||||
same(ThemeData.localize(light, MaterialTextGeometry.englishLike)),
|
||||
ThemeData.localize(light, defaultGeometryTheme),
|
||||
same(ThemeData.localize(light, defaultGeometryTheme)),
|
||||
);
|
||||
|
||||
// Different text geometry, different output.
|
||||
expect(
|
||||
ThemeData.localize(light, MaterialTextGeometry.englishLike),
|
||||
isNot(same(ThemeData.localize(light, MaterialTextGeometry.tall))),
|
||||
ThemeData.localize(light, defaultGeometryTheme),
|
||||
isNot(same(ThemeData.localize(light, Typography.tall2014))),
|
||||
);
|
||||
|
||||
// Different base theme, different output.
|
||||
expect(
|
||||
ThemeData.localize(light, MaterialTextGeometry.englishLike),
|
||||
isNot(same(ThemeData.localize(dark, MaterialTextGeometry.englishLike))),
|
||||
ThemeData.localize(light, defaultGeometryTheme),
|
||||
isNot(same(ThemeData.localize(dark, defaultGeometryTheme))),
|
||||
);
|
||||
});
|
||||
|
||||
@ -408,7 +410,7 @@ void main() {
|
||||
}
|
||||
}
|
||||
|
||||
expect(theme.textTheme.display4.debugLabel, '(englishLike display4).merge(blackMountainView display4)');
|
||||
expect(theme.textTheme.display4.debugLabel, '(englishLike display4 2014).merge(blackMountainView display4)');
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -74,6 +74,8 @@ void main() {
|
||||
expect(textTheme.body1, isTextFont);
|
||||
expect(textTheme.caption, isTextFont);
|
||||
expect(textTheme.button, isTextFont);
|
||||
expect(textTheme.subtitle, isTextFont);
|
||||
expect(textTheme.overline, isTextFont);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -138,11 +138,11 @@ It is converted to an enum value because the `material_en.arb` file
|
||||
has this value labeled as `"x-flutter-type": "icuShortTimePattern"`.
|
||||
|
||||
The value of `scriptCategory` is based on the
|
||||
[Language categories reference](https://material.io/go/design-typography#typography-language-categories-reference)
|
||||
[Language categories reference](https://material.io/design/typography/language-support.html#language-categories-reference)
|
||||
section in the Material spec. The `scriptCategory` value is used when looking up
|
||||
the `TextTheme`, see the
|
||||
[MaterialTextGeometry](https://docs.flutter.io/flutter/material/MaterialTextGeometry/forScriptCategory.html)
|
||||
class.
|
||||
[MaterialTextGeometry](https://docs.flutter.io/flutter/material/MaterialTextGeometry/localizedFor.html)
|
||||
method.
|
||||
|
||||
|
||||
### Generated file localizations.dart: all of the localizations as a Map
|
||||
|
@ -171,7 +171,7 @@ class MaterialLocalizationAr extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'عدد الصفوف في الصفحة:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'tall';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.tall;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'بحث';
|
||||
@ -372,7 +372,7 @@ class MaterialLocalizationBg extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Редове на страница:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Търсене';
|
||||
@ -573,7 +573,7 @@ class MaterialLocalizationBs extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Redaka po stranici:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Pretražite';
|
||||
@ -774,7 +774,7 @@ class MaterialLocalizationCa extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Files per pàgina:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Cerca';
|
||||
@ -975,7 +975,7 @@ class MaterialLocalizationCs extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Počet řádků na stránku:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Hledat';
|
||||
@ -1176,7 +1176,7 @@ class MaterialLocalizationDa extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Rækker pr. side:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Søg';
|
||||
@ -1377,7 +1377,7 @@ class MaterialLocalizationDe extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Zeilen pro Seite:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Suchen';
|
||||
@ -1608,7 +1608,7 @@ class MaterialLocalizationEl extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Σειρές ανά σελίδα:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Αναζήτηση';
|
||||
@ -1809,7 +1809,7 @@ class MaterialLocalizationEn extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Rows per page:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Search';
|
||||
@ -2313,7 +2313,7 @@ class MaterialLocalizationEs extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Filas por página:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Buscar';
|
||||
@ -4137,7 +4137,7 @@ class MaterialLocalizationEt extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Ridu lehe kohta:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Otsing';
|
||||
@ -4338,7 +4338,7 @@ class MaterialLocalizationFa extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'ردیف در هر صفحه:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'tall';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.tall;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'جستجو';
|
||||
@ -4539,7 +4539,7 @@ class MaterialLocalizationFi extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Riviä/sivu:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Haku';
|
||||
@ -4740,7 +4740,7 @@ class MaterialLocalizationFil extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Mga row bawat page:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Maghanap';
|
||||
@ -4941,7 +4941,7 @@ class MaterialLocalizationFr extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Lignes par page :';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Rechercher';
|
||||
@ -5169,7 +5169,7 @@ class MaterialLocalizationGsw extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Zeilen pro Seite:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Suchen';
|
||||
@ -5370,7 +5370,7 @@ class MaterialLocalizationHe extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'שורות בכל דף:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'חיפוש';
|
||||
@ -5571,7 +5571,7 @@ class MaterialLocalizationHi extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'हर पेज में पंक्तियों की संख्या:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'dense';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.dense;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'खोजें';
|
||||
@ -5772,7 +5772,7 @@ class MaterialLocalizationHr extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Redaka po stranici:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Pretražite';
|
||||
@ -5973,7 +5973,7 @@ class MaterialLocalizationHu extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Oldalankénti sorszám:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Keresés';
|
||||
@ -6174,7 +6174,7 @@ class MaterialLocalizationId extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Baris per halaman:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Telusuri';
|
||||
@ -6375,7 +6375,7 @@ class MaterialLocalizationIt extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Righe per pagina:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Cerca';
|
||||
@ -6576,7 +6576,7 @@ class MaterialLocalizationJa extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'ページあたりの行数:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'dense';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.dense;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'検索';
|
||||
@ -6777,7 +6777,7 @@ class MaterialLocalizationKm extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'ជួរមុខ:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'dense';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.dense;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'ស្វែងរក';
|
||||
@ -6978,7 +6978,7 @@ class MaterialLocalizationKo extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'페이지당 행 수:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'dense';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.dense;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'검색';
|
||||
@ -7179,7 +7179,7 @@ class MaterialLocalizationLt extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Eilučių puslapyje:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Paieška';
|
||||
@ -7380,7 +7380,7 @@ class MaterialLocalizationLv extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Rindas lapā:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Meklēt';
|
||||
@ -7581,7 +7581,7 @@ class MaterialLocalizationMs extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Baris setiap halaman:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Cari';
|
||||
@ -7782,7 +7782,7 @@ class MaterialLocalizationNb extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Rader per side:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Søk';
|
||||
@ -7983,7 +7983,7 @@ class MaterialLocalizationNl extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Rijen per pagina:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Zoeken';
|
||||
@ -8184,7 +8184,7 @@ class MaterialLocalizationPl extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Wiersze na stronie:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Szukaj';
|
||||
@ -8385,7 +8385,7 @@ class MaterialLocalizationPs extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'د هرې پاڼې پاڼې:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'tall';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.tall;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'لټون';
|
||||
@ -8586,7 +8586,7 @@ class MaterialLocalizationPt extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Linhas por página:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Pesquisa';
|
||||
@ -8871,7 +8871,7 @@ class MaterialLocalizationRo extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Rânduri pe pagină:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Căutați';
|
||||
@ -9072,7 +9072,7 @@ class MaterialLocalizationRu extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Строк на странице:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Поиск';
|
||||
@ -9273,7 +9273,7 @@ class MaterialLocalizationSk extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Počet riadkov na stránku:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Hľadať';
|
||||
@ -9474,7 +9474,7 @@ class MaterialLocalizationSl extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Vrstice na stran:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Iskanje';
|
||||
@ -9675,7 +9675,7 @@ class MaterialLocalizationSr extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Редова по страници:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Претражите';
|
||||
@ -10053,7 +10053,7 @@ class MaterialLocalizationSv extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Rader per sida:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Sök';
|
||||
@ -10254,7 +10254,7 @@ class MaterialLocalizationTh extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'แถวต่อหน้า:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'tall';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.tall;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'ค้นหา';
|
||||
@ -10455,7 +10455,7 @@ class MaterialLocalizationTl extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Mga row bawat page:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Maghanap';
|
||||
@ -10656,7 +10656,7 @@ class MaterialLocalizationTr extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Sayfa başına satır sayısı:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Ara';
|
||||
@ -10857,7 +10857,7 @@ class MaterialLocalizationUk extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Рядків на сторінці:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Пошук';
|
||||
@ -11058,7 +11058,7 @@ class MaterialLocalizationUr extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'قطاریں فی صفحہ:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'tall';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.tall;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'تلاش';
|
||||
@ -11259,7 +11259,7 @@ class MaterialLocalizationVi extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'Số hàng mỗi trang:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'English-like';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'Tìm kiếm';
|
||||
@ -11460,7 +11460,7 @@ class MaterialLocalizationZh extends GlobalMaterialLocalizations {
|
||||
String get rowsPerPageTitle => r'每页行数:';
|
||||
|
||||
@override
|
||||
String get scriptCategory => r'dense';
|
||||
ScriptCategory get scriptCategory => ScriptCategory.dense;
|
||||
|
||||
@override
|
||||
String get searchFieldLabel => r'搜索';
|
||||
|
@ -1,7 +1,8 @@
|
||||
{
|
||||
"scriptCategory": "English-like",
|
||||
"@scriptCategory": {
|
||||
"description": "The name of the language's script category (see https://material.io/go/design-typography#typography-language-categories-reference)."
|
||||
"description": "The name of the language's script category (see https://material.io/design/typography/language-support.html#language-categories-reference).",
|
||||
"x-flutter-type": "scriptCategory"
|
||||
},
|
||||
|
||||
"timeOfDayFormat": "h:mm a",
|
||||
|
@ -502,18 +502,8 @@ abstract class GlobalMaterialLocalizations implements MaterialLocalizations {
|
||||
).replaceFirst(r'$remainingCount', formatDecimal(remainingCount));
|
||||
}
|
||||
|
||||
/// The script category used by [localTextGeometry]. Must be one of the strings
|
||||
/// declared in [MaterialTextGeometry].
|
||||
//
|
||||
// TODO(ianh): make this return a TextTheme from MaterialTextGeometry.
|
||||
// TODO(ianh): drop the constructor on MaterialTextGeometry.
|
||||
// TODO(ianh): drop the strings on MaterialTextGeometry.
|
||||
@protected
|
||||
String get scriptCategory;
|
||||
|
||||
/// Looks up text geometry defined in [MaterialTextGeometry].
|
||||
@override
|
||||
TextTheme get localTextGeometry => MaterialTextGeometry.forScriptCategory(scriptCategory);
|
||||
ScriptCategory get scriptCategory;
|
||||
|
||||
/// A [LocalizationsDelegate] that uses [GlobalMaterialLocalizations.load]
|
||||
/// to create an instance of this class.
|
||||
|
Loading…
x
Reference in New Issue
Block a user