network_manager

A Network Manager package based on dio for easy REST API management

Getting Started

A Network Manager package based on dio for easy REST API management there is just some functionality written for using post and get api easily

Usage1

it's suggested that initialize network manager at some entry point in app you can set BaseUrl, TimeOut, and some pre-written function that will be called on every request : onStartDefault, onEndDefault, onSuccessDefault, onFailedDefault.

    initializeNetworkManager({String token, @required String baseURL}) {
      NetworkOption.initialize(
          baseUrl: baseURL,
          timeout: 30000,
          token: token,
          headers: {
            'Content-Type': 'application/json',
            "Authorization": "Bearer $token",
          },
          onStartDefault: () {
            print("Start");
          },
          onEndDefault: () {
            print("End");
          },
          onSuccessDefault: (res) {
            print("Success");
          },
          onFailedDefault: (NetworkResponse res) {
            print("Failed");
          },
          errorMsgExtractor: (res) {
            return res["Message"] ?? "Unknown Error";
          },
          successMsgExtractor: (res) {
            return res["Message"] ?? "Done";
          });
    }

every Network Request returns a Future which handles variant situations with following properties:

class NetworkResponse {
  final bool responseStatus;
  final int responseCode;
  final String responseTitle;
  Function retryFunction;
  dynamic responseBody;
  dynamic responseDetails;
  String extractedMessage;

  NetworkResponse(
      {this.responseStatus,
        this.responseCode,
        this.responseTitle,
        this.responseBody,
        this.retryFunction,
        this.responseDetails,
        this.extractedMessage});

  @override
  String toString() {
    return "$responseCode $responseTitle : $extractedMessage";
  }
}

and responseBody is JsonDecode of base dio response.data

Example

every where you want to make a request you can do as follows:

final Map<String,dynamic> req ={
      "Username": "test",
      "Password": "test",
    };

    NetworkManager networkManager = NetworkManager.instance(
      context: context,
      onSuccess: (context,response)=>print("OnSuccessCalled"),
      req: req,
      api: Apis.login
    );
    networkManager.requestPost();

Usage2

it's suggested that initialize network manager at some entry point in app you can set BaseUrl, TimeOut, and some pre-written function that will be called on every request : onStartDefault, onEndDefault, onSuccessDefault, onFailedDefault.

      initializeNetworkManager() {
        /// initialize network manager
        NetworkManagerMetaData.initialize(
            baseUrl: "http://example.com",
            timeout: 30000,
            token: token,
            headers: {
              'Content-Type': "application/json",
            },
            onStartDefault: () {
              print("Start");
            },
            onEndDefault: () {
              print("End");
            },
            onSuccessDefault: () {
              print("Success");
            },
            onFailedDefault: () {
              print("Failed");
            },
            successRules: (result) {
              return (result["Status"] ?? -1) > 0;
            },
            tokenExpireRules: (resultJson) {
              return (resultJson["Status"] == -999);
            },
            onTokenExpire: (retryFunction) {
              print("Failed");
              // can call retry function
            },
            useFancyDialog: true,
            errorMsgExtractor: (result) {
              return result["Message"] ?? "Unknown Error";
            });
      }

Example

every where you want to make a request you can do as follows:

final Map<String,dynamic> req ={
      "Username": "test",
      "Password": "test",
    };

    NetworkManager networkManager = NetworkManager.instance(
      context: context,
      onSuccess: (context,response)=>print("OnSuccessCalled"),
      req: req,
      api: Apis.login
    );
    networkManager.requestPost();

Libraries

network_manager