cyber_req 2.0.12+1 copy "cyber_req: ^2.0.12+1" to clipboard
cyber_req: ^2.0.12+1 copied to clipboard

A flexible Flutter/Dart API client for backends with dynamic headers, secure token management, and comprehensive callbacks.

example/main.dart

import 'package:flutter/material.dart';
import 'package:cyber_req/cyber_req.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Cyber Req Examples',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const ExampleScreen(),
    );
  }
}

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

  @override
  State<ExampleScreen> createState() => _ExampleScreenState();
}

class _ExampleScreenState extends State<ExampleScreen> {
  final ApiService _apiService = ApiService(
    baseUrl: 'https://jsonplaceholder.typicode.com',
    onUnauthorized: () async {
      // Simulate token refresh or logout
      debugPrint('Unauthorized! Attempting to refresh token or logging out...');
      await Future.delayed(const Duration(seconds: 1));
      debugPrint('Unauthorized handler finished.');
    },
  );

  String _example1Result = 'Loading...';
  String _example2Result = 'Loading...';
  String _example3Result = 'Loading...';

  @override
  void initState() {
    super.initState();
    _runExample1();
    _runExample2();
    _runExample3();
  }

  // Example 1: Basic GET Request with Callbacks
  Future<void> _runExample1() async {
    setState(() => _example1Result = 'Fetching data for Example 1...');
    try {
      await _apiService.get(
        '/todos/1',
        onSuccess: (data, {statusCode}) {
          setState(() => _example1Result = 'Example 1 Success: ${data['title']} (Status: $statusCode)');
        },
        onFailure: (error, {statusCode}) {
          setState(() => _example1Result = 'Example 1 Failure: ${error.message} (Status: $statusCode)');
        },
      );
    } catch (e) {
      setState(() => _example1Result = 'Example 1 Error: $e');
    }
  }

  // Example 2: GET Request with Bearer Token (Simulated Unauthorized)
  Future<void> _runExample2() async {
    setState(() => _example2Result = 'Fetching data for Example 2 (simulating unauthorized)...');
    try {
      // Using a fake token to trigger unauthorized handler if API supports it
      await _apiService.get(
        '/posts', // Using a different endpoint for variety
        bearerToken: 'fake_invalid_token',
        onSuccess: (data, {statusCode}) {
          setState(() => _example2Result = 'Example 2 Success: ${data.length} items (Status: $statusCode)');
        },
        onFailure: (error, {statusCode}) {
          setState(() => _example2Result = 'Example 2 Failure: ${error.message} (Status: $statusCode)');
        },
      );
    } catch (e) {
      setState(() => _example2Result = 'Example 2 Error: $e');
    }
  }

  // Example 3: POST Request with Data and Callbacks
  Future<void> _runExample3() async {
    setState(() => _example3Result = 'Posting data for Example 3...');
    try {
      await _apiService.post(
        '/posts',
        data: {'title': 'foo', 'body': 'bar', 'userId': 1},
        onSuccess: (data, {statusCode}) {
          setState(() => _example3Result = 'Example 3 Success: Post ID ${data['id']} (Status: $statusCode)');
        },
        onFailure: (error, {statusCode}) {
          setState(() => _example3Result = 'Example 3 Failure: ${error.message} (Status: $statusCode)');
        },
      );
    } catch (e) {
      setState(() => _example3Result = 'Example 3 Error: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Cyber Req Examples'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('Example 1 (GET with Callbacks): $_example1Result'),
            const SizedBox(height: 20),
            Text('Example 2 (GET with Bearer Token & Unauthorized): $_example2Result'),
            const SizedBox(height: 20),
            Text('Example 3 (POST with Data & Callbacks): $_example3Result'),
          ],
        ),
      ),
    );
  }
}
2
likes
0
points
39
downloads

Publisher

unverified uploader

Weekly Downloads

A flexible Flutter/Dart API client for backends with dynamic headers, secure token management, and comprehensive callbacks.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter_secure_storage, http

More

Packages that depend on cyber_req