flutter_wallet_card 4.0.4 copy "flutter_wallet_card: ^4.0.4" to clipboard
flutter_wallet_card: ^4.0.4 copied to clipboard

Flutter wallet card plugin for iOS and Android. Generate Apple Wallet passes and Google Wallet cards from local files or web URLs.

Flutter Wallet Card #

pub package License: MIT

A comprehensive Flutter plugin for creating and managing wallet cards on both iOS (Apple Wallet) and Android (Google Wallet). This plugin provides a unified API for generating, adding, and managing wallet passes across platforms.

Features #

Cross-Platform Support #

  • iOS: Full Apple Wallet (Passkit) integration
  • Android: Google Wallet integration
  • Unified API: Single codebase for both platforms

Card Operations #

  • ✅ Check wallet availability
  • ✅ Add cards to wallet
  • ✅ Check if card is already added
  • ✅ View cards in wallet
  • ✅ Generate card files from data
  • ✅ Parse existing card files
  • ✅ Download cards from URLs

Card Types Supported #

  • Generic Cards: General purpose cards
  • Boarding Passes: Flight tickets
  • Coupons: Discount and promotional cards
  • Event Tickets: Concert, sports, and event passes
  • Store Cards: Loyalty and membership cards

Advanced Features #

  • 🎨 Custom colors and styling
  • 📍 Location-based relevance
  • 📅 Date-based relevance
  • 🔒 Secure certificate signing (iOS)
  • 🌐 Network download support
  • 🧪 Comprehensive test coverage

Installation #

Add this to your package's pubspec.yaml file:

dependencies:
  flutter_wallet_card: ^4.0.0
copied to clipboard

Then run:

flutter pub get
copied to clipboard

Platform Setup #

iOS Setup #

  1. Enable Wallet capability in your iOS project:

    • Open ios/Runner.xcworkspace in Xcode
    • Select your target → Signing & Capabilities
    • Add "Wallet" capability
  2. Configure your Apple Developer account:

    • Create a Pass Type ID in Apple Developer Console
    • Generate certificates for pass signing

Android Setup #

  1. Add Google Wallet API to your project:

    • Enable Google Wallet API in Google Cloud Console
    • Configure OAuth 2.0 credentials
  2. Update Android manifest (automatically handled by plugin):

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    copied to clipboard

Usage #

Basic Example #

import 'package:flutter_wallet_card/flutter_wallet_card.dart';
import 'package:flutter_wallet_card/models/wallet_card.dart';

// Check if wallet is available
bool isAvailable = await FlutterWalletCard.isWalletAvailable();

if (isAvailable) {
  // Create a wallet card
  final card = WalletCard(
    id: 'my-card-123',
    type: WalletCardType.generic,
    platformData: {
      // iOS specific data
      'passTypeIdentifier': 'pass.com.yourcompany.yourpass',
      'teamIdentifier': 'YOUR_TEAM_ID',
      // Android specific data
      'issuerId': 'your-issuer-id',
      'classId': 'your-class-id',
    },
    metadata: WalletCardMetadata(
      title: 'My Awesome Card',
      description: 'This is a sample wallet card',
      organizationName: 'Your Company',
      serialNumber: 'CARD123',
    ),
    visuals: WalletCardVisuals(
      backgroundColor: '#1E88E5',
      foregroundColor: '#FFFFFF',
      labelColor: '#E3F2FD',
    ),
  );

  // Add card to wallet
  bool success = await FlutterWalletCard.addToWallet(card);
  
  if (success) {
    print('Card added successfully!');
  }
}
copied to clipboard

Advanced Usage #

Creating Cards with Locations

final cardWithLocation = WalletCard(
  id: 'location-card',
  type: WalletCardType.storeCard,
  platformData: {
    'passTypeIdentifier': 'pass.com.yourcompany.store',
    'teamIdentifier': 'YOUR_TEAM_ID',
  },
  metadata: WalletCardMetadata(
    title: 'Store Loyalty Card',
    description: 'Get rewards at our store',
    organizationName: 'Your Store',
    locations: [
      WalletCardLocation(
        latitude: 37.7749,
        longitude: -122.4194,
        altitude: 100.0,
        relevantText: 'Welcome to our San Francisco store!',
      ),
    ],
  ),
  visuals: WalletCardVisuals(
    backgroundColor: '#4CAF50',
    foregroundColor: '#FFFFFF',
  ),
);
copied to clipboard

Generating Card Files

// Generate a card file for sharing or storage
File cardFile = await FlutterWalletCard.generateCardFile(
  card,
  outputDirectory: await getApplicationDocumentsDirectory(),
);

print('Card file created at: ${cardFile.path}');
copied to clipboard

Downloading Cards from URLs

// Download and add a card from a URL
try {
  File downloadedCard = await FlutterWalletCard.downloadFromUrl(
    'https://example.com/mycard.pkpass',
  );
  
  // Parse the downloaded card
  WalletCard card = await FlutterWalletCard.parseFromFile(downloadedCard.path);
  
  // Add to wallet
  await FlutterWalletCard.addToWallet(card);
} catch (e) {
  print('Failed to download card: $e');
}
copied to clipboard

Platform-Specific Features

