feat: Enhance TTS player functionality and UI

- Added resume functionality to TTS player when paused.
- Display voice name or language in TTS player UI.
- Improved error handling in reader provider with debug messages.
- Updated TTS service to configure Vietnamese voice and handle platform-specific audio settings.
- Removed wakelock dependency and related code.
- Fixed search screen error handling.
- Updated settings screen to navigate to home after sign out.
- Improved splash screen with timer management.
- Enhanced main app error handling with logging.
- Removed unused package_info_plus and wakelock_plus dependencies.
- Added environment variable support for mobile runtime.
- Integrated Google Sign-In configuration for Android.
- Created logging observer for Riverpod providers.
- Added scripts for environment setup and Google Sign-In validation.
This commit is contained in:
2026-03-30 11:38:04 +07:00
parent 8da9c4152c
commit 1afff18f4d
40 changed files with 1735 additions and 312 deletions
@@ -5,11 +5,28 @@ import 'package:go_router/go_router.dart';
import '../../../app/router/route_names.dart';
import '../providers/auth_provider.dart';
class LoginScreen extends ConsumerWidget {
class LoginScreen extends ConsumerStatefulWidget {
const LoginScreen({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
ConsumerState<LoginScreen> createState() => _LoginScreenState();
}
class _LoginScreenState extends ConsumerState<LoginScreen> {
bool _startedSignIn = false;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
if (!mounted || _startedSignIn) return;
_startedSignIn = true;
ref.read(authProvider.notifier).signInWithGoogle();
});
}
@override
Widget build(BuildContext context) {
final authState = ref.watch(authProvider);
ref.listen<AuthState>(authProvider, (_, next) {
@@ -42,6 +59,16 @@ class LoginScreen extends ConsumerWidget {
Text(errorMsg, style: const TextStyle(color: Colors.red)),
const SizedBox(height: 16),
],
if (authState is AuthLoading) ...[
const SizedBox(
width: 22,
height: 22,
child: CircularProgressIndicator(strokeWidth: 2),
),
const SizedBox(height: 12),
const Text('Đang mở Google Sign-In...'),
const SizedBox(height: 20),
],
FilledButton.icon(
onPressed: isLoading
? null