AI Project Idea Generator App using Flutter (ONE main.dart) – Responsive & Futuristic

 Demo :


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























⭐ FEATURES :

  • ✔ Single File Flutter App (main.dart only)

  • ✔ No Backend / No API

  • ✔ Fully Responsive (Mobile + Desktop)

  • ✔ Cyberpunk Hacker UI

  • ✔ Perfect for Final Year Students


Code :


import 'dart:ui';

import 'dart:math';


import 'package:flutter/material.dart';

import 'package:google_fonts/google_fonts.dart';


// ---------------------------------------------------------------------------

// MAIN ENTRY POINT

// ---------------------------------------------------------------------------

void main() {

  runApp(const MyApp());

}


// ---------------------------------------------------------------------------

// ROOT WIDGET

// ---------------------------------------------------------------------------

class MyApp extends StatelessWidget {

  const MyApp({super.key});


  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      title: 'AI Project Generator',

      debugShowCheckedModeBanner: false,

      theme: ThemeData.dark().copyWith(

        scaffoldBackgroundColor: const Color(0xFF050505),

        primaryColor: const Color(0xFF00F0FF),

        colorScheme: const ColorScheme.dark(

          primary: Color(0xFF00F0FF),

          secondary: Color(0xFF7000FF),

          surface: Color(0xFF101015),

        ),

        textTheme: GoogleFonts.orbitronTextTheme(

          ThemeData.dark().textTheme,

        ),

        useMaterial3: true,

      ),

      home: const GeneratorScreen(),

    );

  }

}


// ---------------------------------------------------------------------------

// DATA MODELS

// ---------------------------------------------------------------------------

class ProjectIdea {

  final String title;

  final String description;

  final List<String> techStack;


  const ProjectIdea({

    required this.title,

    required this.description,

    required this.techStack,

  });

}


// ---------------------------------------------------------------------------

// HARDCODED DATABASE (AI-POWERED SIMULATION)

// ---------------------------------------------------------------------------

const Map<String, List<ProjectIdea>> projectDatabase = {

  'Flutter': [

    ProjectIdea(

      title: 'AR Furniture Visualizer',

      description: 'An augmented reality app allowing users to place virtual furniture in their real-world environment to test fit and style before buying.',

      techStack: ['Flutter', 'ARKit/ARCore', 'Firebase'],

    ),

    ProjectIdea(

      title: 'Crypto Portfolio AI',

      description: 'A real-time cryptocurrency tracker that uses on-device ML to predict short-term price trends based on social sentiment.',

      techStack: ['Flutter', 'TensorFlow Lite', 'Coingecko API'],

    ),

    ProjectIdea(

      title: 'EcoTrack Carbon Footprint',

      description: 'A gamified automated carbon footprint tracker that scans grocery receipts and travel history to estimate impact.',

      techStack: ['Flutter', 'OCR', 'Gamification'],

    ),

    ProjectIdea(

      title: 'Voice-Controlled Smart Hub',

      description: 'A dedicated tablet interface for smart homes that runs offline voice recognition to control lights and security.',

      techStack: ['Flutter', 'Porcupine (Voice)', 'IoT / MQTT'],

    ),

  ],

  'Web Development': [

    ProjectIdea(

      title: 'AI Collaborative Whiteboard',

      description: 'A real-time collaborative drawing board where an AI assistant expands rough sketches into high-fidelity UI designs.',

      techStack: ['React/Next.js', 'Socket.io', 'Stable Diffusion API'],

    ),

    ProjectIdea(

      title: 'DevOps Visualizer Dashboard',

      description: 'A 3D visualization of server architectures and container health using WebGL to monitor cloud infrastructure.',

      techStack: ['Three.js', 'Vue.js', 'Docker API'],

    ),

    ProjectIdea(

      title: 'SaaS Boilerplate Generator',

      description: 'An interactive CLI and Web tool that generates custom full-stack starter kits based on selected features.',

      techStack: ['Node.js', 'EJS', 'TailwindCSS'],

    ),

  ],

  'AI / ML': [

    ProjectIdea(

      title: 'Sign Language Translator',

      description: 'A real-time computer vision system that translates American Sign Language (ASL) gestures into spoken text.',

      techStack: ['Python', 'OpenCV', 'PyTorch'],

    ),

    ProjectIdea(

      title: 'DeepFake Detector',

      description: 'A browser extension and web service that analyzes video metadata and artifacts to flag potential deepfake content.',

      techStack: ['TensorFlow', 'Flask', 'React'],

    ),

    ProjectIdea(

      title: 'Personalized Music Composer',

      description: 'An AI model that generates infinite ambient focus music tailored to the user’s current heart rate and weather.',

      techStack: ['Python', 'NumPy', 'Spotify API'],

    ),

  ],

  'Cyber Security': [

    ProjectIdea(

      title: 'Phishing Link Terminator',

      description: 'An advanced email scanner that uses NLP to detect semantic urgency and suspicious patterns in incoming mails.',

      techStack: ['Python', 'BERT Model', 'Chrome Extension'],

    ),

    ProjectIdea(

      title: 'Network Packet Visualizer',

      description: 'A desktop tool that visualizes network traffic in a cyberpunk grid to identify anomalies and potential intrusions.',

      techStack: ['Rust', 'Tauri', 'Wireshark Libs'],

    ),

    ProjectIdea(

      title: 'Zero-Knowledge File Vault',

      description: 'A secure cloud storage client where encryption keys never leave the client device, ensuring total privacy.',

      techStack: ['Go', 'React', 'WASM'],

    ),

  ],

};


