Skip to content

Commit 5180e45

Browse files
authored
Create SearchBar and SearchBarTheme (#122309)
1 parent 7e151b4 commit 5180e45

10 files changed

Lines changed: 1811 additions & 0 deletions

File tree

dev/tools/gen_defaults/bin/gen_defaults.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import 'package:gen_defaults/navigation_rail_template.dart';
4545
import 'package:gen_defaults/popup_menu_template.dart';
4646
import 'package:gen_defaults/progress_indicator_template.dart';
4747
import 'package:gen_defaults/radio_template.dart';
48+
import 'package:gen_defaults/search_bar_template.dart';
4849
import 'package:gen_defaults/segmented_button_template.dart';
4950
import 'package:gen_defaults/slider_template.dart';
5051
import 'package:gen_defaults/snackbar_template.dart';
@@ -107,6 +108,8 @@ Future<void> main(List<String> args) async {
107108
'progress_indicator_circular.json',
108109
'progress_indicator_linear.json',
109110
'radio_button.json',
111+
'search_bar.json',
112+
'search_view.json',
110113
'segmented_button_outlined.json',
111114
'shape.json',
112115
'sheet_bottom.json',
@@ -173,6 +176,7 @@ Future<void> main(List<String> args) async {
173176
PopupMenuTemplate('PopupMenu', '$materialLib/popup_menu.dart', tokens).updateFile();
174177
ProgressIndicatorTemplate('ProgressIndicator', '$materialLib/progress_indicator.dart', tokens).updateFile();
175178
RadioTemplate('Radio<T>', '$materialLib/radio.dart', tokens).updateFile();
179+
SearchBarTemplate('SearchBar', '$materialLib/search_anchor.dart', tokens).updateFile();
176180
SegmentedButtonTemplate('md.comp.outlined-segmented-button', 'SegmentedButton', '$materialLib/segmented_button.dart', tokens).updateFile();
177181
SnackbarTemplate('md.comp.snackbar', 'Snackbar', '$materialLib/snack_bar.dart', tokens).updateFile();
178182
SliderTemplate('md.comp.slider', 'Slider', '$materialLib/slider.dart', tokens).updateFile();
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright 2014 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'template.dart';
6+
7+
class SearchBarTemplate extends TokenTemplate {
8+
const SearchBarTemplate(super.blockName, super.fileName, super.tokens, {
9+
super.colorSchemePrefix = '_colors.',
10+
super.textThemePrefix = '_textTheme.'
11+
});
12+
13+
@override
14+
String generate() => '''
15+
class _SearchBarDefaultsM3 extends SearchBarThemeData {
16+
_SearchBarDefaultsM3(this.context);
17+
18+
final BuildContext context;
19+
late final ColorScheme _colors = Theme.of(context).colorScheme;
20+
late final TextTheme _textTheme = Theme.of(context).textTheme;
21+
22+
@override
23+
MaterialStateProperty<Color?>? get backgroundColor =>
24+
MaterialStatePropertyAll<Color>(${componentColor("md.comp.search-bar.container")});
25+
26+
@override
27+
MaterialStateProperty<double>? get elevation =>
28+
const MaterialStatePropertyAll<double>(${elevation("md.comp.search-bar.container")});
29+
30+
@override
31+
MaterialStateProperty<Color>? get shadowColor =>
32+
MaterialStatePropertyAll<Color>(_colors.shadow);
33+
34+
@override
35+
MaterialStateProperty<Color>? get surfaceTintColor =>
36+
MaterialStatePropertyAll<Color>(${colorOrTransparent("md.comp.search-bar.container.surface-tint-layer.color")});
37+
38+
@override
39+
MaterialStateProperty<Color?>? get overlayColor =>
40+
MaterialStateProperty.resolveWith((Set<MaterialState> states) {
41+
if (states.contains(MaterialState.pressed)) {
42+
return ${componentColor("md.comp.search-bar.pressed.state-layer")};
43+
}
44+
if (states.contains(MaterialState.hovered)) {
45+
return ${componentColor("md.comp.search-bar.hover.state-layer")};
46+
}
47+
if (states.contains(MaterialState.focused)) {
48+
return ${colorOrTransparent("md.comp.search-bar.focused.state-layer")};
49+
}
50+
return Colors.transparent;
51+
});
52+
53+
// No default side
54+
55+
@override
56+
MaterialStateProperty<OutlinedBorder>? get shape =>
57+
const MaterialStatePropertyAll<OutlinedBorder>(${shape('md.comp.search-bar.container', '')});
58+
59+
@override
60+
MaterialStateProperty<EdgeInsetsGeometry>? get padding =>
61+
const MaterialStatePropertyAll<EdgeInsetsGeometry>(EdgeInsets.symmetric(horizontal: 8.0));
62+
63+
@override
64+
MaterialStateProperty<TextStyle?> get textStyle =>
65+
MaterialStatePropertyAll<TextStyle?>(${textStyleWithColor('md.comp.search-bar.input-text')});
66+
67+
@override
68+
MaterialStateProperty<TextStyle?> get hintStyle =>
69+
MaterialStatePropertyAll<TextStyle?>(${textStyleWithColor('md.comp.search-bar.supporting-text')});
70+
71+
@override
72+
BoxConstraints get constraints =>
73+
const BoxConstraints(minWidth: 360.0, maxWidth: 800.0, minHeight: ${tokens['md.comp.search-bar.container.height']});
74+
}
75+
''';
76+
}

dev/tools/gen_defaults/lib/template.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,4 +236,15 @@ abstract class TokenTemplate {
236236
String textStyle(String componentToken) {
237237
return '$textThemePrefix${tokens["$componentToken.text-style"]}';
238238
}
239+
240+
String textStyleWithColor(String componentToken) {
241+
if (!tokens.containsKey('$componentToken.text-style')) {
242+
return 'null';
243+
}
244+
String style = textStyle(componentToken);
245+
if (tokens.containsKey('$componentToken.color')) {
246+
style = '$style?.copyWith(color: ${componentColor(componentToken)})';
247+
}
248+
return style;
249+
}
239250
}

packages/flutter/lib/material.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ export 'src/material/scaffold.dart';
152152
export 'src/material/scrollbar.dart';
153153
export 'src/material/scrollbar_theme.dart';
154154
export 'src/material/search.dart';
155+
export 'src/material/search_anchor.dart';
156+
export 'src/material/search_bar_theme.dart';
155157
export 'src/material/segmented_button.dart';
156158
export 'src/material/segmented_button_theme.dart';
157159
export 'src/material/selectable_text.dart';

0 commit comments

Comments
 (0)