81 lines
3.1 KiB
Dart
81 lines
3.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'dart:convert';
|
|
import 'package:image_picker/image_picker.dart';
|
|
|
|
class UserFormScreen extends StatefulWidget {
|
|
@override
|
|
_UserFormScreenState createState() => _UserFormScreenState();
|
|
}
|
|
|
|
class _UserFormScreenState extends State<UserFormScreen> {
|
|
final _formKey = GlobalKey<FormState>();
|
|
String _username = '', _email = '', _location = '';
|
|
String? _profileImage;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: AppBar(title: Text('User Details')),
|
|
body: Padding(
|
|
padding: EdgeInsets.all(16),
|
|
child: Form(
|
|
key: _formKey,
|
|
child: Column(
|
|
children: [
|
|
GestureDetector(
|
|
onTap: () async {
|
|
final picked = await ImagePicker().pickImage(source: ImageSource.gallery);
|
|
if (picked != null) {
|
|
final bytes = await picked.readAsBytes();
|
|
String base64Image = base64Encode(bytes);
|
|
setState(() { _profileImage = base64Image; });
|
|
}
|
|
},
|
|
child: CircleAvatar(
|
|
radius: 50,
|
|
backgroundColor: Colors.grey[300],
|
|
backgroundImage: _profileImage != null ? MemoryImage(base64Decode(_profileImage!)) : null,
|
|
child: _profileImage == null ? Icon(Icons.person, size: 50, color: Colors.white) : null,
|
|
),
|
|
),
|
|
SizedBox(height: 16),
|
|
TextFormField(
|
|
decoration: InputDecoration(labelText: 'Username'),
|
|
validator: (value) => value!.isEmpty ? 'Please enter a username' : null,
|
|
onSaved: (value) => _username = value!,
|
|
),
|
|
TextFormField(
|
|
decoration: InputDecoration(labelText: 'Email'),
|
|
validator: (value) => value!.isEmpty ? 'Please enter an email' : null,
|
|
onSaved: (value) => _email = value!,
|
|
),
|
|
TextFormField(
|
|
decoration: InputDecoration(labelText: 'Location'),
|
|
validator: (value) => value!.isEmpty ? 'Please enter a location' : null,
|
|
onSaved: (value) => _location = value!,
|
|
),
|
|
SizedBox(height: 20),
|
|
ElevatedButton(
|
|
child: Text('Submit'),
|
|
onPressed: () async {
|
|
if (_formKey.currentState!.validate()) {
|
|
_formKey.currentState!.save();
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setString('username', _username);
|
|
await prefs.setString('email', _email);
|
|
await prefs.setString('location', _location);
|
|
if (_profileImage != null) {
|
|
await prefs.setString('profileImage', _profileImage!);
|
|
}
|
|
Navigator.pushReplacementNamed(context, '/home');
|
|
}
|
|
},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
} |