smartlinks_flutter 2.0.2 copy "smartlinks_flutter: ^2.0.2" to clipboard
smartlinks_flutter: ^2.0.2 copied to clipboard

Unified SmartLinks Flutter SDK for analytics, feedback, apps, ads, community, and blogs.

example/lib/main.dart

import 'package:flutter/material.dart';

import 'package:get/get.dart';

import 'package:smartlinks_flutter/smartlinks_flutter.dart';



import 'appearance.dart';

import 'config.dart';



Future<void> main() async {

  WidgetsFlutterBinding.ensureInitialized();



  final initialized = await SmartLinks.initialize(

    apiKey: smartLinksApiKey,

    isDebug: true,

    initializeAds: true,

    appearance: smartLinksExampleAppearance,

  );



  if (initialized) {

    await SmartLinks.analytics.getLink((route) {

      debugPrint('[SmartLinks Example] Deep link: ${route.route}');

      debugPrint('[SmartLinks Example] Params: ${route.parameters}');

    });

  }



  runApp(SmartLinksExampleApp(initialized: initialized));

}



class SmartLinksExampleApp extends StatelessWidget {

  const SmartLinksExampleApp({super.key, required this.initialized});



  final bool initialized;



  @override

  Widget build(BuildContext context) {

    return GetMaterialApp(

      title: 'SmartLinks SDK',

      theme: ThemeData(colorSchemeSeed: Colors.deepPurple, useMaterial3: true),

      home: HomePage(initialized: initialized),

    );

  }

}



class HomePage extends StatefulWidget {

  const HomePage({super.key, required this.initialized});



  final bool initialized;



  @override

  State<HomePage> createState() => _HomePageState();

}



class _HomePageState extends State<HomePage> {

  String? _appUserId;

  String? _lastEvent;

  bool _promoActive = false;

  DateTime? _promoExpires;



  @override

  void initState() {

    super.initState();

    _loadIdentity();

    _loadPromoStatus();

  }



  Future<void> _loadIdentity() async {

    if (!widget.initialized) {

      return;

    }

    final id = await SmartLinks.analytics.getAppUserId();

    if (mounted) {

      setState(() => _appUserId = id);

    }

  }



  Future<void> _loadPromoStatus() async {

    if (!widget.initialized) return;

    final active = await SmartLinks.isPromoActive();

    final expires = active ? await SmartLinks.getPromoExpiration() : null;

    if (mounted) {

      setState(() {

        _promoActive = active;

        _promoExpires = expires;

      });

    }

  }



  Future<void> _logAppOpen() async {

    await SmartLinks.analytics.sendEvent('app_open', {

      'source': 'smartlinks_example',

    });

    if (mounted) {

      setState(() => _lastEvent = 'app_open');

    }

  }



  Future<void> _openPromoDialog() async {

    final redeemed = await SmartLinks.showPromoDialog(context);

    if (redeemed == true) {

      await _loadPromoStatus();

    }

  }



  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(title: const Text('SmartLinks Unified SDK')),

      body: ListView(

        padding: const EdgeInsets.all(16),

        children: [

          Card(

            child: Padding(

              padding: const EdgeInsets.all(16),

              child: Column(

                crossAxisAlignment: CrossAxisAlignment.start,

                children: [

                  Text(

                    widget.initialized

                        ? 'SDK ready'

                        : 'SDK failed to initialize',

                    style: Theme.of(context).textTheme.titleMedium?.copyWith(

                      color: widget.initialized ? Colors.green : Colors.red,

                    ),

                  ),

                  const SizedBox(height: 8),

                  Text('App user id: ${_appUserId ?? '—'}'),

                  if (_lastEvent != null) Text('Last event: $_lastEvent'),

                  const SizedBox(height: 8),

                  Text(

                    _promoActive

                        ? 'Promo active until: ${_promoExpires ?? '—'}'

                        : 'Promo: not active',

                  ),

                ],

              ),

            ),

          ),

          const SizedBox(height: 8),

          ListTile(

            leading: const Icon(Icons.analytics),

            title: const Text('Log app_open'),

            onTap: widget.initialized ? _logAppOpen : null,

          ),

          ListTile(

            leading: const Icon(Icons.card_giftcard),

            title: const Text('Redeem Promo (dialog)'),

            onTap: widget.initialized ? _openPromoDialog : null,

          ),

          ListTile(

            leading: const Icon(Icons.redeem),

            title: const Text('Redeem Promo (full page)'),

            onTap: widget.initialized

                ? () async {

                    await SmartLinks.openPromoEntry(context);

                    await _loadPromoStatus();

                  }

                : null,

          ),

          ListTile(

            leading: const Icon(Icons.smart_toy),

            title: const Text('AI Test'),

            onTap: widget.initialized

                ? () => SmartLinks.openAiTest(context)

                : null,

          ),

          ListTile(

            leading: const Icon(Icons.feedback),

            title: const Text('Open Feedback'),

            onTap: widget.initialized

                ? () async {

                    final isPremium = await SmartLinks.isPromoActive();

                    if (!context.mounted) return;

                    await SmartLinks.openFeedback(

                      isPremium: isPremium,

                      customNavigation: (page) => Navigator.push(

                        context,

                        MaterialPageRoute(builder: (_) => page),

                      ),

                    );

                  }

                : null,

          ),

          ListTile(

            leading: const Icon(Icons.apps),

            title: const Text('Open Our Apps'),

            onTap: widget.initialized

                ? () => SmartLinks.openApps(

                    customNavigation: (page) => Navigator.push(

                      context,

                      MaterialPageRoute(builder: (_) => page),

                    ),

                  )

                : null,

          ),

          ListTile(

            leading: const Icon(Icons.forum),

            title: const Text('Open Community'),

            onTap: widget.initialized ? () => SmartLinksCommunity.open() : null,

          ),

          ListTile(

            leading: const Icon(Icons.article),

            title: const Text('Open Blogs'),

            onTap: widget.initialized ? () => SmartLinksBlogs.open() : null,

          ),

          const SizedBox(height: 12),

          if (widget.initialized) SmartLinkBannerAd(adService: SmartLinks.ads),

        ],

      ),

    );

  }

}