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!),
);
},
);
}
}
}
}
},
),