- import 'dart:io';
-
- import 'package:flutter/material.dart';
-
- enum AvatarTypes {
- initials,
- icon,
- image,
- }
-
- class CustomCircleAvatar extends StatelessWidget {
- final String? initials;
- final Icon? icon;
- final File? image;
- final Function ()? editImageCallback;
- final double radius;
-
- const CustomCircleAvatar({
- Key? key,
- this.initials,
- this.icon,
- this.image,
- this.editImageCallback,
- this.radius = 20,
- }) : super(key: key);
-
- Widget avatar() {
- AvatarTypes? type;
-
- if (icon != null) {
- type = AvatarTypes.icon;
- }
-
- if (initials != null) {
- type = AvatarTypes.initials;
- }
-
- if (image != null) {
- type = AvatarTypes.image;
- }
-
- if (type == null) {
- throw ArgumentError('Invalid arguments passed to CustomCircleAvatar');
- }
-
- if (type == AvatarTypes.initials) {
- return CircleAvatar(
- backgroundColor: Colors.grey[300],
- child: Text(initials!),
- radius: radius,
- );
- }
-
- if (type == AvatarTypes.icon) {
- return CircleAvatar(
- backgroundColor: Colors.grey[300],
- child: icon,
- radius: radius,
- );
- }
-
- return Container(
- width: radius * 2,
- height: radius * 2,
- decoration: BoxDecoration(
- shape: BoxShape.circle,
- image: DecorationImage(
- image: Image.file(image!).image,
- fit: BoxFit.fill
- ),
- ),
- );
- }
-
- Widget editIcon(BuildContext context) {
- if (editImageCallback == null) {
- return const SizedBox.shrink();
- }
-
- return SizedBox(
- height: (radius * 2),
- width: (radius * 2),
- child: Align(
- alignment: Alignment.bottomRight,
- child: GestureDetector(
- onTap: editImageCallback,
- child: Container(
- height: (radius / 2) + (radius / 7),
- width: (radius / 2) + (radius / 7),
- decoration: BoxDecoration(
- color: Theme.of(context).scaffoldBackgroundColor,
- borderRadius: BorderRadius.circular(30),
- ),
- child: Icon(
- Icons.add,
- color: Theme.of(context).primaryColor,
- size: radius / 2
- ),
- ),
- ),
- ),
- );
- }
-
- @override
- Widget build(BuildContext context) {
- return Stack(
- children: [
- avatar(),
- editIcon(context),
- ]
- );
- }
- }
|