appgram_flutter 1.0.0 copy "appgram_flutter: ^1.0.0" to clipboard
appgram_flutter: ^1.0.0 copied to clipboard

Flutter SDK for Appgram - Feature voting, roadmaps, changelogs, help center, support tickets, status pages, surveys, contact forms, and blog. Build complete user feedback and support systems with pre- [...]

example/lib/main.dart

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

void main() {
  runApp(
    AppgramProvider(
      config: const AppgramConfig(
        projectId: '8be98cbb-308e-4aaa-8201-4fa17d5f2116',
        orgSlug: 'acme-corp',
        projectSlug: 'my-app',
      ),
      theme: const AppgramThemeData(
        mode: AppgramThemeMode.system,
      ),
      child: const MyApp(),
    ),
  );
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Appgram Flutter Example',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),
        useMaterial3: true,
      ),
      darkTheme: ThemeData(
        colorScheme: ColorScheme.fromSeed(
          seedColor: Colors.indigo,
          brightness: Brightness.dark,
        ),
        useMaterial3: true,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    final theme = Theme.of(context);

    return Scaffold(
      appBar: AppBar(
        title: const Text('Appgram SDK Demo'),
        centerTitle: true,
      ),
      body: ListView(
        padding: const EdgeInsets.all(16),
        children: [
          // Header
          Padding(
            padding: const EdgeInsets.only(bottom: 24, top: 8),
            child: Column(
              children: [
                Text(
                  'Appgram SDK Demo',
                  style: theme.textTheme.headlineMedium?.copyWith(
                    fontWeight: FontWeight.bold,
                  ),
                  textAlign: TextAlign.center,
                ),
                const SizedBox(height: 8),
                Text(
                  'Flutter SDK for feature voting, roadmaps, help center, and more',
                  style: theme.textTheme.bodyMedium?.copyWith(
                    color: theme.colorScheme.onSurface.withValues(alpha: 0.7),
                  ),
                  textAlign: TextAlign.center,
                ),
              ],
            ),
          ),
          _FeatureCard(
            title: 'Feature Wishes',
            description: 'Vote on features and submit requests',
            icon: Icons.lightbulb_outline,
            onTap: () => Navigator.push(
              context,
              MaterialPageRoute(builder: (_) => const WishListPage()),
            ),
          ),
          _FeatureCard(
            title: 'Roadmap',
            description: 'See what we\'re building',
            icon: Icons.view_kanban,
            onTap: () => Navigator.push(
              context,
              MaterialPageRoute(builder: (_) => const RoadmapPage()),
            ),
          ),
          _FeatureCard(
            title: 'Changelog',
            description: 'See what\'s new',
            icon: Icons.new_releases_outlined,
            onTap: () => Navigator.push(
              context,
              MaterialPageRoute(builder: (_) => const ReleasesPage()),
            ),
          ),
          _FeatureCard(
            title: 'Blog',
            description: 'Read articles and updates',
            icon: Icons.article_outlined,
            onTap: () => Navigator.push(
              context,
              MaterialPageRoute(builder: (_) => const BlogPage()),
            ),
          ),
          _FeatureCard(
            title: 'Help Center',
            description: 'Browse help articles',
            icon: Icons.help_outline,
            onTap: () => Navigator.push(
              context,
              MaterialPageRoute(builder: (_) => const HelpCenterPage()),
            ),
          ),
          _FeatureCard(
            title: 'Support',
            description: 'Submit a support ticket',
            icon: Icons.support_agent,
            onTap: () => Navigator.push(
              context,
              MaterialPageRoute(builder: (_) => const SupportPage()),
            ),
          ),
          _FeatureCard(
            title: 'Status',
            description: 'Check system status',
            icon: Icons.monitor_heart_outlined,
            onTap: () => Navigator.push(
              context,
              MaterialPageRoute(builder: (_) => const StatusPage()),
            ),
          ),
          _FeatureCard(
            title: 'Survey',
            description: 'Give us feedback',
            icon: Icons.poll_outlined,
            onTap: () => Navigator.push(
              context,
              MaterialPageRoute(builder: (_) => const SurveyPage()),
            ),
          ),
        ],
      ),
    );
  }
}

