Build AI Project Idea Generator App in Flutter (One main.dart | Futuristic UI)

 Demo :


Click Video πŸ‘‡πŸ‘‡πŸ‘‡





























✨ Features :

  • ✅ Single main.dart file

  • ✅ No backend / no API

  • ✅ Fully responsive (All devices)

  • ✅ Cyberpunk animated UI

  • ✅ Real-world project ideas

  • ✅ Perfect for students & developers


Code :


import 'dart:math';

import 'dart:ui';

import 'package:flutter/material.dart';

import 'package:flutter/services.dart';


void main() {

  WidgetsFlutterBinding.ensureInitialized();

  SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(

    statusBarColor: Colors.transparent,

    statusBarIconBrightness: Brightness.light,

  ));

  runApp(const MyApp());

}


class MyApp extends StatelessWidget {

  const MyApp({super.key});


  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      title: 'FuzzuTech Idea Generator',

      debugShowCheckedModeBanner: false,

      theme: ThemeData.dark().copyWith(

        scaffoldBackgroundColor: const Color(0xFF050505),

        primaryColor: const Color(0xFF00E5FF),

        colorScheme: const ColorScheme.dark(

          primary: Color(0xFF00E5FF),

          secondary: Color(0xFFD500F9),

          surface: Color(0xFF101010),

        ),

        textTheme: const TextTheme( 

          displayLarge: TextStyle(fontFamily: 'Courier', letterSpacing: -1.5, fontWeight: FontWeight.bold),

          displayMedium: TextStyle(fontFamily: 'Courier', letterSpacing: -1.0, fontWeight: FontWeight.bold),

          bodyLarge: TextStyle(fontFamily: 'Verdana', height: 1.5),

          bodyMedium: TextStyle(fontFamily: 'Verdana', height: 1.4),

        ),

      ),

      home: const IdeaGeneratorScreen(),

    );

  }

}


class IdeaGeneratorScreen extends StatefulWidget {

  const IdeaGeneratorScreen({super.key});


  @override

  State<IdeaGeneratorScreen> createState() => _IdeaGeneratorScreenState();

}


class _IdeaGeneratorScreenState extends State<IdeaGeneratorScreen> with SingleTickerProviderStateMixin {

  late Map<String, String> _currentIdea;

  late AnimationController _glowController;

  final Random _random = Random();


  final List<Map<String, String>> _ideas = [

    {

      "title": "NeuroFocus AI",

      "description": "An app that uses camera-based eye tracking or EEG headset data to detect focus loss and plays binaural beats to restore concentration.",

      "level": "Advanced",

      "stack": "Flutter, Python (Backend), TensorFlow, Audio API"

    },

    {

      "title": "HoloRent - AR Asset Viewer",

      "description": "Real estate app allowing users to scan their empty room and visualize 3D rental furniture in real-time AR before renting.",

      "level": "Intermediate",

      "stack": "Flutter, ARKit/ARCore, Firebase, Stripe"

    },

    {

      "title": "CryptoTracker 360",

      "description": "A minimalist cryptocurrency portfolio tracker that uses sentiment analysis from Twitter/X to predict short-term price movements.",

      "level": "Beginner",

      "stack": "Flutter, CoinGecko API, Twitter API, Provider"

    },

    {

      "title": "VoiceCode Assistant",

      "description": "Accessibility tool for developers that converts natural language voice commands into valid syntax for Python, Dart, or JS.",

      "level": "Advanced",

      "stack": "Flutter, Speech-to-Text, OpenAI API, WebSocket"

    },

    {

      "title": "EcoSnap - Recycle AI",

      "description": "Take a picture of any trash item, and the AI tells you exactly how and where to recycle it in your local city.",

      "level": "Beginner",

      "stack": "Flutter, TFLite (On-device), Google Maps API"

    },

    {

      "title": "SkillSwap Decentralized",

      "description": "A P2P time-banking app where users trade skills (e.g., coding for guitar lessons) without using money, recorded on a mini-ledger.",

      "level": "Intermediate",

      "stack": "Flutter, Solidity (Optional), Firebase, WebRTC"

    },

    {

      "title": "DreamJournal + AI Analysis",

      "description": "Users voice-record dreams immediately upon waking; AI transcribes it, visualizes the scene using DALL-E, and analyzes psychological patterns.",

      "level": "Intermediate",

      "stack": "Flutter, Whisper API, DALL-E API, SQLite"

    },

    {

      "title": "FitQuest Gamified",

      "description": "An RPG workout app where your physical steps level up your character, unlock weapons, and battle bosses.",

      "level": "Beginner",

      "stack": "Flutter, Pedometer Sensor, Hive Database"

    },

    {

      "title": "ChefBot Fridge Scanner",

      "description": "Scan ingredients in your fridge using object detection, and get instant gourmet recipes based on what you have.",

      "level": "Advanced",

      "stack": "Flutter, YOLOv8, Spoonacular API"

    },

    {

      "title": "SafeWalk Guardian",

      "description": "Safety app that monitors walking speed and location. If motion stops abnormally or user screams, it silently alerts emergency contacts.",

      "level": "Intermediate",

      "stack": "Flutter, Geolocation, Accelerometer, SMS API"

    },

    {

      "title": "Retro Game Emulator Wrapper",

      "description": "A beautiful, customizable frontend for organizing and launching retro game ROMs with cover art scraping.",

      "level": "Advanced",

      "stack": "Flutter, File I/O, SQFlite, API Scraping"

    },

    {

      "title": "Subscription Manager",

      "description": "Tracks all monthly subscriptions. scans email for receipts (with permission) and alerts you before free trials end.",

      "level": "Beginner",

      "stack": "Flutter, Google Sign-In, Gmail API, Local Notifications"

    },

  ];


