0
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

zaster
  • 161
  • 1
  • 4
  • 14

0 Answers0