Files
2025-04-06 18:23:35 +01:00

129 lines
3.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:messaging_app/components/messaging_provider.dart';
import 'package:messaging_app/models/users.dart';
import 'package:messaging_app/service/snackbar_service.dart';
import 'package:provider/provider.dart';
// ignore: must_be_immutable
class ProfilePage extends StatelessWidget {
//
final double _deviceHeight;
final double _deviceWidth;
MessagingProviders _auth = MessagingProviders.instance;
ProfilePage(this._deviceHeight, this._deviceWidth, {super.key});
@override
Widget build(BuildContext context) {
return SizedBox(
height: _deviceHeight,
width: _deviceWidth,
child: ChangeNotifierProvider<MessagingProviders>.value(
value: _auth,
child: _profilePageUI(),
),
);
}
Widget _profilePageUI() {
return Builder(builder: (BuildContext _context) {
// assert(_auth.user != null);
SnackBarService.instance.buildContext = _context;
_auth = Provider.of<MessagingProviders>(_context);
return StreamBuilder<User>(
stream: _auth.getUser(_auth.user!.$id),
builder: (_, _snapshot) {
var _userData = _snapshot.data;
return _snapshot.hasData
? Align(
child: SizedBox(
height: _deviceHeight * 0.50,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
_userImageWidget(_userData!.image),
_userNameWidget(_userData.name),
_userEmailWidget(_userData.email),
_logoutButton(),
],
),
),
)
: SpinKitWanderingCubes(
color: Colors.blue,
size: 50.0,
);
});
});
}
Widget _userImageWidget(String _image) {
double _imageRadius = _deviceHeight * 0.20;
return Container(
height: _imageRadius,
width: _imageRadius,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(_imageRadius),
image: DecorationImage(
fit: BoxFit.fill,
image: NetworkImage(_image),
),
),
);
}
Widget _userNameWidget(String _name) {
return SizedBox(
height: _deviceHeight * 0.05,
width: _deviceWidth,
child: Text(
_name,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontSize: 30,
),
),
);
}
Widget _userEmailWidget(String _email) {
return SizedBox(
height: _deviceHeight * 0.03,
width: _deviceWidth,
child: Text(
_email,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white24,
fontSize: 15,
),
),
);
}
Widget _logoutButton() {
return SizedBox(
height: _deviceHeight * 0.06,
width: _deviceWidth * 0.80,
child: MaterialButton(
onPressed: () {
_auth.logout();
},
color: Colors.red,
child: Text(
"logout".toUpperCase(),
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w700,
),
),
),
);
}
}