fast_dio 1.0.0
fast_dio: ^1.0.0 copied to clipboard
Dio-based HTTP layer with the same API surface as fast_http — GenericRequest, headers, errors, download, stream, and interceptors.
example/lib/main.dart
import 'package:fast_dio/fast_dio.dart' hide State;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'data/user_remote_data_source.dart';
void main() {
setupHttp();
runApp(const MyApp());
}
void setupHttp() {
FastDio.initialize(
genericDataKey: 'data',
checkResponseIsSuccess: (_) => true,
getErrorMessageFromResponse: (response) {
return response['message']?.toString() ?? 'An error occurred';
},
onGetResponseStatusCode: (statusCode) {
if (statusCode == 401) {
// handle logout / redirect
}
},
connectTimeout: const Duration(seconds: 30),
receiveTimeout: const Duration(seconds: 60),
useChucker: kDebugMode,
);
FastDioHeader().addHeader('Accept', 'application/json');
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: ChuckerFlutter.navigatorKey,
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
String _result = 'Choose an action';
Future<void> _loadUser() async {
final result = await UserRemoteDataSource.getUserData(userId: '2');
result.fold(
(failure) => setState(() => _result = failure.errorModel.statusMessage),
(user) => setState(() => _result = '${user.name} (${user.email})'),
);
}
Future<void> _loadUserList() async {
final result = await UserRemoteDataSource.getUserList();
result.fold(
(failure) => setState(() => _result = failure.errorModel.statusMessage),
(users) => setState(
() => _result = '${users.length} users loaded',
),
);
}
Future<void> _logout() async {
final result = await UserRemoteDataSource.logout();
result.fold(
(failure) => setState(() => _result = failure.errorModel.statusMessage),
(success) => setState(() => _result = 'Logout success: $success'),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('fast_dio example')),
body: Center(
child: Padding(
padding: const EdgeInsets.all(24),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_result, textAlign: TextAlign.center),
const SizedBox(height: 24),
FilledButton(
onPressed: _loadUser,
child: const Text('getUserData'),
),
const SizedBox(height: 8),
FilledButton(
onPressed: _loadUserList,
child: const Text('getUserList'),
),
const SizedBox(height: 8),
FilledButton(
onPressed: _logout,
child: const Text('logout'),
),
],
),
),
),
);
}
}