fast_dio 1.0.0 copy "fast_dio: ^1.0.0" to clipboard
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'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
2
likes
130
points
40
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Dio-based HTTP layer with the same API surface as fast_http — GenericRequest, headers, errors, download, stream, and interceptors.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

chucker_flutter, dio, equatable, flutter, fpdart, pretty_dio_logger

More

Packages that depend on fast_dio