https://www.jianshu.com/p/63aca25a463c
https://www.cnblogs.com/loaderman/p/11350306.html
Uso dan cuenta del alboroto interfaz de búsqueda, de SearchDelegate
1. Uso de la interfaz de búsqueda del sistema
En el estudio previo en sus propias implementa una interfaz de búsqueda, que se personaliza la barra de búsqueda, se va a lograr resultados, más tarde se encontró a tener un control existente está disponible en trémolo, que es SearchDelegate<T>
, las llamadas showSearch(context: context, delegate: searchBarDelegate())
a lograr.
2. DefinicionesSearchDelegate
class searchBarDelegate extends SearchDelegate<String> { @override List<Widget> buildActions(BuildContext context) { return null; } @override Widget buildLeading(BuildContext context) { return null; } @override Widget buildResults(BuildContext context) { return null; } @override Widget buildSuggestions(BuildContext context) { return null; } @override ThemeData appBarTheme(BuildContext context) { // TODO: implement appBarTheme return super.appBarTheme(context); } }
Heredada SearchDelegate<String>
necesidad de reescribir alguna manera después, aquí se da String
tipo se refiere a la búsqueda query
tipo es String
.
List<Widget> buildActions(BuildContext context)
Este método devuelve una lista de controles, muestra un icono para el botón a la derecha del cuadro de búsqueda, establecer aquí como un botón de limpieza, y muestra sugerencias de búsqueda en el contenido de búsqueda está vacío, utilizando elshowSuggestions(context)
método:
@override
List<Widget> buildActions(BuildContext context) { return [ IconButton( icon: Icon(Icons.clear), onPressed: () { query = ""; showSuggestions(context); }, ), ]; }
-
showSuggestions(context)
: Este método muestra el contenido de las sugerencias de búsqueda, que estáWidget buildSuggestions(BuildContext context)
llamando al método; -
Widget buildLeading(BuildContext context)
Este método devuelve un botón de control se muestra como el buscador de la izquierda, se fija en general, a cambio, esto devuelve un botón de retorno que tiene un efecto dinámico:
@override
Widget buildLeading(BuildContext context) { return IconButton( icon: AnimatedIcon( icon: AnimatedIcons.menu_arrow, progress: transitionAnimation), onPressed: () { if (query.isEmpty) { close(context, null); } else { query = ""; showSuggestions(context); } }, ); }
Widget buildSuggestions(BuildContext context)
Este método devuelve un control que demuestra que el contenido propuesto para la búsqueda del área de contenido.Widget buildSuggestions(BuildContext context)
Este método devuelve un control para mostrar el contenido de la zona de búsqueda para el contenido de resultados de búsqueda.ThemeData appBarTheme(BuildContext context)
Este método devuelve un tema, que es el tema de las definiciones de estilo se puede personalizar la interfaz de búsqueda:
/// * [AppBar.backgroundColor], which is set to [ThemeData.primaryColor].
/// * [AppBar.iconTheme], which is set to [ThemeData.primaryIconTheme].
/// * [AppBar.textTheme], which is set to [ThemeData.primaryTextTheme].
/// * [AppBar.brightness], which is set to [ThemeData.primaryColorBrightness].
ThemeData appBarTheme(BuildContext context) { assert(context != null); final ThemeData theme = Theme.of(context); assert(theme != null); return theme.copyWith( primaryColor: Colors.white, primaryIconTheme: theme.primaryIconTheme.copyWith(color: Colors.grey), primaryColorBrightness: Brightness.light, primaryTextTheme: theme.textTheme, ); }
Se puede ver el tema por defecto de negro palabra de color gris claro, que pueden modificar su propia;
3. Llame showsearch (contexto: contexto, delegado: searchBarDelegate ()) Método para saltar a la interfaz de búsqueda
showSearch(context: context, delegate: searchBarDelegate())
: Salta a la interfaz de búsqueda.
Autor: Me encanta amor blanco blanco de par en par
enlace: https: //www.jianshu.com/p/63aca25a463c
Fuente: libros de Jane
tienen derechos de autor por el autor. reimpresión comercial póngase en contacto con el autor autorizada, reimpresión no comercial por favor indique la fuente.
aleteo en la barra de búsqueda para lograr
importación 'paquete: aleteo / material.dart'; importación 'paquete: flutter_app / SearchBarDemo.dart'; void main () => EjecutarAplicación (MiApl ()); clase MiApl extiende StatelessWidget { @ Override widget de acumulación (contexto BuildContext) { volver MaterialApp ( título: 'aleteo Demo', tema: ThemeData ( primarySwatch: Colors.green, //定义主题风格primarySwatch ), el hogar: SearchBarDemo (), ); } }
importación 'paquete: aleteo / material.dart'; importación 'asset.dart'; clase SearchBarDemo extiende StatefulWidget { _SearchBarDemoState createState () => _SearchBarDemoState (); } Clase _SearchBarDemoState extiende Estado <SearchBarDemo> { @ Override widget de acumulación (contexto BuildContext) { volver Andamios ( AppBar: AppBar (Título: Texto ( 'SearchBarDemo'), acciones: <Widget> [ IconButton ( Icono: (Icons.search) , onPressed: () { showsearch (contexto: contexto, delegado: searchBarDelegate ()); } // showsearch (contexto: contexto, delegado: searchBarDelegate ()), ), ])); @ Override Widget buildResults (contexto BuildContext) { devuelva el envase ( } SearchBarDelegate clase extiende SearchDelegate <String> { @ Override List <Widget> buildActions (contexto BuildContext) { retorno [ IconButton ( Icono: (Icons.clear), onPressed: () => query = "", ) ]; } @ Override Widget buildLeading (contexto BuildContext) { volver IconButton ( icono: AnimatedIcon ( icono: AnimatedIcons.menu_arrow, el progreso: transitionAnimation), onPressed: () => cerrar (contexto, null)); } Anchura: 100,0, altura: 100,0, niño: Tarjeta ( Color: Colors.redAccent, niño: Centro ( niño: Texto (consulta), ), ), ); } @ Override Widget buildSuggestions (contexto BuildContext) { suggestionList final = query.isEmpty ? recentSuggest : searchList.where ((entrada) => input.startsWith (consulta)) toList ();. ListView.builder retorno ( objetoCuenta: suggestionList.length, itemBuilder: (contexto, el índice) => ListTile ( título: texto enriquecido ( texto: TextSpan ( texto: suggestionList [índice] .substring (0, query.length), estilo: TextStyle ( Color: Colors.black, fontWeight: FontWeight.bold), los niños: [ TextSpan ( texto: suggestionList [índice] .substring (query.length), estilo: TextStyle (color: Colors.grey)) ])), )); } }
SearchList = const [ "capa", "Huawei", "TV", "noticias" ]; const recentSuggest = [ "Recommended -1", "recomienda 2" ];
efecto:
importación 'paquete: aleteo / material.dart'; importación 'paquete: flutter_app / SearchBarDemo.dart'; void main () => EjecutarAplicación (MiApl ()); clase MiApl extiende StatelessWidget { @ Override widget de acumulación (contexto BuildContext) { volver MaterialApp ( título: 'aleteo Demo', tema: ThemeData ( primarySwatch: Colors.green, //定义主题风格primarySwatch ), el hogar: SearchBarDemo (), ); } }
importación 'paquete: aleteo / material.dart'; importación 'asset.dart'; clase SearchBarDemo extiende StatefulWidget { _SearchBarDemoState createState () => _SearchBarDemoState (); } Clase _SearchBarDemoState extiende Estado <SearchBarDemo> { @ Override widget de acumulación (contexto BuildContext) { volver Andamios ( AppBar: AppBar (Título: Texto ( 'SearchBarDemo'), acciones: <Widget> [ IconButton ( Icono: (Icons.search) , onPressed: () { showsearch (contexto: contexto, delegado: searchBarDelegate ()); } // showsearch (contexto: contexto, delegado: searchBarDelegate ()), ), ])); } SearchBarDelegate clase extiende SearchDelegate <String> { @ Override List <Widget> buildActions (contexto BuildContext) { retorno [ IconButton ( Icono: (Icons.clear), onPressed: () => query = "", ) ]; } @ Override Widget buildLeading (contexto BuildContext) { volver IconButton ( icono: AnimatedIcon ( icono: AnimatedIcons.menu_arrow, el progreso: transitionAnimation), onPressed: () => cerrar (contexto, null)); } @ Override Widget buildResults (contexto BuildContext) { devuelva el envase ( Anchura: 100,0, altura: 100,0, niño: Tarjeta ( Color: Colors.redAccent, niño: Centro ( niño: Texto (consulta), ), ), ); } @ Override Widget buildSuggestions (contexto BuildContext) { suggestionList final = query.isEmpty ? recentSuggest : searchList.where ((entrada) => input.startsWith (consulta)) toList ();. retorno ListView.builder ( objetoCuenta: suggestionList.length, itemBuilder: (contexto, index) => ListTile ( título: RichText ( texto: TextSpan ( texto: suggestionList [índice] .substring (0, query.length), estilo: TextStyle ( Color: Colors.black, fontWeight: FontWeight.bold), los niños: [ TextSpan ( texto: suggestionList [índice] .substring (query.length), estilo: TextStyle (color: Colors.grey)) ])), )); } }
SearchList = const [ "capa", "Huawei", "TV", "noticias" ]; const recentSuggest = [ "Recommended -1", "recomienda 2" ];
efecto: