client_network_manager 1.0.4 copy "client_network_manager: ^1.0.4" to clipboard
client_network_manager: ^1.0.4 copied to clipboard

A comprehensive Flutter network manager package with authentication, interceptors, and error handling support.

example/lib/main.dart

import 'package:client_network_manager/client_network_manager.dart';
import 'package:flutter/material.dart';
import 'package:flutter_shared_utilities/flutter_shared_utilities.dart';

import 'pages/network_demo_page.dart';
import 'services/connectivity_service.dart';
import 'services/example_network_service.dart';
import 'services/logger_service.dart';

void main() {
  runApp(const ClientNetworkManagerExampleApp());
}

class ClientNetworkManagerExampleApp extends StatelessWidget {
  const ClientNetworkManagerExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Client Network Manager Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        useMaterial3: true,
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.blue,
          brightness: Brightness.light,
        ),
      ),
      home: const NetworkManagerSetupPage(),
    );
  }
}

class NetworkManagerSetupPage extends StatefulWidget {
  const NetworkManagerSetupPage({super.key});

  @override
  State<NetworkManagerSetupPage> createState() =>
      _NetworkManagerSetupPageState();
}

class _NetworkManagerSetupPageState extends State<NetworkManagerSetupPage> {
  late final DefaultBaseNetworkManager _networkManager;
  late final RealApiNetworkService _networkService;
  late final AppLogger _logger;
  late final ConnectivityService _connectivityService;

  @override
  void initState() {
    super.initState();
    _initializeServices();
  }

  void _initializeServices() {
    // Initialize logger service
    _logger = ExampleLoggerService();

    // Initialize connectivity service
    _connectivityService = ExampleConnectivityService();

    // Initialize network manager with JSONPlaceholder API
    _networkManager = DefaultBaseNetworkManager(
      _logger,
      _connectivityService,
      baseUrl: 'https://jsonplaceholder.typicode.com',
      timeoutSeconds: 30,
    );

    // Initialize network service
    _networkService = RealApiNetworkService(_networkManager);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Network Manager Demo'),
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            Card(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      'Network Manager Configuration',
                      style: Theme.of(context).textTheme.headlineSmall
                          ?.copyWith(fontWeight: FontWeight.bold),
                    ),
                    const SizedBox(height: 12),
                    _buildConfigInfo(
                      'Base URL',
                      'https://jsonplaceholder.typicode.com',
                    ),
                    _buildConfigInfo('Timeout', '30 seconds'),
                    _buildConfigInfo('Content Type', 'application/json'),
                    const SizedBox(height: 16),
                    Text(
                      'Active Interceptors:',
                      style: Theme.of(context).textTheme.titleMedium?.copyWith(
                        fontWeight: FontWeight.bold,
                      ),
                    ),
                    const SizedBox(height: 8),
                    const Text('• Custom Log Interceptor'),
                    const Text('• Connectivity Interceptor'),
                    const Text('• Background Transformers'),
                  ],
                ),
              ),
            ),
            const SizedBox(height: 16),
            Card(
              child: Padding(
                padding: const EdgeInsets.all(16.0),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      'Available Demonstrations',
                      style: Theme.of(context).textTheme.headlineSmall
                          ?.copyWith(fontWeight: FontWeight.bold),
                    ),
                    const SizedBox(height: 12),
                    const Text(
                      '• GET requests with and without authentication',
                    ),
                    const Text('• POST requests with JSON body'),
                    const Text('• PUT requests for updates'),
                    const Text('• DELETE requests'),
                    const Text('• Error handling scenarios'),
                    const Text('• Custom headers management'),
                    const Text('• Query parameters'),
                    const Text('• Network connectivity checking'),
                  ],
                ),
              ),
            ),
            const SizedBox(height: 24),
            ElevatedButton(
              onPressed: () => _navigateToDemo(),
              style: ElevatedButton.styleFrom(
                padding: const EdgeInsets.symmetric(vertical: 16),
                backgroundColor: Theme.of(context).colorScheme.primary,
                foregroundColor: Theme.of(context).colorScheme.onPrimary,
              ),
              child: Text(
                'Start Network Demo',
                style: Theme.of(context).textTheme.titleMedium?.copyWith(
                  fontWeight: FontWeight.bold,
                  color: Theme.of(context).colorScheme.onPrimary,
                ),
              ),
            ),
            const SizedBox(height: 16),
            OutlinedButton(
              onPressed: () => _showNetworkManagerInfo(),
              child: const Text('View Network Manager Details'),
            ),
          ],
        ),
      ),
    );
  }

  Widget _buildConfigInfo(String label, String value) {
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: 4),
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          SizedBox(
            width: 100,
            child: Text(
              '$label:',
              style: const TextStyle(fontWeight: FontWeight.w500),
            ),
          ),
          Expanded(
            child: Text(value, style: TextStyle(color: Colors.grey[700])),
          ),
        ],
      ),
    );
  }

  void _navigateToDemo() {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => NetworkDemoPage(
          networkService: _networkService,
          networkManager: _networkManager,
        ),
      ),
    );
  }

  void _showNetworkManagerInfo() {
    showDialog(
      context: context,
      builder: (context) => AlertDialog(
        title: const Text('Network Manager Information'),
        content: SingleChildScrollView(
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisSize: MainAxisSize.min,
            children: [
              const Text(
                'Headers:',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 8),
              Text(_networkManager.allHeaders.toString()),
              const SizedBox(height: 16),
              const Text(
                'Interceptors:',
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 8),
              Text('Count: ${_networkManager.allInterceptors.length}'),
              const SizedBox(height: 8),
              ...(_networkManager.allInterceptors.map(
                (interceptor) => Text('• ${interceptor.runtimeType}'),
              )),
            ],
          ),
        ),
        actions: [
          TextButton(
            onPressed: () => Navigator.of(context).pop(),
            child: const Text('Close'),
          ),
        ],
      ),
    );
  }
}
0
likes
0
points
78
downloads

Publisher

unverified uploader

Weekly Downloads

A comprehensive Flutter network manager package with authentication, interceptors, and error handling support.

Repository (GitHub)
View/report issues

Topics

#networking #http #authentication #interceptors #error-handling

License

unknown (license)

Dependencies

collection, dio, flutter, flutter_shared_utilities

More

Packages that depend on client_network_manager