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
3 changes: 0 additions & 3 deletions android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,3 @@ subprojects {
tasks.register("clean", Delete) {
delete rootProject.buildDir
}



98 changes: 95 additions & 3 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,65 @@
import 'dart:async';
import 'package:audio_recorder/models/api_response.dart';
import 'package:audio_recorder/models/language_model.dart';
import 'package:audio_recorder/models/websocket_config.dart';
import 'package:audio_recorder/pages/login_page.dart';
// import 'package:audio_recorder/pages/login_page.dart';
import 'package:audio_recorder/pages/main_page.dart';
import 'package:audio_recorder/services/storage_service.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

// Create a stream controller to broadcast language changes
final languageChangeController = StreamController<String>.broadcast();

void main() async {
WidgetsFlutterBinding.ensureInitialized();

// Make sure storage is ready before initializing
await StorageService.initialize();

// Initialize API and WebSocket URLs
await OmniAPI.initializeBaseUrl();
await WebSocketConfig.initializeServerUrl();
runApp(const MyApp());

// Initialize language preference
await initializeLanguagePreference();

// Listen for language changes and update currentLanguage
languageChangeController.stream.listen((languageCode) {
if (kDebugMode) {
print("LANGUAGE CHANGE DETECTED: $languageCode");
}
if (Languages.languages.containsKey(languageCode)) {
currentLanguage = Languages.languages[languageCode]!;
}
});

runApp(const LanguageAwareApp());
}

// Initialize the language model based on stored preference
Future<void> initializeLanguagePreference() async {
// Debug current language preferences
await StorageService.debugLanguagePreferences();

final bottomLanguage = await StorageService.getBottomLanguage();
if (kDebugMode) {
print("MAIN: Initializing language with: $bottomLanguage");
}

if (bottomLanguage != null &&
Languages.languages.containsKey(bottomLanguage)) {
currentLanguage = Languages.languages[bottomLanguage]!;
if (kDebugMode) {
print("MAIN: Set current language to: ${currentLanguage.name}");
}
} else {
// Default to English if no language is set or the saved language doesn't exist
currentLanguage = Languages.languages['en']!;
if (kDebugMode) {
print("MAIN: Defaulting to English");
}
}
}

class MyApp extends StatelessWidget {
Expand Down Expand Up @@ -39,7 +91,47 @@ class MyApp extends StatelessWidget {
dynamicSchemeVariant: DynamicSchemeVariant.monochrome,
),
),
home: LoginScreen(),
home: TranslationApp(),
);
}
}

// Add a stateful wrapper that rebuilds when language changes
class LanguageAwareApp extends StatefulWidget {
const LanguageAwareApp({super.key});

@override
State<LanguageAwareApp> createState() => _LanguageAwareAppState();
}

class _LanguageAwareAppState extends State<LanguageAwareApp> {
late StreamSubscription<String> _languageSubscription;

@override
void initState() {
super.initState();
// Listen for language changes and trigger rebuild
_languageSubscription = languageChangeController.stream.listen((_) {
if (mounted) {
setState(() {
// This will rebuild with the new language
if (kDebugMode) {
print(
"APP REBUILD TRIGGERED - CURRENT LANGUAGE: ${currentLanguage.name}");
}
});
}
});
}

@override
void dispose() {
_languageSubscription.cancel();
super.dispose();
}

@override
Widget build(BuildContext context) {
return MyApp();
}
}
3 changes: 1 addition & 2 deletions lib/models/websocket_config.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import 'package:audio_recorder/services/storage_service.dart';

class WebSocketConfig {
static String serverUrl =
'ws://ec2-51-21-138-103.eu-north-1.compute.amazonaws.com:8001/ws/client';
static String serverUrl = 'ws://jenny.coldpeak.co/ws/client';

static Future<void> initializeServerUrl() async {
final savedUrl = await StorageService.getWebsocketUrl();
Expand Down
9 changes: 9 additions & 0 deletions lib/pages/login_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,9 @@ class _LoginScreenState extends State<LoginScreen> {
_loginPasswordController.text,
);

// Restore any previously saved language preferences
await StorageService.restoreLanguagePreferences();

if (mounted) {
// Show success message
ScaffoldMessenger.of(context).showSnackBar(
Expand Down Expand Up @@ -309,6 +312,12 @@ class _LoginScreenState extends State<LoginScreen> {
_signupPasswordController.text,
);

// For new users, set their selected signup language as the bottom language preference
await StorageService.saveBottomLanguagePreference(_selectedLanguage);

// But also restore any other preserved preferences (top language, full sentence mode)
await StorageService.restoreLanguagePreferences();

if (mounted) {
// Show success message
ScaffoldMessenger.of(context).showSnackBar(
Expand Down
Loading