提供程序在子级中起作用,但在SearchDelegate中不起作用

时间:2020-05-09 20:35:28

标签: flutter search flutter-provider

这是错误:

Error: Could not find the correct Provider<List<ListTile>> above this Widget

我有一个显示FutureProvider中项目的应用程序。我使用提供程序两次,最后一次使用ListView在同一页面中生成ListaProductos(),另一次在AppBar上在{上生成相同的ListView {1}}。

这是主页

SearchDelegate

这是@override Widget build(BuildContext context) { if (user != null) { return FutureProvider<List<ListTile>>.value( value: ServicioBaseDatos(usuarioUID: user.uid).listaProductos, child: new Scaffold( appBar: AppBar( title: Text( "Stock", ), actions: <Widget>[ IconButton( icon: Icon(Icons.search), onPressed: () { var listaProductos = Provider.of<List<ListTile>>(context); showSearch( context: context, delegate: SearchProducto(listaProductos), ); }, ), ], ), floatingActionButton: FloatingActionButton( onPressed: () => Navigator.of(context).push(new MaterialPageRoute( builder: (BuildContext context) => new CrearProductoPage())), child: Icon( Icons.add, ), ), drawer: MenuComponent(user.email == null ? '' : user.email), body: Container( decoration: BoxDecoration( gradient: LinearGradient( colors: [Color(0xFFAE885E), Color(0xFF557A95)])), child: ListaProductos()), ), ); } else { return Text('Esperando identificador de usuario de la base de datos'); } } 小部件(工作正常):

ListaProductos()

这是class ListaProductos extends StatefulWidget { @override _ListaProductosState createState() => _ListaProductosState(); } class _ListaProductosState extends State<ListaProductos> { @override Widget build(BuildContext context) { final productos = Provider.of<List<ListTile>>(context); if (productos != null){ return ListView.builder( itemCount: productos.length, itemBuilder: (context, index) { return productos[index]; }, ); } else {return Text('Esperando respuesta de base de datos');} } } 的实现(当我单击打开此页面的搜索图标时出现错误):

SearchDelegate

我在Boring show的中间,但他们不使用提供者。有想法吗?感谢您的帮助!

编辑:这是class SearchProducto extends SearchDelegate<ListTile> { final List<ListTile> listaProductos; SearchProducto(this.listaProductos); @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 Container(); } @override Widget buildSuggestions(BuildContext context) { if (listaProductos != null){ return ListView.builder( itemCount: listaProductos.length, itemBuilder: (context, index) { return listaProductos[index]; }, ); } else {return Text('Esperando respuesta de BD');} } } 中的value:

FutureProvider

1 个答案:

答案 0 :(得分:0)

intentaste obtener lainformationacióndentro del Search en vez de pasarlo吗?

class SearchProducto extends SearchDelegate<ListTile> {


  @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 Container();
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    final listaProductos = Provider.of<List<ListTile>>(context);
    if (listaProductos != null){
      return ListView.builder(
        itemCount: listaProductos.length,
        itemBuilder: (context, index) {
          return  listaProductos[index];
        },
      );
    }
    else {return Text('Esperando respuesta de BD');}
  }
}