Added missing cupertino search text field demo. (#708)

* Added cupertino search text field demo.

* fix

* Update lib/l10n/intl_en.arb

* Update lib/l10n/intl_en.arb

* flutter pub run grinder l10n

* Update intl_en_US.xml

* update code segments

* format

Co-authored-by: Pierre-Louis Guidez <plg@google.com>
Co-authored-by: Pierre-Louis <6655696+guidezpl@users.noreply.github.com>
diff --git a/lib/codeviewer/code_segments.dart b/lib/codeviewer/code_segments.dart
index 2e6b775..3ef5ae7 100644
--- a/lib/codeviewer/code_segments.dart
+++ b/lib/codeviewer/code_segments.dart
@@ -14193,6 +14193,541 @@
     ]);
   }
 
+  static TextSpan cupertinoSearchTextFieldDemo(BuildContext context) {
+    final codeStyle = CodeStyle.of(context);
+    return TextSpan(children: [
+      TextSpan(
+          style: codeStyle.commentStyle,
+          text: '// Copyright 2019 The Flutter team. All rights reserved.'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a'),
+      TextSpan(
+          style: codeStyle.commentStyle,
+          text:
+              '// Use of this source code is governed by a BSD-style license that can be'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a'),
+      TextSpan(
+          style: codeStyle.commentStyle, text: '// found in the LICENSE file.'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a'),
+      TextSpan(style: codeStyle.keywordStyle, text: 'import'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(
+          style: codeStyle.stringStyle,
+          text: '\u0027package:flutter/cupertino.dart\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a'),
+      TextSpan(style: codeStyle.keywordStyle, text: 'import'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(
+          style: codeStyle.stringStyle,
+          text: '\u0027package:flutter/material.dart\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a'),
+      TextSpan(style: codeStyle.keywordStyle, text: 'import'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(
+          style: codeStyle.stringStyle,
+          text:
+              '\u0027package:flutter_gen/gen_l10n/gallery_localizations.dart\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a'),
+      TextSpan(style: codeStyle.keywordStyle, text: 'class'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(
+          style: codeStyle.classStyle, text: 'CupertinoSearchTextFieldDemo'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'extends'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'StatefulWidget'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'const'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(
+          style: codeStyle.classStyle, text: 'CupertinoSearchTextFieldDemo'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '({'),
+      TextSpan(style: codeStyle.keywordStyle, text: 'super'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'key'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '});'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a  '),
+      TextSpan(style: codeStyle.keywordStyle, text: '@override'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.classStyle, text: 'State'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '<'),
+      TextSpan(
+          style: codeStyle.classStyle, text: 'CupertinoSearchTextFieldDemo'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '>'),
+      TextSpan(style: codeStyle.baseStyle, text: ' createState'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '()'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '=>'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(
+          style: codeStyle.classStyle,
+          text: '_CupertinoSearchTextFieldDemoState'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '();'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a'),
+      TextSpan(style: codeStyle.keywordStyle, text: 'class'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(
+          style: codeStyle.classStyle,
+          text: '_CupertinoSearchTextFieldDemoState'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'extends'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'State'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '<'),
+      TextSpan(
+          style: codeStyle.classStyle, text: 'CupertinoSearchTextFieldDemo'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '>'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'final'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'List'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '<'),
+      TextSpan(style: codeStyle.classStyle, text: 'String'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '>'),
+      TextSpan(style: codeStyle.baseStyle, text: ' platforms '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '['),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.stringStyle, text: '\u0027Android\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.stringStyle, text: '\u0027iOS\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.stringStyle, text: '\u0027Windows\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.stringStyle, text: '\u0027Linux\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.stringStyle, text: '\u0027MacOS\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.stringStyle, text: '\u0027Web\u0027'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '];'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a  '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'final'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'TextEditingController'),
+      TextSpan(style: codeStyle.baseStyle, text: ' _queryTextController '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'TextEditingController'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '();'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.classStyle, text: 'String'),
+      TextSpan(style: codeStyle.baseStyle, text: ' _searchPlatform '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.stringStyle, text: '\u0027\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.classStyle, text: 'List'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '<'),
+      TextSpan(style: codeStyle.classStyle, text: 'String'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '>'),
+      TextSpan(style: codeStyle.baseStyle, text: ' filteredPlatforms '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '[];'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a  '),
+      TextSpan(style: codeStyle.keywordStyle, text: '@override'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'void'),
+      TextSpan(style: codeStyle.baseStyle, text: ' initState'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '()'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'super'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'initState'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '();'),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a    filteredPlatforms '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' platforms'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a    _queryTextController'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'addListener'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '(()'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'if'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: '_queryTextController'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'text'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'isEmpty'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ')'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        setState'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '(()'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a          _searchPlatform '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.stringStyle, text: '\u0027\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(
+          style: codeStyle.baseStyle,
+          text: '\u000a          filteredPlatforms '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' platforms'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '});'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'else'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        setState'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '(()'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a          _searchPlatform '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' _queryTextController'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'text'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '});'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '});'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a  '),
+      TextSpan(style: codeStyle.keywordStyle, text: '@override'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.classStyle, text: 'Widget'),
+      TextSpan(style: codeStyle.baseStyle, text: ' build'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.classStyle, text: 'BuildContext'),
+      TextSpan(style: codeStyle.baseStyle, text: ' context'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ')'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'final'),
+      TextSpan(style: codeStyle.baseStyle, text: ' localizations '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'GalleryLocalizations'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'of'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: 'context'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ')!;'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'return'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'CupertinoPageScaffold'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      navigationBar'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'CupertinoNavigationBar'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(
+          style: codeStyle.baseStyle,
+          text: '\u000a        automaticallyImplyLeading'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'false'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        middle'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'Text'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: 'localizations'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(
+          style: codeStyle.baseStyle,
+          text: 'demoCupertinoSearchTextFieldTitle'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      child'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'SafeArea'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        child'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'Column'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a          children'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '['),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a            '),
+      TextSpan(style: codeStyle.classStyle, text: 'CupertinoSearchTextField'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a              controller'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' _queryTextController'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(
+          style: codeStyle.baseStyle,
+          text: '\u000a              restorationId'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(
+          style: codeStyle.stringStyle, text: '\u0027search_text_field\u0027'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a              padding'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'const'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'EdgeInsets'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'symmetric'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: 'horizontal'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.numberStyle, text: '6'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: ' vertical'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.numberStyle, text: '12'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a              decoration'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'const'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'BoxDecoration'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a                border'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'Border'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a                  bottom'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'BorderSide'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a                    width'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.numberStyle, text: '0'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a                    color'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'CupertinoColors'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'inactiveGray'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a                  '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a                '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a              '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a              placeholder'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(
+          style: codeStyle.baseStyle,
+          text: '\u000a                  localizations'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(
+          style: codeStyle.baseStyle,
+          text: 'demoCupertinoSearchTextFieldPlaceholder'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a            '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(
+          style: codeStyle.baseStyle,
+          text: '\u000a            _buildPlatformList'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '(),'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a          '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '],'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '),'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.punctuationStyle, text: ');'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a  '),
+      TextSpan(style: codeStyle.classStyle, text: 'Widget'),
+      TextSpan(style: codeStyle.baseStyle, text: ' _buildPlatformList'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '()'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'if'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: '_searchPlatform'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'isNotEmpty'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ')'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.classStyle, text: 'List'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '<'),
+      TextSpan(style: codeStyle.classStyle, text: 'String'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '>'),
+      TextSpan(style: codeStyle.baseStyle, text: ' tempList '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '[];'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'for'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.keywordStyle, text: 'int'),
+      TextSpan(style: codeStyle.baseStyle, text: ' i '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.numberStyle, text: '0'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: ' i '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '<'),
+      TextSpan(style: codeStyle.baseStyle, text: ' filteredPlatforms'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'length'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: ' i'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '++)'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'if'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: 'filteredPlatforms'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '['),
+      TextSpan(style: codeStyle.baseStyle, text: 'i'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ']'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a            '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'toLowerCase'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '()'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a            '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'contains'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: '_searchPlatform'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'toLowerCase'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '()))'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a          tempList'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'add'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: 'filteredPlatforms'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '['),
+      TextSpan(style: codeStyle.baseStyle, text: 'i'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ']);'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(
+          style: codeStyle.baseStyle, text: '\u000a      filteredPlatforms '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '='),
+      TextSpan(style: codeStyle.baseStyle, text: ' tempList'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ';'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'return'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'ListView'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'builder'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      itemCount'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' filteredPlatforms'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '.'),
+      TextSpan(style: codeStyle.baseStyle, text: 'length'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      shrinkWrap'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'true'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      itemBuilder'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: 'context'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ','),
+      TextSpan(style: codeStyle.baseStyle, text: ' index'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ')'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '{'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a        '),
+      TextSpan(style: codeStyle.keywordStyle, text: 'return'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'ListTile'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: 'title'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ':'),
+      TextSpan(style: codeStyle.baseStyle, text: ' '),
+      TextSpan(style: codeStyle.classStyle, text: 'Text'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '('),
+      TextSpan(style: codeStyle.baseStyle, text: 'filteredPlatforms'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '['),
+      TextSpan(style: codeStyle.baseStyle, text: 'index'),
+      TextSpan(style: codeStyle.punctuationStyle, text: ']));'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a      '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '},'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a    '),
+      TextSpan(style: codeStyle.punctuationStyle, text: ');'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a  '),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a'),
+      TextSpan(style: codeStyle.punctuationStyle, text: '}'),
+      TextSpan(style: codeStyle.baseStyle, text: '\u000a\u000a'),
+    ]);
+  }
+
   static TextSpan cupertinoSegmentedControlDemo(BuildContext context) {
     final codeStyle = CodeStyle.of(context);
     return TextSpan(children: [
diff --git a/lib/data/demos.dart b/lib/data/demos.dart
index dce7510..0ef062c 100644
--- a/lib/data/demos.dart
+++ b/lib/data/demos.dart
@@ -1214,6 +1214,26 @@
       ],
       category: GalleryDemoCategory.cupertino,
     ),
+    GalleryDemo(
+      title: localizations.demoCupertinoSearchTextFieldTitle,
+      icon: GalleryIcons.search,
+      slug: 'cupertino-search-text-field',
+      subtitle: localizations.demoCupertinoSearchTextFieldSubtitle,
+      configurations: [
+        GalleryDemoConfiguration(
+          title: localizations.demoCupertinoSearchTextFieldTitle,
+          description: localizations.demoCupertinoSearchTextFieldDescription,
+          documentationUrl:
+              '$_docsBaseUrl/cupertino/CupertinoSearchTextField-class.html',
+          buildRoute: (_) => DeferredWidget(
+              cupertinoLoader,
+              // ignore: prefer_const_constructors
+              () => cupertino_demos.CupertinoSearchTextFieldDemo()),
+          code: CodeSegments.cupertinoTextFieldDemo,
+        ),
+      ],
+      category: GalleryDemoCategory.cupertino,
+    ),
   ];
 }
 
diff --git a/lib/data/icons.dart b/lib/data/icons.dart
index ddf198f..aee1193 100644
--- a/lib/data/icons.dart
+++ b/lib/data/icons.dart
@@ -170,4 +170,5 @@
   static const IconData navigationRail = Icons.vertical_split;
   static const IconData appbar = Icons.web_asset;
   static const IconData divider = Icons.credit_card;
+  static const IconData search = Icons.search;
 }
diff --git a/lib/demos/cupertino/cupertino_demos.dart b/lib/demos/cupertino/cupertino_demos.dart
index e50feeb..adfe8a6 100644
--- a/lib/demos/cupertino/cupertino_demos.dart
+++ b/lib/demos/cupertino/cupertino_demos.dart
@@ -4,6 +4,7 @@
 export 'package:gallery/demos/cupertino/cupertino_context_menu_demo.dart';
 export 'package:gallery/demos/cupertino/cupertino_navigation_bar_demo.dart';
 export 'package:gallery/demos/cupertino/cupertino_picker_demo.dart';
+export 'package:gallery/demos/cupertino/cupertino_search_text_field_demo.dart';
 export 'package:gallery/demos/cupertino/cupertino_segmented_control_demo.dart';
 export 'package:gallery/demos/cupertino/cupertino_slider_demo.dart';
 export 'package:gallery/demos/cupertino/cupertino_switch_demo.dart';
diff --git a/lib/demos/cupertino/cupertino_search_text_field_demo.dart b/lib/demos/cupertino/cupertino_search_text_field_demo.dart
new file mode 100644
index 0000000..e6a0fdd
--- /dev/null
+++ b/lib/demos/cupertino/cupertino_search_text_field_demo.dart
@@ -0,0 +1,107 @@
+// Copyright 2019 The Flutter team. 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/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/gallery_localizations.dart';
+
+// BEGIN cupertinoSearchTextFieldDemo
+
+class CupertinoSearchTextFieldDemo extends StatefulWidget {
+  const CupertinoSearchTextFieldDemo({super.key});
+
+  @override
+  State<CupertinoSearchTextFieldDemo> createState() =>
+      _CupertinoSearchTextFieldDemoState();
+}
+
+class _CupertinoSearchTextFieldDemoState
+    extends State<CupertinoSearchTextFieldDemo> {
+  final List<String> platforms = [
+    'Android',
+    'iOS',
+    'Windows',
+    'Linux',
+    'MacOS',
+    'Web'
+  ];
+
+  final TextEditingController _queryTextController = TextEditingController();
+  String _searchPlatform = '';
+  List<String> filteredPlatforms = [];
+
+  @override
+  void initState() {
+    super.initState();
+    filteredPlatforms = platforms;
+    _queryTextController.addListener(() {
+      if (_queryTextController.text.isEmpty) {
+        setState(() {
+          _searchPlatform = '';
+          filteredPlatforms = platforms;
+        });
+      } else {
+        setState(() {
+          _searchPlatform = _queryTextController.text;
+        });
+      }
+    });
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final localizations = GalleryLocalizations.of(context)!;
+    return CupertinoPageScaffold(
+      navigationBar: CupertinoNavigationBar(
+        automaticallyImplyLeading: false,
+        middle: Text(localizations.demoCupertinoSearchTextFieldTitle),
+      ),
+      child: SafeArea(
+        child: Column(
+          children: [
+            CupertinoSearchTextField(
+              controller: _queryTextController,
+              restorationId: 'search_text_field',
+              padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 12),
+              decoration: const BoxDecoration(
+                border: Border(
+                  bottom: BorderSide(
+                    width: 0,
+                    color: CupertinoColors.inactiveGray,
+                  ),
+                ),
+              ),
+              placeholder:
+                  localizations.demoCupertinoSearchTextFieldPlaceholder,
+            ),
+            _buildPlatformList(),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _buildPlatformList() {
+    if (_searchPlatform.isNotEmpty) {
+      List<String> tempList = [];
+      for (int i = 0; i < filteredPlatforms.length; i++) {
+        if (filteredPlatforms[i]
+            .toLowerCase()
+            .contains(_searchPlatform.toLowerCase())) {
+          tempList.add(filteredPlatforms[i]);
+        }
+      }
+      filteredPlatforms = tempList;
+    }
+    return ListView.builder(
+      itemCount: filteredPlatforms.length,
+      shrinkWrap: true,
+      itemBuilder: (context, index) {
+        return ListTile(title: Text(filteredPlatforms[index]));
+      },
+    );
+  }
+}
+
+// END
diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb
index 68f8d7c..037d09d 100644
--- a/lib/l10n/intl_en.arb
+++ b/lib/l10n/intl_en.arb
@@ -1407,6 +1407,22 @@
   "@demoCupertinoTextFieldPIN": {
     "description": "The placeholder for a text field where a user would enter their PIN number."
   },
+  "demoCupertinoSearchTextFieldTitle": "Search text field",
+  "@demoCupertinoSearchTextFieldTitle": {
+    "description": "Title for the cupertino search text field demo."
+  },
+  "demoCupertinoSearchTextFieldSubtitle": "iOS-style search text field",
+  "@demoCupertinoSearchTextFieldSubtitle": {
+    "description": "Subtitle for the cupertino search text field demo."
+  },
+  "demoCupertinoSearchTextFieldDescription": "A search text field that lets the user search by entering text, and that can offer and filter suggestions.",
+  "@demoCupertinoSearchTextFieldDescription": {
+    "description": "Description for the cupertino search text field demo."
+  },
+  "demoCupertinoSearchTextFieldPlaceholder": "Enter some text",
+  "@demoCupertinoSearchTextFieldPlaceholder": {
+    "description": "The placeholder for a search text field demo."
+  },
   "demoMotionTitle": "Motion",
   "@demoMotionTitle": {
     "description": "Title for the motion demo."
diff --git a/lib/l10n/intl_en_US.xml b/lib/l10n/intl_en_US.xml
index 1a1b92d..2a8df90 100644
--- a/lib/l10n/intl_en_US.xml
+++ b/lib/l10n/intl_en_US.xml
@@ -1298,6 +1298,22 @@
     description="The placeholder for a text field where a user would enter their PIN number."
     >PIN</string>
   <string
+    name="demoCupertinoSearchTextFieldTitle"
+    description="Title for the cupertino search text field demo."
+    >Search text field</string>
+  <string
+    name="demoCupertinoSearchTextFieldSubtitle"
+    description="Subtitle for the cupertino search text field demo."
+    >iOS-style search text field</string>
+  <string
+    name="demoCupertinoSearchTextFieldDescription"
+    description="Description for the cupertino search text field demo."
+    >A search text field that lets the user search by entering text, and that can offer and filter suggestions.</string>
+  <string
+    name="demoCupertinoSearchTextFieldPlaceholder"
+    description="The placeholder for a search text field demo."
+    >Enter some text</string>
+  <string
     name="demoMotionTitle"
     description="Title for the motion demo."
     >Motion</string>