import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { final _searchDelegate = MySearchDelegate(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('My App'), actions: [ IconButton( icon: Icon(Icons.search), onPressed: () { showSearch(context: context, delegate: _searchDelegate); }, ), ], ), body: Center( child: Text('Home Page'), ), ); } } class MySearchDelegate extends SearchDelegate { @override List<Widget> buildActions(BuildContext context) { return [ IconButton( icon: Icon(Icons.clear), onPressed: () { query = ''; }, ), ]; } @override Widget buildLeading(BuildContext context) { return IconButton( icon: Icon(Icons.arrow_back), onPressed: () { close(context, null); }, ); } @override Widget buildResults(BuildContext context) { return Center( child: Text(query), ); } @override Widget buildSuggestions(BuildContext context) { final suggestions = query.isEmpty ? ['apple', 'banana', 'orange'] : ['apple', 'banana', 'orange'] .where((s) => s.startsWith(query)) .toList(); return ListView.builder( itemCount: suggestions.length, itemBuilder: (context, index) { return ListTile( title: Text(suggestions[index]), ); }, ); } }
Flutter SearchDelegate 的使用案例
22 min read