import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:provider/provider.dart'; import 'shared_preferences_provider.dart'; import 'status_page.dart'; class ProfileScreen extends StatefulWidget { final bool isEditing; const ProfileScreen({super.key, required this.isEditing}); @override ProfileScreenState createState() => ProfileScreenState(); } class ProfileScreenState extends State { final TextEditingController _nameController = TextEditingController(); late String? imageData; final ImagePicker _picker = ImagePicker(); @override void initState() { super.initState(); final prefsProvider = Provider.of(context, listen: false); _nameController.text = prefsProvider.getUserName(); imageData = prefsProvider.getUserLogo(); } Future _pickImage() async { final pickedFile = await _picker.pickImage(source: ImageSource.gallery); if (pickedFile != null) { late final Uint8List imageBytes; if (kIsWeb) { imageBytes = await pickedFile.readAsBytes(); } else { imageBytes = await File(pickedFile.path).readAsBytes(); } setState(() { if (mounted) { final prefsProvider = Provider.of(context, listen: false); prefsProvider .setUserLogo(base64Encode(imageBytes)); // Cache the image imageData = base64Encode(imageBytes); } }); } } void _saveProfile() async { String name = _nameController.text.trim(); if (name.isNotEmpty) { final prefsProvider = Provider.of(context, listen: false); await prefsProvider.setUserName(name); await prefsProvider.setUserLogo(imageData); if (widget.isEditing) { if (mounted) { Navigator.pop(context); // Go back to the Status screen if editing } } else { _navigateToStatusScreen(); // Go to Status screen if this is the initial entry } } else { ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('Name cannot be empty!')), ); return; } } void _navigateToStatusScreen() { Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => const StatusPage()), ); } @override void dispose() { _nameController.dispose(); super.dispose(); } Image getLogoImage(String? logo) { if (logo != null) { return Image.memory(base64Decode(logo)); } else { return Image.asset('assets/default_logo.png'); } } @override Widget build(BuildContext context) { final prefsProvider = Provider.of(context); final userLogo = prefsProvider.getUserLogo(); return Scaffold( appBar: AppBar( title: Text( widget.isEditing ? 'Edit Profile' : 'Enter Your Name and Logo'), backgroundColor: Colors.blueAccent, ), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // Profile Image Display Center( child: CircleAvatar( radius: 50, backgroundImage: getLogoImage(userLogo).image, ), ), const SizedBox(height: 20), TextField( controller: _nameController, decoration: const InputDecoration( labelText: 'Name', border: OutlineInputBorder(), ), ), const SizedBox(height: 20), ElevatedButton( onPressed: _pickImage, child: const Text('Upload Logo'), ), const SizedBox(height: 20), ElevatedButton( onPressed: _saveProfile, child: Text(widget.isEditing ? 'Save Changes' : 'Continue'), ), ], ), ), ); } }