fifty_achievement_engine 0.1.3 copy "fifty_achievement_engine: ^0.1.3" to clipboard
fifty_achievement_engine: ^0.1.3 copied to clipboard

Achievement system for Flutter games with condition-based unlocks, progress tracking, and FDL-compliant UI.

example/lib/main.dart

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

import 'examples/basic_achievements.dart';
import 'examples/rpg_achievements.dart';
import 'examples/fitness_achievements.dart';

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

/// Example app demonstrating fifty_achievement_engine features.
class AchievementEngineExampleApp extends StatelessWidget {
  const AchievementEngineExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Achievement Engine Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData.dark().copyWith(
        colorScheme: ColorScheme.dark(
          primary: FiftyColors.burgundy,
          surface: FiftyColors.darkBurgundy,
          onSurface: FiftyColors.cream,
          outline: FiftyColors.borderDark,
          surfaceContainerHighest: FiftyColors.surfaceDark,
        ),
        scaffoldBackgroundColor: FiftyColors.darkBurgundy,
        appBarTheme: AppBarTheme(
          backgroundColor: FiftyColors.surfaceDark,
          foregroundColor: FiftyColors.cream,
          elevation: 0,
        ),
      ),
      home: const ExampleLauncher(),
    );
  }
}

/// Launcher screen for selecting different examples.
class ExampleLauncher extends StatelessWidget {
  const ExampleLauncher({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Achievement Engine Examples'),
      ),
      body: ListView(
        padding: const EdgeInsets.all(FiftySpacing.md),
        children: [
          _buildExampleTile(
            context,
            title: 'Basic Achievements',
            subtitle: 'Simple event and count-based achievements',
            icon: Icons.star_outline,
            builder: (context) => const BasicAchievementsExample(),
          ),
          const SizedBox(height: FiftySpacing.md),
          _buildExampleTile(
            context,
            title: 'RPG Achievements',
            subtitle: 'Combat, leveling, and quest achievements',
            icon: Icons.sports_esports,
            builder: (context) => const RpgAchievementsExample(),
          ),
          const SizedBox(height: FiftySpacing.md),
          _buildExampleTile(
            context,
            title: 'Fitness Achievements',
            subtitle: 'Workout tracking with time and stat conditions',
            icon: Icons.fitness_center,
            builder: (context) => const FitnessAchievementsExample(),
          ),
        ],
      ),
    );
  }

  Widget _buildExampleTile(
    BuildContext context, {
    required String title,
    required String subtitle,
    required IconData icon,
    required WidgetBuilder builder,
  }) {
    final colorScheme = Theme.of(context).colorScheme;
    return Card(
      color: colorScheme.surfaceContainerHighest,
      shape: RoundedRectangleBorder(
        borderRadius: FiftyRadii.lgRadius,
        side: BorderSide(color: colorScheme.outline),
      ),
      child: ListTile(
        contentPadding: const EdgeInsets.all(FiftySpacing.md),
        leading: Container(
          width: 48,
          height: 48,
          decoration: BoxDecoration(
            color: colorScheme.primary.withValues(alpha: 0.2),
            borderRadius: FiftyRadii.mdRadius,
          ),
          child: Icon(
            icon,
            color: colorScheme.primary,
          ),
        ),
        title: Text(
          title,
          style: TextStyle(
            fontFamily: FiftyTypography.fontFamily,
            fontWeight: FiftyTypography.bold,
            color: colorScheme.onSurface,
          ),
        ),
        subtitle: Text(
          subtitle,
          style: TextStyle(
            fontFamily: FiftyTypography.fontFamily,
            color: colorScheme.onSurface.withValues(alpha: 0.7),
          ),
        ),
        trailing: Icon(
          Icons.chevron_right,
          color: colorScheme.onSurface.withValues(alpha: 0.5),
        ),
        onTap: () {
          Navigator.of(context).push(
            MaterialPageRoute(builder: builder),
          );
        },
      ),
    );
  }
}
0
likes
160
points
99
downloads
screenshot

Publisher

verified publisherfifty.dev

Weekly Downloads

Achievement system for Flutter games with condition-based unlocks, progress tracking, and FDL-compliant UI.

Homepage
Repository (GitHub)
View/report issues

Topics

#flutter #game #achievements #gamification

Documentation

API reference

License

MIT (license)

Dependencies

fifty_tokens, fifty_ui, flutter

More

Packages that depend on fifty_achievement_engine