saasfork_core 0.0.7 copy "saasfork_core: ^0.0.7" to clipboard
saasfork_core: ^0.0.7 copied to clipboard

Un package Flutter pour gérer la logique core de SaaS Fork.

SaasFork Core #

Bibliothèque centrale pour les applications développées avec SaasFork. Cette bibliothèque fournit des outils, utilitaires et modèles réutilisables dans tous vos projets.

Fonctionnalités principales #

1. Système de journalisation (Logger) #

Un système de journalisation unifié et configurable pour faciliter le débogage et le suivi d'événements.

Utilisation basique

import 'package:saasfork_core/saasfork_core.dart';

// Messages informatifs
log('Application démarrée');
Logger.info('Configuration chargée', tag: 'CONFIG');

// Avertissements
warn('Tentative de reconnexion', tag: 'NETWORK');
Logger.warn('Cache expiré');

// Erreurs
error('Échec de la synchronisation', 
      error: e, 
      stackTrace: stackTrace, 
      tag: 'SYNC');

Fonctionnalités du Logger

  • Formatage automatique avec horodatage et niveau de priorité
  • Catégorisation par tags
  • Support complet des erreurs et stack traces
  • Prêt à être connecté à des services distants comme Sentry ou Firebase Crashlytics

2. Modèles de données #

Des modèles pour les entités communes dans les applications SaaS, avec sérialisation/désérialisation intégrée.

UserModel

Modèle pour représenter un utilisateur dans l'application :

final user = UserModel(
  uid: 'user123',
  email: 'user@example.com',
  username: 'johndoe',
  claims: UserClaims(role: Roles.admin)
);

// Vérifier si l'utilisateur est vide
if (user.isEmpty) {
  // Traitement pour utilisateur non initialisé
}

// Création d'une copie modifiée
final updatedUser = user.copyWith(username: 'newusername');

// Conversion vers/depuis JSON
final json = user.toJson();
final userFromJson = UserModel.fromJson(json);

// Conversion vers/depuis Map
final map = user.toMap();
final userFromMap = UserModel.fromMap(map);

UserClaims et gestion des rôles

Gestion des droits et rôles utilisateur :

// Rôles disponibles
enum Roles { visitor, user, admin, moderator }

// Création des claims
final claims = UserClaims(role: Roles.user);

// Modification des claims
final adminClaims = claims.copyWith(role: Roles.admin);

// Sérialisation/désérialisation
final jsonMap = claims.toJson(); // Retourne un Map<String, dynamic>
final claimsFromJson = UserClaims.fromJson(jsonMap);

3. Système de notification #

Un système complet pour afficher des notifications à l'utilisateur, intégré avec Riverpod.

Types de notifications

enum NotificationType { error, success, info, warning }

Utilisation basique

import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:saasfork_core/saasfork_core.dart';

// Dans un widget ConsumerWidget ou ConsumerStatefulWidget
class MyWidget extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    // Accéder au contrôleur de notification
    final notifier = ref.read(notificationProvider.notifier);
    
    // Afficher différents types de notifications
    notifier.showSuccess('Opération réussie', title: 'Bravo');
    notifier.showError('Une erreur s\'est produite');
    notifier.showInfo('Information importante');
    notifier.showWarning('Attention', title: 'Avertissement');
    
    // Écouter l'état des notifications
    final notification = ref.watch(notificationProvider);
    if (notification.hasNotification) {
      // Traiter la notification (par exemple, afficher un toast ou une snackbar)
      
      // Effacer la notification après traitement
      notifier.clear();
    }
    
    return Container();
  }
}

4. Système de configuration #

Un système de configuration centralisé qui permet de gérer les paramètres de l'application et les variables d'environnement.

Initialisation

import 'package:saasfork_core/saasfork_core.dart';

await SFConfig.initialize(
  envFilePath: '.env', // Chemin vers votre fichier .env
  defaultConfig: {
    'app.name': 'Mon Application',
    'app.version': '1.0.0',
    'api.url': 'https://api.example.com',
  },
  environment: 'dev', // ou 'prod', 'staging', etc.
);

Accès aux valeurs de configuration

// Accès à une valeur avec type spécifié et valeur par défaut
final appName = SFConfig.get<String>('app.name', defaultValue: 'Application');
final debugMode = SFConfig.get<bool>('app.debug', defaultValue: false);
final apiTimeout = SFConfig.get<int>('api.timeout', defaultValue: 30);

// Vérification de l'environnement courant
if (SFConfig.isDevelopment) {
  // Code spécifique à l'environnement de développement
}

if (SFConfig.isProduction) {
  // Code spécifique à l'environnement de production
}

// Obtenir l'environnement actuel
final env = SFConfig.environment; // 'dev', 'prod', etc.

Accès à une section de configuration

// Récupérer toutes les configurations commençant par 'api.'
final apiConfig = SFConfig.getSection('api');
// Résultat: { 'url': 'https://api.example.com', 'timeout': 30, ... }

// Utilisation
final apiUrl = apiConfig['url'] as String;

Intégration avec fichier .env

SFConfig se base sur flutter_dotenv pour charger les variables d'environnement à partir d'un fichier .env:

# Exemple de fichier .env
APP_NAME=Mon Application
APP_VERSION=1.0.0
API_URL=https://api.exemple.com
DEBUG_MODE=true

Ces variables seront disponibles via SFConfig, avec conversion automatique des types pour les booléens, entiers et nombres à virgule flottante.

Exemple pratique avec AppConfig

Créez une classe wrapper pour centraliser la configuration de votre application:

class AppConfig {
  static T? get<T>(String key, {T? defaultValue}) {
    return SFConfig.get<T>(key, defaultValue: defaultValue);
  }

  static Map<String, dynamic> getDefaultConfig() {
    return {'app.name': 'Clink2Pay', 'app.version': '1.0.0'};
  }

  static Future<void> initialize({String environment = 'dev'}) async {
    final defaultConfig = getDefaultConfig();

    if (defaultConfig.containsKey(environment)) {
      final envSpecificConfig =
          defaultConfig[environment] as Map<String, dynamic>;

      // Remplacer les valeurs par défaut
      defaultConfig.addAll(envSpecificConfig);

      // Supprimer la section d'environnement après fusion
      defaultConfig.remove(environment);
      defaultConfig.remove('dev');
      defaultConfig.remove('prod');
    }

    await SFConfig.initialize(
      envFilePath: '.env',
      defaultConfig: defaultConfig,
      environment: environment,
    );
  }
}

Utilisation dans votre application:

// Initialiser au démarrage de l'application
await AppConfig.initialize(environment: 'prod');

// Accéder aux valeurs de configuration
final appName = AppConfig.get<String>('app.name');
final isDebug = AppConfig.get<bool>('app.debug', defaultValue: false);

Web Functions Utilities #

The web_functions.dart utility provides a set of helper functions for web-specific operations.

getLocalhostUrl() #

Retrieves the current URL (protocol, hostname, and port) in a web environment.

String url = getLocalhostUrl();
0
likes
140
points
173
downloads

Publisher

unverified uploader

Weekly Downloads

Un package Flutter pour gérer la logique core de SaaS Fork.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

cross_file, flutter, flutter_riverpod, shared_preferences, universal_html

More

Packages that depend on saasfork_core