API Calling with Dio Example with Model Class

 import "package:firebase/self_practice/display_product.dart";

import "package:firebase/self_practice/productModel.dart";
import "package:flutter/material.dart";
import "package:get/get.dart";
import "package:dio/dio.dart";

void main()
{
runApp(MyApp());
}
class MyApp extends StatelessWidget
{
MyApp({super.key});

@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: "API Calling with DIO",
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.grey,
),
home: ApiCall(),
);
}
}
class ApiCall extends StatelessWidget
{
ApiCall({super.key});

Future<List<Product>> apiCalling() async {
var response = await Dio().get("https://fakestoreapi.com/products");

final List<dynamic> responseData = response.data;
List<Product> products = responseData.map((json) {
return Product.fromJson(json);
}).toList();

return products;
// print(response.data.toString());
// return response.data;
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("API Calling with DIO"),
centerTitle: true,
backgroundColor: Colors.grey,
),
body: FutureBuilder<List<Product>>(
future: apiCalling(),
builder: (BuildContext context, AsyncSnapshot<List<Product>> snapshot) {
if(snapshot.hasData)
{
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (BuildContext context, int index) {
return GestureDetector(
onTap: () {
Get.to(() {
return DisplayProduct(
product: snapshot.data![index],
);
},);
},
child: Card(
child: ListTile(
title: Text("${snapshot.data![index].title}"),
subtitle: Text("${snapshot.data![index].price}"),
),
),
);
},
);
}
else
{
return const Center(child: CircularProgressIndicator());
}
},
),
);
}
}
import "package:firebase/self_practice/productModel.dart";
import "package:flutter/material.dart";

class DisplayProduct extends StatelessWidget
{
final Product product;

DisplayProduct({
required this.product,
});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Display Product"),
),
body: Center(
child: SingleChildScrollView(
child: Container(
width: 350.0,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(product.title.toString()),
const SizedBox(height: 20.0),
Text(product.price.toString()),
const SizedBox(height: 20.0),
Text(product.description.toString()),
const SizedBox(height: 20.0),
Text(product.rating.rate.toString()),
const SizedBox(height: 20.0),
Text(product.rating.count.toString()),
],
),
),
),
),
);
}

}
/// Creating a Model Class as shown below

class Product
{
int id;
String title;
double price;
String description;
String category;
String image;
ProductRating rating;

Product({
required this.id,
required this.title,
required this.price,
required this.description,
required this.category,
required this.rating,
required this.image,
});

factory Product.fromJson(Map<String, dynamic> json) {
return Product(
id: json["id"],
title: json["title"],
price: json["price"].toDouble(),
description: json["description"],
category: json["category"],
rating: ProductRating.fromJson(json["rating"]),
image: json["image"],
);
}

}
class ProductRating
{
double rate;
int count;

ProductRating({required this.rate, required this.count});

factory ProductRating.fromJson(Map<String, dynamic> json) {
return ProductRating(
rate: json["rate"].toDouble(),
count: json["count"],
);
}
}

Comments

Popular posts from this blog

Second GET API Calling with Bloc simple Example in Flutter

Stack Container Scrollable Card widget UI with Custom Widget

Pagination with Bloc Pattern in Flutter