  @override

  void initState() {

    super.initState();

    _currentIdea = _ideas[0];

    _glowController = AnimationController(

      vsync: this,

      duration: const Duration(seconds: 2),

    )..repeat(reverse: true);

    _generateIdea(); // Start with a random one

  }


  void _generateIdea() {

    setState(() {

      _currentIdea = _ideas[_random.nextInt(_ideas.length)];

    });

  }


  @override

  void dispose() {

    _glowController.dispose();

    super.dispose();

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      body: Stack(

        children: [

          // 1. Dynamic Background

          const AnimatedBackground(),

          

          // 2. Main Content

          Center(

            child: LayoutBuilder(

              builder: (context, constraints) {

                // Responsive Logic

                double maxWidth = constraints.maxWidth > 800 ? 500 : constraints.maxWidth * 0.9;

                

                return SingleChildScrollView(

                  child: ConstrainedBox(

                    constraints: BoxConstraints(maxWidth: maxWidth),

                    child: Column(

                      mainAxisAlignment: MainAxisAlignment.center,

                      crossAxisAlignment: CrossAxisAlignment.stretch,

                      children: [

                         // App Header

                        Center(

                          child: Text(

                            "FUZZUTECH",

                            style: TextStyle(

                              fontFamily: 'Courier',

                              fontSize: 16,

                              letterSpacing: 4,

                              color: Theme.of(context).primaryColor.withOpacity(0.8),

                            ),

                          ),

                        ),

                        const SizedBox(height: 10),

                        Center(

                          child: Text(

                            "PROJECT GENESIS",

                            textAlign: TextAlign.center,

                            style: TextStyle(

                              fontFamily: 'Courier',

                              fontSize: 32,

                              fontWeight: FontWeight.w900,

                              color: Colors.white,

                              shadows: [

                                Shadow(color: Theme.of(context).primaryColor, blurRadius: 20),

                              ],

                            ),

                          ),

                        ),

                        const SizedBox(height: 50),


                        // Project Card

                        AnimatedBuilder(

                          animation: _glowController,

                          builder: (context, child) {

                            return Container(

                              decoration: BoxDecoration(

                                color: const Color(0xFF121212).withOpacity(0.8),

                                borderRadius: BorderRadius.circular(24),

                                border: Border.all(

                                  color: Theme.of(context).primaryColor.withOpacity(0.5 + (_glowController.value * 0.3)),

                                  width: 1.5,

                                ),

                                boxShadow: [

                                  BoxShadow(

                                    color: Theme.of(context).primaryColor.withOpacity(0.1 + (_glowController.value * 0.15)),

                                    blurRadius: 20 + (_glowController.value * 10),

                                    spreadRadius: 2,

                                  ),

                                  BoxShadow(

                                    color: Theme.of(context).colorScheme.secondary.withOpacity(0.1),

                                    blurRadius: 40,

                                    offset: const Offset(0, 10),

                                  )

                                ],

                              ),

                              child: ClipRRect(

                                borderRadius: BorderRadius.circular(24),

                                child: BackdropFilter(

                                  filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),

                                  child: Padding(

                                    padding: const EdgeInsets.all(32.0),

                                    child: AnimatedSwitcher(

                                      duration: const Duration(milliseconds: 500),

                                      transitionBuilder: (Widget child, Animation<double> animation) {

                                        return FadeTransition(opacity: animation, child: SlideTransition(

                                          position: Tween<Offset>(begin: const Offset(0.0, 0.1), end: Offset.zero).animate(animation),

                                          child: child,

                                        ));

                                      },

                                      child: _IdeaContent(

                                        key: ValueKey(_currentIdea['title']),

                                        idea: _currentIdea,

                                      ),

                                    ),

                                  ),

                                ),

                              ),

                            );

                          },

                        ),

                        

                        const SizedBox(height: 50),


                        // Generate Button

                        Center(

                          child: MouseRegion(

                            cursor: SystemMouseCursors.click,

                            child: GestureDetector(

                              onTap: _generateIdea,

                              child: AnimatedContainer(

                                duration: const Duration(milliseconds: 200),

                                padding: const EdgeInsets.symmetric(horizontal: 40, vertical: 20),

                                decoration: BoxDecoration(

                                  gradient: LinearGradient(

                                    colors: [

                                      Theme.of(context).primaryColor,

                                      Theme.of(context).colorScheme.secondary,

                                    ],

                                    begin: Alignment.topLeft,

                                    end: Alignment.bottomRight,

                                  ),

                                  borderRadius: BorderRadius.circular(50),

                                  boxShadow: [

                                    BoxShadow(

                                      color: Theme.of(context).primaryColor.withOpacity(0.4),

                                      blurRadius: 15,

                                      offset: const Offset(0, 5),

                                    )

                                  ],

                                ),

                                child: const Row(

                                  mainAxisSize: MainAxisSize.min,

                                  children: [

                                    Icon(Icons.bolt, color: Colors.black, size: 28),

                                    SizedBox(width: 12),

                                    Text(

                                      "GENERATE IDEA",

                                      style: TextStyle(

                                        fontFamily: 'Courier', // Fallback for futuristic font

                                        color: Colors.black,

                                        fontSize: 18,

                                        fontWeight: FontWeight.bold,

                                        letterSpacing: 1,

                                      ),

                                    ),

                                  ],

                                ),

                              ),

                            ),

                          ),

                        ),

                        const SizedBox(height: 30),

                      ],

                    ),

                  ),

                );

              },

            ),

          ),

        ],

      ),

    );

  }

}


