| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:flutter/material.dart'; |
| |
| /// Flutter code sample for [SearchBar]. |
| |
| void main() => runApp(const SearchBarApp()); |
| |
| class SearchBarApp extends StatefulWidget { |
| const SearchBarApp({super.key}); |
| |
| @override |
| State<SearchBarApp> createState() => _SearchBarAppState(); |
| } |
| |
| class _SearchBarAppState extends State<SearchBarApp> { |
| bool isDark = false; |
| |
| @override |
| Widget build(BuildContext context) { |
| final ThemeData themeData = ThemeData(useMaterial3: true, brightness: isDark ? Brightness.dark : Brightness.light); |
| |
| return MaterialApp( |
| theme: themeData, |
| home: Scaffold( |
| appBar: AppBar(title: const Text('Search Bar Sample')), |
| body: Padding( |
| padding: const EdgeInsets.all(8.0), |
| child: SearchAnchor( |
| builder: (BuildContext context, SearchController controller) { |
| return SearchBar( |
| controller: controller, |
| padding: const MaterialStatePropertyAll<EdgeInsets>(EdgeInsets.symmetric(horizontal: 16.0)), |
| onTap: () { controller.openView(); }, |
| onChanged: (_) { controller.openView(); }, |
| leading: const Icon(Icons.search), |
| trailing: <Widget>[ |
| Tooltip( |
| message: 'Change brightness mode', |
| child: IconButton( |
| isSelected: isDark, |
| onPressed: () { |
| setState(() { |
| isDark = !isDark; |
| }); |
| }, |
| icon: const Icon(Icons.wb_sunny_outlined), |
| selectedIcon: const Icon(Icons.brightness_2_outlined), |
| ), |
| ) |
| ], |
| ); |
| }, |
| suggestionsBuilder: (BuildContext context, SearchController controller) { |
| return List<ListTile>.generate(5, (int index) { |
| final String item = 'item $index'; |
| return ListTile( |
| title: Text(item), |
| onTap: () { |
| setState(() { |
| controller.closeView(item); |
| }); |
| }, |
| ); |
| }); |
| }), |
| ), |
| ), |
| ); |
| } |
| } |