Skip to content

inossan-dev/sim_data_new

Repository files navigation

SIM Data

Un plugin Flutter pour récupérer les informations des cartes SIM sur Android (support multi-SIM).

Fonctionnalités

  • Récupération des informations détaillées des cartes SIM
  • Support des appareils multi-SIM
  • Compatible avec les dernières versions de Flutter
  • Gestion optimisée des permissions Android

Installation

dependencies:
  sim_data_new: ^1.0.1

Puis exécutez:

flutter pub get

Configuration requise

Android

Dans le fichier android/app/src/main/AndroidManifest.xml, ajoutez la permission nécessaire:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

Le plugin gère automatiquement la demande de permission à l'exécution, mais vous devez déclarer la permission dans le manifeste.

iOS

Ce plugin n'est actuellement pas disponible pour iOS en raison des restrictions d'Apple sur l'accès aux informations du téléphone.

Utilisation

import 'package:sim_data_new/sim_data.dart';

// Récupérer les données des cartes SIM
Future<void> getSimData() async {
  try {
    SimData simData = await SimDataPlugin.getSimData();
    
    // Accéder aux informations des cartes SIM
    for (var card in simData.cards) {
      print('Opérateur: ${card.carrierName}');
      print('Numéro: ${card.phoneNumber}');
      print('Pays: ${card.countryCode}');
      print('MCC: ${card.mcc}');
      print('MNC: ${card.mnc}');
      print('Slot: ${card.slotIndex}');
      print('--------------------');
    }
  } catch (e) {
    print('Erreur lors de la récupération des données SIM: $e');
  }
}

Exemple complet

Un exemple complet est disponible dans le dossier /example. Voici un aperçu:

import 'package:flutter/material.dart';
import 'package:sim_data_new/sim_data.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sim Data Demo',
      home: Scaffold(
        appBar: AppBar(title: const Text('Sim Data Demo')),
        body: const SimDataScreen(),
      ),
    );
  }
}

class SimDataScreen extends StatefulWidget {
  const SimDataScreen({Key? key}) : super(key: key);

  @override
  _SimDataScreenState createState() => _SimDataScreenState();
}

class _SimDataScreenState extends State<SimDataScreen> {
  SimData? _simData;
  String? _error;

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

  Future<void> _loadSimData() async {
    try {
      final simData = await SimDataPlugin.getSimData();
      setState(() {
        _simData = simData;
        _error = null;
      });
    } catch (e) {
      setState(() {
        _error = e.toString();
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    if (_error != null) {
      return Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('Erreur: $_error'),
            ElevatedButton(
              onPressed: _loadSimData,
              child: const Text('Réessayer'),
            ),
          ],
        ),
      );
    }

    if (_simData == null) {
      return const Center(child: CircularProgressIndicator());
    }

    return ListView.builder(
      itemCount: _simData!.cards.length,
      itemBuilder: (context, index) {
        final card = _simData!.cards[index];
        return Card(
          margin: const EdgeInsets.all(8.0),
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text('SIM ${index + 1}', style: Theme.of(context).textTheme.headline6),
                Text('Opérateur: ${card.carrierName}'),
                Text('Numéro: ${card.phoneNumber}'),
                Text('Pays: ${card.countryCode}'),
                Text('MCC+MNC: ${card.mcc}-${card.mnc}'),
              ],
            ),
          ),
        );
      },
    );
  }
}

Informations disponibles

Pour chaque carte SIM, vous pouvez accéder aux informations suivantes:

Propriété Description
carrierName Nom de l'opérateur
displayName Nom affiché de la carte SIM
countryCode Code pays ISO
mcc Mobile Country Code
mnc Mobile Network Code
phoneNumber Numéro de téléphone associé à la SIM
slotIndex Index du slot de la carte SIM
serialNumber Numéro de série (ICCID)
subscriptionId ID de l'abonnement
isDataRoaming Si le roaming de données est activé
isNetworkRoaming Si la carte est en roaming réseau

Résolution des problèmes

La permission est refusée

Le plugin tente automatiquement de demander la permission READ_PHONE_STATE. Si l'utilisateur refuse la permission, une exception sera levée. Vous devez implémenter votre propre logique pour informer l'utilisateur et le rediriger vers les paramètres de l'application pour accorder la permission.

Plugin FlutterPlugin.onAttachedToEngine

Si vous rencontrez des erreurs liées à FlutterPlugin.onAttachedToEngine, cela peut indiquer un problème de compatibilité avec votre version de Flutter. Assurez-vous d'utiliser la dernière version du plugin compatible avec votre version de Flutter.

Contributions

Les contributions sont les bienvenues! N'hésitez pas à ouvrir un problème ou une pull request sur GitHub.

Licence

Ce plugin est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published