dio_api_manager

dio_api_manager manage your API calls from a single place.

Features

  • Set your API base url only once in application.
  • Supported HTTP method- Get, Post.
  • Multipart API call supported.
  • Download image from it's url and it returns you downloaded path.
  • Print API call log information like url, parameters, headers, file parameters.
  • You can also disable logs printing.
  • Easy to use with MVC structure & controller class.
  • Checks internet connection with every API call.
  • Handle server down or api not working errors with easy JSON response.

Additional information

  • Your API response must be in JSON format

Getting started

Add dependency to your pubspec.yaml file & run Pub get

dependencies:
  dio_api_manager: 0.0.1

And import package into your class file

import 'package:dio_api_manager/dio_api_manager.dart';

Usage


void main() { ...

  DioApiManager.initApiManager(

        //bearer auth header with token format
        //authorization: {"Authorization" : 'Bearer $bearerToken'},
        
        //basic auth header with username & password
        authorization: {"Authorization" : 'Basic ' + base64.encode(utf8.encode("yourUsername:yourPassword"))},
        
        baseURL: "https://demo.com/api/v1/",
        printDebugLogs: true
  );
...

  //make a function for api call
  
  Future funcGetAllStudent() async {

  return await DioApiManager.callWebservice(
                  varMethodType: enumMethodType.POST,
                  strSuffixPath: "getAllStudent",
                  dictParameters: {"class":"1"},
         );
  }
  
  or you can use it like

  funcGetAllStudent() {

        DioApiManager.callWebservice(
                            varMethodType: enumMethodType.POST,
                            strSuffixPath: "getAllStudent",
                            dictParameters: {"class":"1"},
                    ).then((jsonResponse){
        
                    print(jsonResponse);
        
        });
  }
  
  //download image like 
  String downloadedPath = await DioApiManager.funcDownLoadFile(imageURL: "your image url in string");
  
  //example of using internet or server error or API not working errors with future builder

  FutureBuilder<dynamic>(
      future: studentController.funcGetAllStudent(),
      builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot){
    
      switch (snapshot.connectionState) {
    
      case ConnectionState.waiting:
            return Utility.funcLoaderFuture();
    
      default: {
    
      if (snapshot.hasError) {
            return Utility.funcFutureBuilderError(isInternetCheck: true, onTryAgain: () {
                        setState(() {});
                   });
      }
      else {
    
      print(snapshot.data);
    
      if(snapshot.data['error'] == true) {
              return Utility.funcFutureBuilderError(isInternetCheck: false,onTryAgain: (){
                       setState(() {});
                      });
      }
    
      else{
    
      //-----------------------------------------------------------
      //to fina model class error from logs write it without try catch block
      //studentController.modelStudent = ModelStudent.fromJson(snapshot.data['jsonResponse']);
    
      //-----------------------------------------------------------
      //best practice to prevent live apps from getting error is to write within try catch
      //so flutter red page error do not directly show to our app users
    
      try {
          studentController.modelStudent = ModelStudent.fromJson(snapshot.data['jsonResponse']);
      } catch (_) {
    
              // handling json to model conversion error in case of data type conversion
              // or null type error
              // or your json format is wrong with model class
              return Utility.funcFutureBuilderError(isInternetCheck: false,onTryAgain: (){
                        setState(() {});
                    });
      }
      return ListView.builder(
                  itemCount: studentController.modelStudent.studentData!.length,
                  itemBuilder: (context, index) {
                  return Padding(
                              padding: const EdgeInsets.fromLTRB(15, 10, 15, 10),
                              child: Text(studentController.modelStudent.studentData![index].studentName!),
                      );
                  },
              );
      }
    
      }
     }
    }
   },
  ),

Libraries

dio_api_manager