// ---------------------------------------------------------------------------

// MAIN SCREEN

// ---------------------------------------------------------------------------

class GeneratorScreen extends StatefulWidget {

  const GeneratorScreen({super.key});


  @override

  State<GeneratorScreen> createState() => _GeneratorScreenState();

}


class _GeneratorScreenState extends State<GeneratorScreen> with TickerProviderStateMixin {

  String _selectedDomain = 'Flutter';

  ProjectIdea? _currentIdea;

  bool _isGenerating = false;


  late AnimationController _glowController;

  late AnimationController _cardController;


  @override

  void initState() {

    super.initState();

    // Background pulsing glow

    _glowController = AnimationController(

      vsync: this,

      duration: const Duration(seconds: 4),

    )..repeat(reverse: true);


    // Card entrance animation

    _cardController = AnimationController(

      vsync: this,

      duration: const Duration(milliseconds: 600),

    );

  }


  @override

  void dispose() {

    _glowController.dispose();

    _cardController.dispose();

    super.dispose();

  }


  void _generateIdea() async {

    setState(() {

      _isGenerating = true;

      _cardController.reverse(); // Hide current card

    });


    // Simulate AI "Processing"

    await Future.delayed(const Duration(milliseconds: 1200));


    final ideas = projectDatabase[_selectedDomain] ?? [];

    if (ideas.isNotEmpty) {

      final random = Random();

      setState(() {

        _currentIdea = ideas[random.nextInt(ideas.length)];

        _isGenerating = false;

        _cardController.forward(); // Show new card

      });

    } else {

      setState(() {

        _isGenerating = false;

      });

    }

  }


  @override

