Files
prosappco/lib/components/general_drawer_header.dart
T
2024-03-13 13:59:33 -05:00

91 lines
2.6 KiB
Dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:prosappco/blocs/my_user_bloc/my_user_bloc.dart';
import 'package:prosappco/screens/city/city_screen.dart';
import 'package:prosappco/screens/profile/profile_screen.dart';
class GeneralDrawerHeader extends StatelessWidget {
const GeneralDrawerHeader({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<MyUserBloc, MyUserState>(
builder: (context, state) {
if (state.status == MyUserStatus.success) {
final user = state.user!;
return ListTile(
onTap: () {
Navigator.push(
context,
CupertinoPageRoute(
builder: (BuildContext context) {
return const ProfileScreen();
// return const CityScreen();
},
),
);
},
title: Text(user.name ?? '',
style: const TextStyle(fontWeight: FontWeight.bold)),
subtitle:
Text(user.drawerLabel, style: const TextStyle(fontSize: 12)),
leading: pictureWidget(user.picture, context),
trailing:
const Icon(Icons.keyboard_arrow_right, color: Colors.black),
contentPadding:
const EdgeInsets.symmetric(vertical: 10, horizontal: 15),
);
} else if (state.status == MyUserStatus.failure) {
return const Text('Error obteniendo datos del usuario');
} else {
return const CircularProgressIndicator();
}
},
);
}
Widget pictureWidget(String? pictureUrl, BuildContext context) {
ImageProvider<Object>? imageProvider;
if (pictureUrl != null && pictureUrl.isNotEmpty) {
imageProvider = NetworkImage(pictureUrl);
}
return Hero(
tag: 'picture-profile',
child: pictureContainerWidget(
imageProvider,
),
);
}
Widget pictureContainerWidget(ImageProvider<Object>? imageProvider) {
final image = imageProvider == null
? null
: DecorationImage(
image: imageProvider,
fit: BoxFit.contain,
);
final widget = image == null
? Icon(
CupertinoIcons.person,
color: Colors.grey.shade400,
size: 40,
)
: null;
return Container(
width: 60,
height: 60,
decoration: BoxDecoration(
color: Colors.grey.shade300,
shape: BoxShape.circle,
image: image,
),
child: widget,
);
}
}