Lograr la interfaz de búsqueda trémolo, SearchDelegate uso aleteo en la barra de búsqueda para lograr

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 Stringtipo se refiere a la búsqueda querytipo 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 el showSuggestions(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;



 
búsquedas sugeridas
 

 
visualización de resultados de búsqueda

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

Copiar el código
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 (), 
    ); 
  } 

}
Copiar el código
Copiar el código
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)) 
                  ])), 
            )); 
  } 
}
Copiar el código
Copiar el código
SearchList = const [ 
  "capa", 
  "Huawei", 
  "TV", 
  "noticias" 
]; 

const recentSuggest = [ 
  "Recommended -1", 
  "recomienda 2" 
];
Copiar el código

efecto:

 

Aprender juntos, crecer juntos!

 

Copiar el código
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 (), 
    ); 
  } 

}
Copiar el código
Copiar el código
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)) 
                  ])), 
            )); 
  } 
}
Copiar el código
Copiar el código
SearchList = const [ 
  "capa", 
  "Huawei", 
  "TV", 
  "noticias" 
]; 

const recentSuggest = [ 
  "Recommended -1", 
  "recomienda 2" 
];
Copiar el código

efecto:

 

Supongo que te gusta

Origin www.cnblogs.com/sundaysme/p/12580542.html
Recomendado
Clasificación