play_age_signals 0.0.1 copy "play_age_signals: ^0.0.1" to clipboard
play_age_signals: ^0.0.1 copied to clipboard

Flutter library to interact with Google Play Age Signals

example/lib/main.dart

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

import 'package:flutter/services.dart';
import 'package:play_age_signals/play_age_signals.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _playAgeSignalsPlugin = PlayAgeSignals();
  String _result = 'Waiting for action...';
  bool _isTestMode = false;

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

  Future<void> _checkAgeSignals() async {
    String resultText;
    try {
      final result = await _playAgeSignalsPlugin.checkAgeSignals();
      resultText = 'Status: ${result.status}\n'
          'Age Range: ${result.ageLower} - ${result.ageUpper}\n'
          'Approval Date: ${result.mostRecentApprovalDate}';
    } on PlatformException catch (e) {
      resultText = 'Error: ${e.message}';
    }

    if (!mounted) return;

    setState(() {
      _result = resultText;
    });
  }

  Future<void> _toggleTestMode(bool enabled) async {
    try {
      await _playAgeSignalsPlugin.setTestMode(enabled);
      setState(() {
        _isTestMode = enabled;
        _result = 'Test Mode: $enabled';
      });
    } on PlatformException catch (e) {
      setState(() {
        _result = 'Error setting test mode: ${e.message}';
      });
    }
  }

  Future<void> _setMockResult(AgeSignalsVerificationStatus status,
      {int? lower, int? upper}) async {
    try {
      await _playAgeSignalsPlugin.setMockResult(AgeSignalsResult(
          status: status, ageLower: lower, ageUpper: upper));
      setState(() {
        _result = 'Mock set to: $status ($lower-$upper)';
      });
    } on PlatformException catch (e) {
      setState(() {
        _result = 'Error setting mock: ${e.message}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Age Signals Example'),
        ),
        body: Center(
          child: SingleChildScrollView(
            padding: const EdgeInsets.all(16),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  _result,
                  textAlign: TextAlign.center,
                  style: const TextStyle(
                      fontSize: 16, fontWeight: FontWeight.bold),
                ),
                const SizedBox(height: 20),
                ElevatedButton(
                  onPressed: _checkAgeSignals,
                  child: const Text('Check Age Signals'),
                ),
                const SizedBox(height: 20),
                const Divider(),
                SwitchListTile(
                  title: const Text('Test Mode'),
                  value: _isTestMode,
                  onChanged: _toggleTestMode,
                ),
                const Text('Mock Scenarios (Test Mode Only):'),
                Wrap(
                  spacing: 8,
                  runSpacing: 8,
                  alignment: WrapAlignment.center,
                  children: [
                    ElevatedButton(
                      onPressed: _isTestMode
                          ? () => _setMockResult(
                              AgeSignalsVerificationStatus.verified)
                          : null,
                      child: const Text('Verified'),
                    ),
                    ElevatedButton(
                      onPressed: _isTestMode
                          ? () => _setMockResult(
                              AgeSignalsVerificationStatus.supervised,
                              lower: 13,
                              upper: 17)
                          : null,
                      child: const Text('Supervised (13-17)'),
                    ),
                    ElevatedButton(
                      onPressed: _isTestMode
                          ? () => _setMockResult(AgeSignalsVerificationStatus
                              .supervisedApprovalPending, lower: 10, upper: 12)
                          : null,
                      child: const Text('Pending (10-12)'),
                    ),
                    ElevatedButton(
                      onPressed: _isTestMode
                          ? () => _setMockResult(
                              AgeSignalsVerificationStatus.unknown)
                          : null,
                      child: const Text('Unknown'),
                    ),
                  ],
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}