Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
Empty file added edu_play/assets/images/.gitkeep
Empty file.
95 changes: 71 additions & 24 deletions edu_play/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,39 +1,86 @@
import 'package:edu_play/screens/onboarding_screen.dart';
import 'package:edu_play/models/project.dart';
import 'package:edu_play/screens/analyzing_screen.dart';
import 'package:edu_play/screens/dashboard_screen.dart';
import 'package:edu_play/screens/editor_screen.dart';
import 'package:edu_play/screens/export_screen.dart';
import 'package:edu_play/services/project_provider.dart';
import 'package:edu_play/utils/app_theme.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:hive_flutter/hive_flutter.dart';
import 'package:provider/provider.dart';

void main() {
runApp(const MyApp());
void main() async {
WidgetsFlutterBinding.ensureInitialized();

// Initialize Hive
await Hive.initFlutter();

// Register Adapters
Hive.registerAdapter(ProjectAdapter());
Hive.registerAdapter(TranscriptionWordAdapter());
Hive.registerAdapter(AspectRatioTypeAdapter());

final projectProvider = ProjectProvider();
await projectProvider.init();

runApp(
MultiProvider(
providers: [
ChangeNotifierProvider.value(value: projectProvider),
],
child: const MyApp(),
),
);
}

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

// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'EduPlay',
theme: ThemeData(
// Define the default brightness and colors.
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF3B82F6), // Primary: Sky Blue
primary: const Color(0xFF3B82F6),
secondary: const Color(0xFFFACC15), // Accent: Warm Yellow
error: const Color(0xFFF87171), // Secondary: Coral Red
// Other colors can be defined here as needed
),
title: 'LinguaClip',
theme: AppTheme.darkTheme,
home: const DashboardScreen(),
debugShowCheckedModeBanner: false,
onGenerateRoute: (settings) {
if (settings.name == '/analyzing') {
final project = settings.arguments as Project;
return MaterialPageRoute(builder: (_) => AnalyzingScreen(project: project));
}
if (settings.name == '/editor') {
final project = settings.arguments as Project;
return MaterialPageRoute(builder: (_) => EditorScreen(project: project));
}
if (settings.name == '/export') {
final project = settings.arguments as Project;
return MaterialPageRoute(builder: (_) => ExportScreen(project: project));
}
return null;
},
);
}
}

// Define the default font family.
textTheme: GoogleFonts.nunitoTextTheme(
Theme.of(context).textTheme,
),
class PlaceholderScreen extends StatelessWidget {
const PlaceholderScreen({super.key});

// Use Material 3 design.
useMaterial3: true,
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'LINGUACLIP',
style: Theme.of(context).textTheme.displayLarge,
),
const SizedBox(height: 20),
const CircularProgressIndicator(color: AppTheme.linguaGold),
],
),
),
home: const OnboardingScreen(),
debugShowCheckedModeBanner: false,
);
}
}
}
77 changes: 77 additions & 0 deletions edu_play/lib/models/project.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import 'package:hive/hive.dart';

part 'project.g.dart';

@HiveType(typeId: 0)
enum AspectRatioType {
@HiveField(0)
tiktok, // 9:16
@HiveField(1)
youtube, // 16:9
@HiveField(2)
instagram // 1:1
}

@HiveType(typeId: 1)
class Project extends HiveObject {
@HiveField(0)
String id;

@HiveField(1)
String name;

@HiveField(2)
String imagePath;

@HiveField(3)
String audioPath;

@HiveField(4)
AspectRatioType aspectRatio;

@HiveField(5)
DateTime createdAt;

@HiveField(6)
List<TranscriptionWord>? transcript;

@HiveField(7)
Map<String, String>? settings; // for font size, position etc.

Project({
required this.id,
required this.name,
required this.imagePath,
required this.audioPath,
required this.aspectRatio,
required this.createdAt,
this.transcript,
this.settings,
});
}

@HiveType(typeId: 2)
class TranscriptionWord {
@HiveField(0)
String text;

@HiveField(1)
Duration startTime;

@HiveField(2)
Duration endTime;

@HiveField(3)
bool isSmartWord;

@HiveField(4)
String? definition;

TranscriptionWord({
required this.text,
required this.startTime,
required this.endTime,
this.isSmartWord = false,
this.definition,
});
}
152 changes: 152 additions & 0 deletions edu_play/lib/models/project.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 0 additions & 15 deletions edu_play/lib/screens/admin_dashboard_screen.dart

This file was deleted.

Loading