dio_network_logger 1.0.2
dio_network_logger: ^1.0.2 copied to clipboard
Dio network logger.
example/lib/main.dart
import 'package:dio/dio.dart';
import 'package:dio_network_logger/dio_network_logger.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
late Dio dio;
bool isLoading = false;
final String url = 'https://jsonplaceholder.typicode.com';
bool isProduction = false;
void setupDio() {
dio = Dio(BaseOptions(baseUrl: url));
// If flavor is production, no need to setup logs
if (!isProduction) {
dio.interceptors.add(DioNetworkLogger());
NetworkLoggerOverlay.attachTo(context);
}
}
Future<Response<T>> callDio<T>(Future<Response<T>> request) async {
setState(() {
isLoading = true;
});
try {
return await request;
} finally {
setState(() {
isLoading = false;
});
}
}
@override
void initState() {
super.initState();
setupDio();
}
@override
void dispose() {
dio.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Network Logger Sample'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
await callDio(
dio.post(
'/posts',
data: {
'title': 'foo',
'body': 'bar',
'userId': 1,
},
),
);
},
child: const Text('Post Data'),
),
ElevatedButton(
onPressed: () async {
await callDio(dio.get('/todos/1'));
},
child: const Text('Fetch Data'),
),
ElevatedButton(
onPressed: () async {
await callDio(
dio.put(
'/posts/1',
data: {
'id': 1,
'title': 'foo',
'body': 'bar',
'userId': 1,
},
),
);
},
child: const Text('Put Data'),
),
ElevatedButton(
onPressed: () async {
await callDio(
dio.patch(
'/posts/1',
data: {
'title': 'foo',
},
),
);
},
child: const Text('Patch Data'),
),
ElevatedButton(
onPressed: () async {
await callDio(dio.delete('/posts/1'));
},
child: const Text('Delete Data'),
),
if (isLoading) const CircularProgressIndicator(),
],
),
),
);
}
}