red_clan_network 1.1.0 copy "red_clan_network: ^1.1.0" to clipboard
red_clan_network: ^1.1.0 copied to clipboard

This is designed to simplify API requests by abstracting common functionalities like GET, POST, PUT, PATCH, and DELETE methods.

example/lib/main.dart

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

// Define your model to represent Todo data
class TodoModel {
  int? userId;
  int? id;
  String? title;
  bool? completed;

  // Constructor
  TodoModel({this.userId, this.id, this.title, this.completed});

  // Method to create a TodoModel from JSON data
  TodoModel.fromJson(Map<String, dynamic> json) {
    userId = json['userId'];
    id = json['id'];
    title = json['title'];
    completed = json['completed'];
  }

  // Method to convert TodoModel to JSON format
  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['userId'] = userId;
    data['id'] = id;
    data['title'] = title;
    data['completed'] = completed;
    return data;
  }
}

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'API Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final ApiService apiService = ApiService();
  List<dynamic> dataList = [];
  String message = 'Press any button above';
  var statusCode = 0;

  @override
  void initState() {
    super.initState();
  }

  // Fetch data from the API
  Future<void> fetchData<T>(T Function(dynamic) modelFromJson) async {
    var response = await apiService.request<T>(
      url: 'https://jsonplaceholder.typicode.com/todos',
      method: 'GET',
      modelFromJson: modelFromJson,
      successStatusCodes: [200, 201],
    );

    setState(() {
      if (response.isSuccess) {
        message = 'Data Fetched Successfully';
        dataList = response.response as List<T>;
        statusCode = response.code;
      } else {
        message = 'Something went wrong with ${response.code}';
        statusCode = response.code;
      }
    });
  }

  // Post data to the API
  Future<void> postData<T>(T Function(dynamic) modelFromJson) async {
    var bodyData = {
      "title": 'foo',
      "body": 'bar',
      "userId": 1,
    };
    var response = await apiService.request<T>(
      url: 'https://jsonplaceholder.typicode.com/posts',
      method: 'POST',
      successStatusCodes: [200, 201],
      headers: {
        'Content-Type': 'application/json',
      },
      body: bodyData,
      modelFromJson: modelFromJson,
    );

    setState(() {
      if (response.isSuccess) {
        message = 'Data Post Success';
        statusCode = response.code;
      } else {
        message = 'Something went wrong with ${response.code}';
        statusCode = response.code;
      }
    });
  }

  // Put data to the API
  Future<void> putData<T>(T Function(dynamic) modelFromJson) async {
    var bodyData = {
      "id": 1,
      "title": 'foo',
      "body": 'bar',
      "userId": 1,
    };
    var response = await apiService.request<T>(
      url: 'https://jsonplaceholder.typicode.com/posts/1',
      method: 'PUT',
      successStatusCodes: [200, 201],
      headers: {'Authorization': ' ', 'Content-Type': 'application/json'},
      body: bodyData,
      modelFromJson: modelFromJson,
    );

    setState(() {
      dataList = [];
      if (response.isSuccess) {
        message = 'Data Put Success';
        statusCode = response.code;
      } else {
        message = 'Something went wrong with ${response.code}';
        statusCode = response.code;
      }
    });
  }

  // Delete data from the API
  Future<void> deleteData<T>(T Function(dynamic) modelFromJson) async {
    var response = await apiService.request<T>(
      url: 'https://dummy.restapiexample.com/api/v1/delete/3',
      method: 'DELETE',
      successStatusCodes: [200, 201],
      headers: {'Content-Type': 'application/json', 'Authorization': ""},
      modelFromJson: modelFromJson,
    );

    setState(() {
      dataList = [];
      if (response.isSuccess) {
        message = 'Delete Success';
        statusCode = response.code;
      } else {
        message = 'Something went wrong with ${response.code}';
        statusCode = response.code;
      }
    });
  }

  // Patch data to the API
  Future<void> patchData<T>(T Function(dynamic) modelFromJson) async {
    var bodyData = {
      "title": 'foo',
    };
    var response = await apiService.request<T>(
      url: 'https://jsonplaceholder.typicode.com/posts/1',
      method: 'PATCH',
      successStatusCodes: [200, 201],
      headers: {'Authorization': ' ', 'Content-Type': 'application/json'},
      body: bodyData,
      modelFromJson: modelFromJson,
    );

    setState(() {
      dataList = [];
      if (response.isSuccess) {
        statusCode = response.code;

        message = 'Patch Success';
      } else {
        statusCode = response.code;

        message = 'Something went wrong with ${response.code}';
      }
    });
  }

  // Post data with a file to the API
  Future<void> postDataWithFile() async {
    var request = http.MultipartRequest(
      'POST',
      Uri.parse('https://your_file_upload_api_link'),
    );

    request.headers.addAll({
      'Content-Type': 'multipart/form-data',
      'Authorization': 'Bearer your_token_here',
    });

    request.fields['description'] = 'File upload example';

    var file = await http.MultipartFile.fromPath('file', 'path_to_your_file');
    request.files.add(file);

    var response = await request.send();
    final responseBody = await response.stream.bytesToString();

    setState(() {
      if (response.statusCode == 200 || response.statusCode == 201) {
        message = 'File Upload Success';
        statusCode = response.statusCode;
      } else {
        statusCode = response.statusCode;

        message = 'Something went wrong with ${response.statusCode}';
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('API Example'),
      ),
      body: SingleChildScrollView(
        child: Column(
          children: [
            ElevatedButton(
              onPressed: () async {
                await postData((json) => TodoModel.fromJson(json));
              },
              child: Text("Post Data"),
            ),
            ElevatedButton(
              onPressed: () async {
                await deleteData((json) => TodoModel.fromJson(json));
              },
              child: Text("Delete"),
            ),
            ElevatedButton(
              onPressed: () async {
                await putData((json) => TodoModel.fromJson(json));
              },
              child: Text("Put Data"),
            ),
            ElevatedButton(
              onPressed: () async {
                await patchData((json) => TodoModel.fromJson(json));
              },
              child: Text("Patch Data"),
            ),
            ElevatedButton(
              onPressed: () async {
                await fetchData((json) => TodoModel.fromJson(json));
              },
              child: Text("Fetch Data"),
            ),
            ElevatedButton(
              onPressed: () async {
                await postDataWithFile();
              },
              child: Text("Post Data with File"),
            ),
            Divider(),
            Text("${message}\nstatus code: ${statusCode}"),
            Divider(),
            ListView.builder(
              shrinkWrap: true,
              physics: NeverScrollableScrollPhysics(),
              itemCount: dataList.length,
              itemBuilder: (context, index) {
                var item = dataList[index] as TodoModel;
                return ListTile(
                  title: Text(item.title ?? ""),
                  subtitle: item.completed != null && item.completed!
                      ? Text("Completed")
                      : Text("Pending"),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}
3
likes
160
points
56
downloads

Publisher

unverified uploader

Weekly Downloads

This is designed to simplify API requests by abstracting common functionalities like GET, POST, PUT, PATCH, and DELETE methods.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, http

More

Packages that depend on red_clan_network