class _IdeaContent extends StatelessWidget {

  final Map<String, String> idea;


  const _IdeaContent({required this.key, required this.idea}) : super(key: key);


  final Key key;


  @override

  Widget build(BuildContext context) {

    return Column(

      crossAxisAlignment: CrossAxisAlignment.start,

      children: [

        // Difficulty Badge

        Container(

          padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),

          decoration: BoxDecoration(

            color: _getDifficultyColor(idea['level']!).withOpacity(0.2),

            borderRadius: BorderRadius.circular(8),

            border: Border.all(color: _getDifficultyColor(idea['level']!).withOpacity(0.5)),

          ),

          child: Text(

            idea['level']!.toUpperCase(),

            style: TextStyle(

              color: _getDifficultyColor(idea['level']!),

              fontSize: 12,

              fontWeight: FontWeight.bold,

              letterSpacing: 1.2,

            ),

          ),

        ),

        const SizedBox(height: 20),

        

        // Title

        Text(

          idea['title']!,

          style: const TextStyle(

            fontFamily: 'Courier',

            fontSize: 28,

            fontWeight: FontWeight.w800,

            color: Colors.white,

            letterSpacing: -0.5,

          ),

        ),

        const SizedBox(height: 16),

        

        // Description

        Text(

          idea['description']!,

          style: const TextStyle(

            color: Color(0xFFB0B0B0),

            fontSize: 16,

            height: 1.6,

          ),

        ),

        const SizedBox(height: 24),

        

        // Divider

        Container(

          height: 1,

          width: double.infinity,

          decoration: BoxDecoration(

            gradient: LinearGradient(

              colors: [

                Colors.transparent,

                Colors.white.withOpacity(0.2),

                Colors.transparent,

              ],

            ),

          ),

        ),

        const SizedBox(height: 24),

        

        // Tech Stack

        const Text(

          "CORE TECH STACK",

          style: TextStyle(

            color: Color(0xFF606060),

            fontSize: 12,

            fontWeight: FontWeight.bold,

            letterSpacing: 2,

          ),

        ),

        const SizedBox(height: 12),

        Wrap(

          spacing: 8,

          runSpacing: 8,

          children: (idea['stack'] ?? "").split(', ').map((tech) {

            return Container(

              padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),

              decoration: BoxDecoration(

                color: const Color(0xFF202020),

                borderRadius: BorderRadius.circular(20),

                border: Border.all(color: Colors.white10),

              ),

              child: Text(

                tech,

                style: const TextStyle(color: Color(0xFF00E5FF), fontSize: 13),

              ),

            );

          }).toList(),

        ),

      ],

    );

  }


  Color _getDifficultyColor(String level) {

    switch (level) {

      case 'Beginner': return const Color(0xFF00E676); // Green

      case 'Intermediate': return const Color(0xFFFFEA00); // Yellow

      case 'Advanced': return const Color(0xFFFF1744); // Red

      default: return Colors.white;

    }

  }

}


