Flutter Infra ๐Ÿ—๏ธ

A comprehensive Flutter package providing clean, type-safe local storage solutions and robust network infrastructure with advanced token management and refresh strategies.

โœจ Features

๐Ÿ’พ Storage Infrastructure

  • ๐ŸŽฏ Multiple Storage Backends: SharedPreferences, FlutterSecureStorage, and Hive support
  • ๐Ÿ” Security First: Clear separation between normal and secure storage operations
  • ๐Ÿงฉ Type Safety: Built-in support for JSON, lists, DateTime, and custom objects
  • โšก Performance: Optional caching and optimized storage implementations

๐ŸŒ Network Infrastructure

  • ๐Ÿš€ Dual HTTP Clients: Built-in support for both dart:io HTTP and Dio implementations
  • ๐Ÿ”‘ Token Management: Automatic token injection and secure storage integration
  • ๐Ÿ”„ Refresh Token Strategy: Configurable token refresh with Strategy design pattern
  • ๐Ÿ“ก Interceptor System: LoggerInterceptor and TokenInterceptor with extensible design

๐Ÿ”ง Common Features

  • ๐Ÿ”ง Dependency Injection: Clean DI support with flexible configuration
  • ๐Ÿ“ฑ Cross Platform: Works on iOS, Android, Web, Windows, macOS, and Linux
  • ๐Ÿงช Fully Tested: Comprehensive test coverage with mock support

๐Ÿš€ Quick Start

Installation

dependencies:
  flutter_infra: ^0.0.1

Basic Usage

import 'package:flutter_infra/flutter_infra.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // Storage operations
  final storageService = await StorageService.create();
  await storageService.setString('username', 'john_doe');
  await storageService.setSecureString('api_token', 'secret_token');
  
  // Network operations  
  final networkService = await NetworkService.create(
    config: NetworkConfig(baseUrl: 'https://api.example.com'),
  );
  final response = await networkService.getJson('/users/profile');
  
  runApp(MyApp());
}

With Authentication

// Create network service with automatic token management
final networkService = await NetworkService.createWithTokenSupport(
  config: NetworkConfig(baseUrl: 'https://api.example.com'),
  tokenManager: DefaultTokenManager(storage: storageService),
);

// Tokens are automatically handled
final userProfile = await networkService.getJson('/protected/profile');

๐Ÿ“š Documentation

๐Ÿ“– Getting Started

๐Ÿ“‹ Service Documentation

๐Ÿ’ก Guides & Best Practices

๐Ÿงฉ Key Capabilities

Typed Storage Extensions

// JSON operations with both normal and secure versions
await storageService.setJson('user_profile', userData);
await storageService.setSecureJson('auth_tokens', tokenData);

// DateTime and list operations
await storageService.setDateTime('last_login', DateTime.now());
await storageService.setStringList('interests', ['tech', 'music']);

Smart Network Client

// JSON convenience methods
final users = await networkService.getJson('/users');
await networkService.postJson('/users', jsonBody: newUser);

// Automatic token management and refresh
final profile = await networkService.getJson('/protected/profile');

๐Ÿ—๏ธ Architecture

Flutter Infra follows a layered architecture with clear separation of concerns:

  • Application Layer: Your Flutter app, repositories, and services
  • Flutter Infra Layer: StorageService, NetworkService, TokenManager
  • Implementation Layer: Storage implementations, network clients, interceptors
  • Platform Layer: SharedPreferences, FlutterSecureStorage, Hive, HTTP clients

๐Ÿ“ฑ Example App

Check out the example directory for a complete Flutter app demonstrating:

  • Default Usage: Basic storage and network operations
  • Common Usage: Token management and API integration
  • Advanced Usage: Custom configurations and interceptors

๐Ÿงช Testing

dart test

The package includes comprehensive test coverage with unit tests, integration tests, and mock support for testing your own code.

๐Ÿค Getting Help

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


Flutter Infra - Building robust Flutter applications with confidence! ๐Ÿš€

Libraries

flutter_infra
Flutter Infrastructure Package