Help The return type 'Future' isn't a 'Widget',
Future deleteProduct(String productId) async {
String url = 'http://127.0.0.1:8000/api/products' productId;
var response = await http.delete(Uri.parse(url));
return json.decode(response.body);
}
Code structure
GestureDetector(
onTap: () {
final snackBar = SnackBar(
content: const Text('Data berhasil Dihapus'));
Navigator.push( context,
MaterialPageRoute(
builder: (context) =>deleteProduct((snapshot.dataas dynamic)['data'][index]['id'].toString()).then((value) {setState(() {});
ScaffoldMessenger.of(context) .showSnackBar( snackBar);
})));
Need Help Thanks.
Error "The return type 'Future<Null>' isn't a 'Widget', as required by the closure's context."
CodePudding user response:
Change your Future
function to include return type
of Map<String, dynamic>
Future<Map<String,dynamic> deleteProduct(String productId) async {
String url = 'http://127.0.0.1:8000/api/products' productId;
var response = await http.delete(Uri.parse(url));
return json.decode(response.body);
}
And use FutureBuilder
in the builder
like:
GestureDetector(
onTap: () async {
Navigator.push( context,
MaterialPageRoute(
builder: (context) => FutureBuilder(
future: deleteProduct((snapshot.dataas dynamic)['data'][index]['id'].toString()),
builder: (ctx, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(
child: Text('${snapshot.error} occurred',
),
);
}
} else if (snapshot.hasData) {
final data = snapshot.data as String;
return Center(
child: Text('$data'),
);
}
return CircularProgressIndicator();
}
)));
});
CodePudding user response:
You have to use your future Function in onTap and then use showSnackbar.
Example.
GestureDetector(
onTap: () async {
await deleteProduct((snapshot.dataas dynamic)['data'][index]['id'].toString()).then((){
final snackBar = SnackBar(
content: const Text('Data berhasil Dihapus'));
Navigator.push( context,
MaterialPageRoute(
builder: (context) =>deleteProduct((snapshot.dataas dynamic)['data'][index]['id'].toString()).then((value) {setState(() {});
ScaffoldMessenger.of(context) .showSnackBar( snackBar);
})));
});