class AnimatedBackground extends StatefulWidget {

  const AnimatedBackground({super.key});


  @override

  State<AnimatedBackground> createState() => _AnimatedBackgroundState();

}


class _AnimatedBackgroundState extends State<AnimatedBackground> with SingleTickerProviderStateMixin {

  late AnimationController _controller;


  @override

  void initState() {

    super.initState();

    _controller = AnimationController(

        vsync: this, duration: const Duration(seconds: 10))

      ..repeat();

  }


  @override

  void dispose() {

    _controller.dispose();

    super.dispose();

  }


  @override

  Widget build(BuildContext context) {

    return Stack(

      children: [

        // Base dark layer

        Container(color: const Color(0xFF050505)),

        

        // Moving Gradient Blobs

        AnimatedBuilder(

          animation: _controller,

          builder: (context, child) {

            return CustomPaint(

              painter: BackgroundPainter(_controller.value),

              size: Size.infinite,

            );

          },

        ),

        

        // Grid Overlay (Cyberpunk Mesh)

        Opacity(

          opacity: 0.1,

          child: CustomPaint(

            painter: GridPainter(),

            size: Size.infinite,

          ),

        ),

      ],

    );

  }

}


class BackgroundPainter extends CustomPainter {

  final double animationValue;


  BackgroundPainter(this.animationValue);


  @override

  void paint(Canvas canvas, Size size) {

    final paint = Paint()..maskFilter = const MaskFilter.blur(BlurStyle.normal, 100);


    // Blob 1 (Cyan)

    final offset1 = Offset(

      size.width * 0.2 + (sin(animationValue * 2 * pi) * 100),

      size.height * 0.3 + (cos(animationValue * 2 * pi) * 100),

    );

    paint.color = const Color(0xFF00E5FF).withOpacity(0.2);

    canvas.drawCircle(offset1, 200, paint);


    // Blob 2 (Purple)

    final offset2 = Offset(

      size.width * 0.8 - (cos(animationValue * 2 * pi) * 100),

      size.height * 0.7 - (sin(animationValue * 2 * pi) * 100),

    );

    paint.color = const Color(0xFFD500F9).withOpacity(0.15);

    canvas.drawCircle(offset2, 250, paint);

  }


  @override

  bool shouldRepaint(covariant BackgroundPainter oldDelegate) => true;

}


class GridPainter extends CustomPainter {

  @override

  void paint(Canvas canvas, Size size) {

    final paint = Paint()

      ..color = Colors.white

      ..strokeWidth = 0.5

      ..style = PaintingStyle.stroke;


    const double step = 50;


    for (double x = 0; x < size.width; x += step) {

      canvas.drawLine(Offset(x, 0), Offset(x, size.height), paint);

    }

    for (double y = 0; y < size.height; y += step) {

      canvas.drawLine(Offset(0, y), Offset(size.width, y), paint);

    }

  }


  @override

  bool shouldRepaint(covariant GridPainter oldDelegate) => false;

}


Comments

Popular posts from this blog

Educational File Encryptor GUI (Python AES Project) | FuzzuTech

Is This News Real or Fake? πŸ€– AI Exposes the Truth | FuzzuTech Python App Demo

🚨 Python Intrusion Detection System (IDS) – Real-Time ML + Tkinter GUI Project | FuzzuTech