fluffychat/lib/components/avatar.dart

60 lines
1.7 KiB
Dart
Raw Normal View History

2020-01-01 19:10:13 +01:00
import 'package:famedlysdk/famedlysdk.dart';
2020-10-04 16:11:18 +02:00
import 'package:fluffychat/utils/platform_infos.dart';
2020-01-18 13:22:22 +01:00
import 'package:fluffychat/utils/string_color.dart';
2020-01-01 19:10:13 +01:00
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
2020-09-07 17:08:01 +02:00
import 'package:cached_network_image/cached_network_image.dart';
2020-01-01 19:10:13 +01:00
import 'matrix.dart';
class Avatar extends StatelessWidget {
2020-04-28 14:11:56 +02:00
final Uri mxContent;
2020-01-18 13:22:22 +01:00
final String name;
2020-01-01 19:10:13 +01:00
final double size;
final Function onTap;
2020-03-13 21:42:05 +01:00
static const double defaultSize = 44;
2020-01-01 19:10:13 +01:00
2020-03-13 21:42:05 +01:00
const Avatar(
this.mxContent,
this.name, {
this.size = defaultSize,
this.onTap,
Key key,
}) : super(key: key);
2020-01-01 19:10:13 +01:00
@override
Widget build(BuildContext context) {
2020-05-13 15:58:59 +02:00
var thumbnail = mxContent?.getThumbnail(
2020-01-01 19:10:13 +01:00
Matrix.of(context).client,
width: size * MediaQuery.of(context).devicePixelRatio,
height: size * MediaQuery.of(context).devicePixelRatio,
method: ThumbnailMethod.scale,
);
2020-05-13 15:58:59 +02:00
final src = thumbnail;
var fallbackLetters = '@';
2020-01-18 13:22:22 +01:00
if ((name?.length ?? 0) >= 2) {
fallbackLetters = name.substring(0, 2);
} else if ((name?.length ?? 0) == 1) {
fallbackLetters = name;
}
2020-05-01 12:14:49 +02:00
final noPic = mxContent == null || mxContent.toString().isEmpty;
return InkWell(
onTap: onTap,
child: CircleAvatar(
radius: size / 2,
2020-10-04 16:11:18 +02:00
backgroundImage: !noPic
? PlatformInfos.isBetaDesktop
? NetworkImage(src)
: CachedNetworkImageProvider(src)
: null,
2020-05-01 12:14:49 +02:00
backgroundColor: noPic
2020-06-25 09:15:53 +02:00
? name?.lightColor ?? Theme.of(context).secondaryHeaderColor
2020-01-19 15:07:42 +01:00
: Theme.of(context).secondaryHeaderColor,
2020-05-01 12:14:49 +02:00
child: noPic
2020-01-18 13:22:22 +01:00
? Text(fallbackLetters, style: TextStyle(color: Colors.white))
: null,
),
2020-01-01 19:10:13 +01:00
);
}
}