  Widget build(BuildContext context) {

    // Responsive Helper

    final size = MediaQuery.of(context).size;

    final isDesktop = size.width > 800;

    final double contentWidth = isDesktop ? 600 : size.width * 0.9;


    return Scaffold(

      body: Stack(

        children: [

          // 1. FUTURISTIC BACKGROUND

          Positioned.fill(

            child: Container(

              decoration: const BoxDecoration(

                gradient: LinearGradient(

                  begin: Alignment.topLeft,

                  end: Alignment.bottomRight,

                  colors: [

                    Color(0xFF050505),

                    Color(0xFF0A0A12),

                    Color(0xFF000000),

                  ],

                ),

              ),

            ),

          ),

          // Animated Glow Orbs

          AnimatedBuilder(

            animation: _glowController,

            builder: (context, child) {

              return Positioned(

                top: -100 + (_glowController.value * 20),

                right: -100,

                child: Container(

                  width: 400,

                  height: 400,

                  decoration: BoxDecoration(

                    shape: BoxShape.circle,

                    color: const Color(0xFF7000FF).withOpacity(0.15),

                    boxShadow: [

                      BoxShadow(

                        color: const Color(0xFF7000FF).withOpacity(0.3),

                        blurRadius: 100,

                        spreadRadius: 50,

                      ),

                    ],

                  ),

                ),

              );

            },

          ),

          AnimatedBuilder(

            animation: _glowController,

            builder: (context, child) {

              return Positioned(

                bottom: -100 - (_glowController.value * 20),

                left: -100,

                child: Container(

                  width: 300,

                  height: 300,

                  decoration: BoxDecoration(

                    shape: BoxShape.circle,

                    color: const Color(0xFF00F0FF).withOpacity(0.15),

                    boxShadow: [

                      BoxShadow(

                        color: const Color(0xFF00F0FF).withOpacity(0.3),

                        blurRadius: 100,

                        spreadRadius: 50,

                      ),

                    ],

                  ),

                ),

              );

            },

          ),


          // 2. GLASSMORPHISM GRID OVERLAY (SUBTLE TEXTURE)

          Positioned.fill(

            child: CustomPaint(

              painter: GridPainter(),

            ),

          ),


          // 3. MAIN CONTENT

          Center(

            child: SingleChildScrollView(

              child: ConstrainedBox(

                constraints: BoxConstraints(maxWidth: contentWidth),

                child: Column(

                  mainAxisAlignment: MainAxisAlignment.center,

                  crossAxisAlignment: CrossAxisAlignment.stretch,

                  children: [

                    // Header

                    Text(

                      'AI NEXUS',

                      textAlign: TextAlign.center,

                      style: GoogleFonts.orbitron(

                        fontSize: isDesktop ? 48 : 32,

                        fontWeight: FontWeight.w900,

                        color: Colors.white,

                        letterSpacing: 4,

                        shadows: [

                          const Shadow(color: Color(0xFF00F0FF), blurRadius: 20),

                        ],

                      ),

                    ),

                    const SizedBox(height: 10),

                    Text(

                      'PROJECT IDEA GENERATOR',

                      textAlign: TextAlign.center,

                      style: GoogleFonts.robotoMono(

                        fontSize: 14,

                        color: Colors.white70,

                        letterSpacing: 2,

                      ),

                    ),

                    const SizedBox(height: 50),


                    // Domain Selector

                    GlassContainer(

                      child: Column(

                        crossAxisAlignment: CrossAxisAlignment.start,

                        children: [

                          Text(

                            'SELECT DOMAIN',

                            style: GoogleFonts.orbitron(

                              color: const Color(0xFF00F0FF),

                              fontSize: 12,

                              fontWeight: FontWeight.bold,

                            ),

                          ),

                          const SizedBox(height: 10),

                          DropdownButtonFormField<String>(

                            value: _selectedDomain,

                            dropdownColor: const Color(0xFF151520),

                            style: GoogleFonts.poppins(color: Colors.white),

                            decoration: InputDecoration(

                              filled: true,

                              fillColor: Colors.black26,

                              border: OutlineInputBorder(

                                borderRadius: BorderRadius.circular(12),

                                borderSide: BorderSide.none,

                              ),

                              enabledBorder: OutlineInputBorder(

                                borderRadius: BorderRadius.circular(12),

                                borderSide: BorderSide(color: Colors.white.withOpacity(0.1)),

                              ),

                            ),

                            icon: const Icon(Icons.arrow_drop_down, color: Color(0xFF00F0FF)),

                            items: projectDatabase.keys.map((String key) {

                              return DropdownMenuItem<String>(

                                value: key,

                                child: Text(key),

                              );

                            }).toList(),

                            onChanged: (val) {

                              setState(() {

                                _selectedDomain = val!;

                              });

                            },

                          ),

                        ],

                      ),

                    ),

                    const SizedBox(height: 30),


                    // GENERATE BUTTON

                    GestureDetector(

                      onTap: _isGenerating ? null : _generateIdea,

                      child: AnimatedContainer(

                        duration: const Duration(milliseconds: 200),

                        height: 60,

                        decoration: BoxDecoration(

                          gradient: LinearGradient(

                            colors: _isGenerating

                                ? [Colors.grey, Colors.grey.shade800]

                                : [const Color(0xFF00F0FF), const Color(0xFF7000FF)],

                          ),

                          borderRadius: BorderRadius.circular(30),

                          boxShadow: [

                            if (!_isGenerating)

                              BoxShadow(

                                color: const Color(0xFF00F0FF).withOpacity(0.6),

                                blurRadius: 20,

                                spreadRadius: 0,

                                offset: const Offset(0, 4),

                              ),

                          ],

                        ),

                        child: Center(

                          child: _isGenerating

                              ? const SizedBox(

                                  width: 24,

                                  height: 24,

                                  child: CircularProgressIndicator(

                                    color: Colors.white,

                                    strokeWidth: 2,

                                  ),

                                )

                              : Text(

                                  'INITIALIZE GENERATION',

                                  style: GoogleFonts.orbitron(

                                    color: Colors.white,

                                    fontSize: 16,

                                    fontWeight: FontWeight.bold,

                                    letterSpacing: 1.5,

                                  ),

                                ),

                        ),

                      ),

                    ),

                    const SizedBox(height: 40),


                    // VIEWPORT / RESULT AREA

                    AnimatedSize(

                      duration: const Duration(milliseconds: 300),

                      child: _currentIdea == null && !_isGenerating

                          ? Center(

                              child: Text(

                                'WAITING FOR INPUT...',

                                style: GoogleFonts.robotoMono(

                                  color: Colors.white24,

                                  fontSize: 14,

                                ),

                              ),

                            )

                          : FadeTransition(

                              opacity: _cardController,

                              child: SlideTransition(

                                position: Tween<Offset>(

                                  begin: const Offset(0, 0.1),

                                  end: Offset.zero,

                                ).animate(CurvedAnimation(

                                  parent: _cardController,

                                  curve: Curves.easeOutBack,

                                )),

                                child: _ProjectCard(idea: _currentIdea),

                              ),

                            ),

                    ),

                  ],

                ),

              ),

            ),

          ),

        ],

      ),

    );

  }

}


