这是错误:
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
答案 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');}
}
}