pogdark-app-flutter/lib/profile_screen.dart

148 lines
4.1 KiB
Dart

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<ProfileScreen> {
final TextEditingController _nameController = TextEditingController();
late String? imageData;
final ImagePicker _picker = ImagePicker();
@override
void initState() {
super.initState();
final prefsProvider =
Provider.of<SharedPreferencesProvider>(context, listen: false);
_nameController.text = prefsProvider.getUserName();
imageData = prefsProvider.getUserLogo();
}
Future<void> _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<SharedPreferencesProvider>(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<SharedPreferencesProvider>(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<SharedPreferencesProvider>(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'),
),
],
),
),
);
}
}