mobile_api

A Dart/Flutter package for seamless REST and GraphQL API integration in Moam Digital System apps.

Features

  • Unified HTTP and GraphQL client
  • Automatic token refresh
  • Customizable headers (marketplace, user agent, etc.)
  • Error handling and logging
  • Multipart/form-data support

Getting started

Add to your pubspec.yaml:

dependencies:
  mobile_api: ^0.0.2

Import in your Dart code:

import 'package:mobile_api/mobile_api.dart';

Usage

final apiConfig = ApiConfig(
  apiUrl: Uri.parse('https://your.api.url'),
  marketplaceValue: 'YOUR_MARKETPLACE',
  userAgentValue: 'YOUR_USER_AGENT',
  // ...other config
);

final httpRepo = IHttp


/// Built-in reusable (generic) keys.
class CoreCacheKey extends CacheKey {
  const CoreCacheKey._(this.value);
  @override
  final String value;

  // Common auth / app keys
  static const accessToken = CoreCacheKey._('access_token');
  static const refreshToken = CoreCacheKey._('refresh_token');
  static const language = CoreCacheKey._('language');
  static const theme = CoreCacheKey._('theme');
  static const appVersion = CoreCacheKey._('app_version');
  static const biometricEnabled = CoreCacheKey._('biometric_enabled');
  static const onboarding = CoreCacheKey._('onboarding');
  static const pinCode = CoreCacheKey._('pin_code');
  static const session = CoreCacheKey._('session');

  /// Keys you may want to preload / clear together.
  static const bootstrap = <CoreCacheKey>[
    accessToken,
    refreshToken,
    theme,
  ];
}

/// User/app-defined dynamic key (allows any custom key).
class DynamicCacheKey extends CacheKey {
  const DynamicCacheKey(this.value);
  @override
  final String value;
}

/// Optional namespaced key (adds a prefix automatically).
class NamespacedCacheKey extends CacheKey {
  NamespacedCacheKey(this._raw, {String? namespace})
      : value = namespace == null ? _raw : '$namespace-$_raw';
  final String _raw;
  @override
  final String value;
}


/// Helper builders for grouped cache writes.
abstract final class CacheKeyBundle {
  static Map<CacheKey, String> tokenPair({
    required String access,
    required String refresh,
  }) =>
      {
        CoreCacheKey.accessToken: access,
        CoreCacheKey.refreshToken: refresh,
      };

  static Map<CacheKey, String> initialSecure({
    required String access,
    required String refresh,
    String? pin,
  }) =>
      {
        CoreCacheKey.accessToken: access,
        CoreCacheKey.refreshToken: refresh,
        if (pin != null) CoreCacheKey.pinCode: pin,
      };
}

Libraries

mobile_api