// iOS: Add multiple cards at once
if (Platform.isIOS) {
  List<WalletCard> cards = [card1, card2, card3];
  bool success = await FlutterWalletCard.addMultipleToWallet(cards);
}

// Android: Save pass with JWT
if (Platform.isAndroid) {
  String jwt = 'your-google-wallet-jwt';
  bool success = await FlutterWalletCard.savePassWithJwt(jwt);
  
  // Create a pass link
  String link = await FlutterWalletCard.createPassLink({
    'objectId': 'your-object-id',
  });
}
copied to clipboard

API Reference #

Core Methods #

Method Description Returns
isWalletAvailable() Check if wallet is available on device Future<bool>
isCardAdded(String cardId) Check if specific card is added Future<bool>
addToWallet(WalletCard card) Add card to wallet Future<bool>
viewInWallet(String cardId) Open card in wallet app Future<bool>
generateCardFile(WalletCard card) Generate card file Future<File>
parseFromFile(String path) Parse card from file Future<WalletCard>
downloadFromUrl(String url) Download card from URL Future<File>

iOS-Specific Methods #

Method Description Returns
addMultipleToWallet(List<WalletCard> cards) Add multiple cards Future<bool>

Android-Specific Methods #

Method Description Returns
savePassWithJwt(String jwt) Save pass using JWT Future<bool>
createPassLink(Map<String, dynamic> data) Create pass link Future<String>

Models #

WalletCard #

The main model representing a wallet card:

class WalletCard {
  final String id;
  final WalletCardType type;
  final Map<String, dynamic> platformData;
  final WalletCardMetadata metadata;
  final WalletCardVisuals visuals;
  final File? file;
}
copied to clipboard

WalletCardMetadata #

Card information and content:

class WalletCardMetadata {
  final String title;
  final String description;
  final String? organizationName;
  final String? serialNumber;
  final DateTime? expirationDate;
  final DateTime? relevantDate;
  final List<WalletCardLocation>? locations;
  final Map<String, dynamic>? additionalData;
}
copied to clipboard

WalletCardVisuals #

Card appearance and styling:

class WalletCardVisuals {
  final String backgroundColor;
  final String foregroundColor;
  final String? labelColor;
  final Map<String, dynamic>? additionalStyles;
}
copied to clipboard

Error Handling #

The plugin throws WalletException for wallet-related errors:

try {
  await FlutterWalletCard.addToWallet(card);
} on WalletException catch (e) {
  print('Wallet error: ${e.message}');
  if (e.details != null) {
    print('Details: ${e.details}');
  }
} catch (e) {
  print('General error: $e');
}
copied to clipboard

Testing #

Run the test suite:

flutter test
copied to clipboard

For comprehensive testing:

flutter test test/test_all.dart
copied to clipboard

Migration from v3.x #

If you're upgrading from version 3.x, here are the key changes:

Breaking Changes #

  1. New unified API: Replace platform-specific calls with unified methods
  2. Updated models: Use new WalletCard model instead of separate iOS/Android models
  3. Method names: Some method names have changed for consistency

Migration Example #

Old (v3.x):

// iOS
await FlutterWalletCard.addPasskit(passData);

// Android
await FlutterWalletCard.addGoogleWallet(walletData);
copied to clipboard

New (v4.x):

// Unified
final card = WalletCard(/* ... */);
await FlutterWalletCard.addToWallet(card);
copied to clipboard

Development Resources #

🚀 Development & Deployment #

Local Development #

# Validate package before publishing
./scripts/publish-package.sh validate

# Run comprehensive tests
./scripts/publish-package.sh test
copied to clipboard

Publishing #

# Create a new release
./scripts/publish-package.sh release --version 1.0.0

# Publish to pub.dev (manual)
./scripts/publish-package.sh publish
copied to clipboard

Automated Workflows #

This project includes comprehensive GitHub Actions workflows:

  • CI/CD Pipeline - Automated testing, validation, and quality checks

  • Package Publishing - Automated pub.dev releases

  • Release Management - Version bumping and changelog generation

See GitHub Actions Documentation for details.

Contributing #

Contributions are welcome! Please read our contributing guidelines before submitting PRs.

Development Setup #

  1. Fork the repository
  2. Clone your fork: git clone https://github.com/your-username/flutter_wallet_card.git
  3. Install dependencies: flutter pub get
  4. Run tests: flutter test
  5. Start documentation server: ./scripts/deploy-docs.sh dev

Before Submitting #

  • Run ./scripts/publish-package.sh validate to ensure quality
  • Update documentation if needed
  • Add tests for new features
  • Follow existing code style

License #

This project is licensed under the MIT License - see the LICENSE file for details.

Support #

Changelog #

See CHANGELOG.md for a detailed list of changes.


Made with ❤️ for the Flutter community

43
likes
150
points
4.06k
downloads

Publisher

unverified uploader

Weekly Downloads

2024.12.04 - 2025.10.29

Flutter wallet card plugin for iOS and Android. Generate Apple Wallet passes and Google Wallet cards from local files or web URLs.

Homepage
Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

archive, crypto, dio, equatable, flutter, json_annotation, path, path_provider, uuid

More

Packages that depend on flutter_wallet_card

Packages that implement flutter_wallet_card