import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class Category{
int id;
String name;
Category({
required this.id,
required this.name
});
factory Category.fromJson(Map<String, dynamic> json) {
return Category(id: json['id'], name:json['name']);
}
}
class Categories extends StatefulWidget {
const Categories({super.key});
@override
CategoriesState createState() => CategoriesState();
}
class CategoriesState extends State<Categories> {
late Future<List<Category>> futureCategories;
Future<List<Category>> fetchCategories() async {
http.Response response = await http.get(
Uri.parse('http://flutter-api.test/api/categories')
);
List categories = jsonDecode(response.body);
return categories.map((category) => Category.fromJson(category)).toList();
}
@override
void initState() {
super.initState();
futureCategories = fetchCategories();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Categories'),
),
body: FutureBuilder<List<Category>>(
future: futureCategories,
builder: (context, snapshot) {
if(snapshot.hasData){
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
Category category = snapshot.data![index];
return ListTile(
title: Text(category.name)
);
},
);
}else if(snapshot.hasError){
return const Text('Something went wrong');
}
return const CircularProgressIndicator();
}
)
);
}
}
This flutter app requests the laravel api to provide a list of categories from
http://flutter-api.test/api/categories
I ran my flutter app in my local environment and it worked well using the chrome browser(List of categories appeared)
However, it didn't work when i ran it through the android emulator. It gives the below error
Exception has occurred. _ClientSocketException (Failed host lookup: 'flutter-api.test')
I have already entered
<uses-permission android:name="android.permission.INTERNET" />
in AndroidManifest.xml file