Files
bookshelf/books_flutter/lib/screens/scanner_screen.dart
Yuriy Panov 5c7b65a0d3 Implement light minimalistic tech redesign with Material 3
Complete transformation from dark to light theme with a professional,
tech-forward design system featuring:

- Material 3 theming with cyan-based color palette (#0891B2 primary)
- Inter font family integration via Google Fonts
- Comprehensive theme system (colors, spacing, typography, shadows)
- Responsive component redesign across all screens
- Enhanced UX with hover animations, Hero transitions, and shimmer loading
- Accessibility features (reduced motion support, high contrast)
- Clean architecture with zero hardcoded values

Theme System:
- Created app_colors.dart with semantic color constants
- Created app_spacing.dart with 8px base spacing scale
- Created app_theme.dart with complete Material 3 configuration
- Added shimmer_loading.dart for image loading states

UI Components Updated:
- Book cards with hover effects and Hero animations
- Bottom navigation with refined styling
- All screens migrated to theme-based colors and typography
- Forms and inputs using consistent design system

Documentation:
- Added REDESIGN_SUMMARY.md with complete implementation overview
- Added IMPLEMENTATION_CHECKLIST.md with detailed task completion status

All components now use centralized theme with no hardcoded values,
ensuring consistency and easy future customization.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-07 13:26:06 +06:00

126 lines
4.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import '../bloc/navigation_bloc.dart';
import '../models/models.dart';
class ScannerScreen extends StatelessWidget {
const ScannerScreen({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: Stack(
children: [
// Camera placeholder
Container(color: Colors.black87),
// Scan frame
Center(
child: FractionallySizedBox(
widthFactor: 0.75,
child: AspectRatio(
aspectRatio: 2 / 3,
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.white30, width: 2),
borderRadius: BorderRadius.circular(12),
),
child: const Center(
child: Text(
'Камера недоступна\n(заглушка)',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white38),
),
),
),
),
),
),
// Header
SafeArea(
child: Padding(
padding: const EdgeInsets.all(8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
IconButton(
icon: const Icon(Icons.close, color: Colors.white),
onPressed: () => context.read<NavigationBloc>().add(
NavigateTo(AppScreen.addBook),
),
),
Container(
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 6,
),
decoration: BoxDecoration(
color: const Color(0xFF17CF54),
borderRadius: BorderRadius.circular(8),
),
child: const Text(
'СКАНЕР',
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 12,
),
),
),
const SizedBox(width: 48),
],
),
),
),
// Instructions
Positioned(
bottom: 140,
left: 0,
right: 0,
child: Text(
'Поместите обложку в рамку',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.grey.shade400),
),
),
// Capture button
Positioned(
bottom: 50,
left: 0,
right: 0,
child: Center(
child: GestureDetector(
onTap: () {
// Placeholder - no actual camera capture
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Камера не подключена (заглушка)'),
),
);
},
child: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.white, width: 4),
),
child: Center(
child: Container(
width: 64,
height: 64,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.white,
),
),
),
),
),
),
),
],
),
);
}
}