// ---------------------------------------------------------------------------

// WIDGETS

// ---------------------------------------------------------------------------


class GlassContainer extends StatelessWidget {

  final Widget child;

  final EdgeInsetsGeometry padding;


  const GlassContainer({

    super.key,

    required this.child,

    this.padding = const EdgeInsets.all(24),

  });


  @override

  Widget build(BuildContext context) {

    return ClipRRect(

      borderRadius: BorderRadius.circular(20),

      child: BackdropFilter(

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

        child: Container(

          padding: padding,

          decoration: BoxDecoration(

            color: Colors.white.withOpacity(0.05),

            borderRadius: BorderRadius.circular(20),

            border: Border.all(

              color: Colors.white.withOpacity(0.1),

            ),

          ),

          child: child,

        ),

      ),

    );

  }

}


class _ProjectCard extends StatelessWidget {

  final ProjectIdea? idea;


  const _ProjectCard({required this.idea});


  @override

  Widget build(BuildContext context) {

    if (idea == null) return const SizedBox.shrink();


    return GlassContainer(

      child: Column(

        crossAxisAlignment: CrossAxisAlignment.start,

        children: [

          Row(

            children: [

              const Icon(Icons.lightbulb_outline, color: Color(0xFF00F0FF), size: 28),

              const SizedBox(width: 12),

              Expanded(

                child: Text(

                  idea!.title,

                  style: GoogleFonts.orbitron(

                    fontSize: 20,

                    fontWeight: FontWeight.bold,

                    color: Colors.white,

                  ),

                ),

              ),

            ],

          ),

          const SizedBox(height: 16),

          Text(

            idea!.description,

            style: GoogleFonts.poppins(

              fontSize: 15,

              color: Colors.white70,

              height: 1.5,

            ),

          ),

          const SizedBox(height: 24),

          Text(

            'RECOMMENDED STACK',

            style: GoogleFonts.orbitron(

              fontSize: 10,

              color: const Color(0xFF7000FF),

              fontWeight: FontWeight.bold,

            ),

          ),

          const SizedBox(height: 12),

          Wrap(

            spacing: 8,

            runSpacing: 8,

            children: idea!.techStack.map((tech) {

              return Container(

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

                decoration: BoxDecoration(

                  color: const Color(0xFF7000FF).withOpacity(0.2),

                  borderRadius: BorderRadius.circular(20),

                  border: Border.all(color: const Color(0xFF7000FF).withOpacity(0.5)),

                ),

                child: Text(

                  tech,

                  style: GoogleFonts.robotoMono(

                    fontSize: 12,

                    color: Colors.white,

                  ),

                ),

              );

            }).toList(),

          ),

        ],

      ),

    );

  }

}


// ---------------------------------------------------------------------------

// PAINTERS

// ---------------------------------------------------------------------------

class GridPainter extends CustomPainter {

  @override

  void paint(Canvas canvas, Size size) {

    final paint = Paint()

      ..color = Colors.white.withOpacity(0.03)

      ..strokeWidth = 1;


    const double step = 40;


    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 CustomPainter 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