class _FeatureCard extends StatelessWidget {
  const _FeatureCard({
    required this.title,
    required this.description,
    required this.icon,
    required this.onTap,
  });

  final String title;
  final String description;
  final IconData icon;
  final VoidCallback onTap;

  @override
  Widget build(BuildContext context) {
    return Card(
      margin: const EdgeInsets.only(bottom: 12),
      child: ListTile(
        leading: Icon(icon, size: 32),
        title: Text(title),
        subtitle: Text(description),
        trailing: const Icon(Icons.chevron_right),
        onTap: onTap,
      ),
    );
  }
}

// Feature Voting Page
class WishListPage extends StatelessWidget {
  const WishListPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Feature Requests')),
      body: WishList(
        onWishTap: (wish) {
          WishDetailModal.show(context, wish: wish);
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          SubmitWishSheet.show(context);
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}

// Roadmap Page
class RoadmapPage extends StatelessWidget {
  const RoadmapPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Roadmap')),
      body: const RoadmapBoard(),
    );
  }
}

// Releases Page
class ReleasesPage extends StatelessWidget {
  const ReleasesPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Changelog')),
      body: ReleaseList(
        onReleaseTap: (release) {
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (_) => Scaffold(
                appBar: AppBar(title: Text(release.title)),
                body: ReleaseDetail(slug: release.slug),
              ),
            ),
          );
        },
      ),
    );
  }
}

// Help Center Page
class HelpCenterPage extends StatelessWidget {
  const HelpCenterPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Help Center')),
      body: HelpCenter(
        onFlowTap: (flow) {
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (_) => Scaffold(
                appBar: AppBar(title: Text(flow.name)),
                body: HelpFlowDetail(
                  slug: flow.slug,
                  onArticleTap: (article) {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (_) => Scaffold(
                          appBar: AppBar(title: Text(article.title)),
                          body: HelpArticleDetail(
                            slug: article.slug,
                            flowId: flow.id,
                          ),
                        ),
                      ),
                    );
                  },
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

// Support Page
class SupportPage extends StatelessWidget {
  const SupportPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Support')),
      body: SupportForm(
        onSubmitted: (request) {
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text('Support request submitted!')),
          );
          Navigator.pop(context);
        },
      ),
    );
  }
}

// Status Page
class StatusPage extends StatelessWidget {
  const StatusPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Service Status')),
      body: const StatusBoard(
        refreshInterval: Duration(minutes: 5),
      ),
    );
  }
}

// Blog Page
class BlogPage extends StatelessWidget {
  const BlogPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Blog')),
      body: BlogList(
        onPostTap: (post) {
          Navigator.push(
            context,
            MaterialPageRoute(
              builder: (_) => Scaffold(
                appBar: AppBar(title: Text(post.title)),
                body: BlogPostDetail(
                  slug: post.slug,
                  onRelatedPostTap: (relatedPost) {
                    Navigator.pushReplacement(
                      context,
                      MaterialPageRoute(
                        builder: (_) => Scaffold(
                          appBar: AppBar(title: Text(relatedPost.title)),
                          body: BlogPostDetail(slug: relatedPost.slug),
                        ),
                      ),
                    );
                  },
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

// Survey Page
class SurveyPage extends StatelessWidget {
  const SurveyPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Survey')),
      body: SurveyForm(
        slug: 'survey-feature-feedback',
        onComplete: (response) {
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text('Survey submitted! Thank you for your feedback.')),
          );
          Navigator.pop(context);
        },
      ),
    );
  }
}
0
likes
130
points
114
downloads

Documentation

Documentation
API reference

Publisher

verified publisherappgram.dev

Weekly Downloads

Flutter SDK for Appgram - Feature voting, roadmaps, changelogs, help center, support tickets, status pages, surveys, contact forms, and blog. Build complete user feedback and support systems with pre-built widgets and headless providers.

Homepage
Repository (GitHub)
View/report issues

Topics

#feedback #roadmap #changelog #support #help-center

License

MIT (license)

Dependencies

crypto, device_info_plus, dio, flutter, flutter_html, flutter_markdown, flutter_riverpod, freezed_annotation, json_annotation, shared_preferences

More

Packages that depend on appgram_flutter