Skip to main content

http pro flutter

 model

// models/post.dart


class Post {

  final int id;

  final String title;

  final String body;


  Post({required this.id, required this.title, required this.body});


  factory Post.fromJson(Map<String, dynamic> json) {

    return Post(

      id: json['id'],

      title: json['title'],

      body: json['body'],

    );

  }

}



provider

// providers/post_provider.dart

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';

import '../models/post.dart';

class PostProvider extends ChangeNotifier {
  List<Post> _posts = [];

  List<Post> get posts => _posts;

  Future<void> fetchPosts() async {
    final url = Uri.parse('https://jsonplaceholder.typicode.com/posts');
    final response = await http.get(url);

    if (response.statusCode == 200) {
      Iterable jsonResponse = json.decode(response.body);
      _posts = jsonResponse.map((model) => Post.fromJson(model)).toList();
      notifyListeners();
    } else {
      throw Exception('Failed to load posts');
    }
  }
}




widget

// screens/post_screen.dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../providers/post_provider.dart';
import '../models/post.dart';

class PostScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Posts'),
      ),
      body: Center(
        child: Consumer<PostProvider>(
          builder: (context, postProvider, _) {
            if (postProvider.posts.isEmpty) {
              return CircularProgressIndicator(); // or any loading indicator
            } else {
              return ListView.builder(
                itemCount: postProvider.posts.length,
                itemBuilder: (context, index) {
                  Post post = postProvider.posts[index];
                  return ListTile(
                    title: Text(post.title),
                    subtitle: Text(post.body),
                  );
                },
              );
            }
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // Call the fetchPosts method when FloatingActionButton is pressed
          Provider.of<PostProvider>(context, listen: false).fetchPosts();
        },
        child: Icon(Icons.refresh),
      ),
    );
  }
}


main

// main.dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'providers/post_provider.dart';
import 'screens/post_screen.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => PostProvider(),
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: PostScreen(),
      ),
    );
  }
}

Comments

Popular posts from this blog

Flutter pagination tutorial

option 1 import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:http/http.dart' as http; // API Service class ApiService {   static const String baseUrl = "https://jsonplaceholder.typicode.com";   static Future<List<dynamic>> fetchData(int page, int limit) async {     final response = await http.get(Uri.parse("$baseUrl/posts?_page=$page&_limit=$limit"));     if (response.statusCode == 200) {       return json.decode(response.body);     } else {       throw Exception("Failed to load data");     }   } } // GetX Controller for Pagination class PaginationController extends GetxController {   var items = <dynamic>[].obs;   var page = 1.obs;   final int limit = 10;   var isLoading = false.obs;   var hasMore = true.obs;   ScrollController scrollController = ScrollController();   @override   void...

send data controller to provider

 send data controller to provider import 'package:flutter/material.dart'; import 'model.dart'; class TaskProvider extends ChangeNotifier {   List<Task> _tasks = [];   List<Task> get tasks => _tasks;   // Create operation   void addTask(Task task) {     _tasks.add(task);     notifyListeners();   }   // Read operation (already accessible via getter tasks)   // Update operation   void updateTask(Task task) {     // Find the task in the list and update it     int index = _tasks.indexWhere((t) => t.id == task.id);     if (index != -1) {       _tasks[index] = task;       notifyListeners();     }   }   // Delete operation   void deleteTask(String id) {     _tasks.removeWhere((task) => task.id == id);     notifyListeners();   } } class Task {   String id;   String title;   bool completed...

Building a Dynamic Product List with GetX in Flutter

Building a Dynamic Product List with GetX in Flutter Learn how to create a responsive product screen using GetX in Flutter. This tutorial covers API integration, pagination, cart management, and quantity selection with efficient state management. Perfect for building an e-commerce app! class ProductScreenController extends GetxController{      RxList<Product> productList = <Product>[].obs;   RxList<Product> cartList = <Product>[].obs;   RxMap<int , int> quantityMap = <int , int>{}.obs;   RxMap<int, bool> showQuantitySelector = <int, bool>{}.obs; // ✅ Track Visibility of Quantity Selector   RxBool isLoading = false.obs;   RxBool isLoadingMore = false.obs;   final Dio dio = Dio();   int limit = 10;   int skip = 0;   bool hasMore = true; // ✅ Track if more data is available   @override   void onInit() {  // ✅ Automatically Call API when Controller initializes   ...