96 lines
752 KiB
Dart
96 lines
752 KiB
Dart
|
import 'dart:convert';
|
||
|
import 'package:flutter/cupertino.dart';
|
||
|
import 'package:flutter/material.dart';
|
||
|
import 'package:lamiter/Extension/build_context.dart';
|
||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||
|
import 'package:lamiter/Provider/Language/language_provider.dart';
|
||
|
import 'package:provider/provider.dart';
|
||
|
|
||
|
class MyCircleAvator extends StatelessWidget {
|
||
|
final String name;
|
||
|
final String? photo;
|
||
|
final bool? gender;
|
||
|
final double radius;
|
||
|
final List<Widget>? actions;
|
||
|
|
||
|
const MyCircleAvator({
|
||
|
super.key,
|
||
|
required this.name,
|
||
|
this.photo,
|
||
|
this.gender,
|
||
|
required this.radius,
|
||
|
this.actions,
|
||
|
});
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
final languageProvider = Provider.of<LanguageProvider>(context);
|
||
|
|
||
|
Widget _familyNameCircleAvatar(backgroundColor, style) {
|
||
|
return CircleAvatar(
|
||
|
radius: radius,
|
||
|
backgroundColor: backgroundColor,
|
||
|
child: Text(
|
||
|
languageProvider.getLocaleString(name.isEmpty ? '訪' : name[0]),
|
||
|
style: style,
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
Widget _photoCircleAvatar(String img64) {
|
||
|
return Container(
|
||
|
width: radius * 2,
|
||
|
height: radius * 2,
|
||
|
decoration: BoxDecoration(
|
||
|
shape: BoxShape.circle,
|
||
|
image: DecorationImage(
|
||
|
image: MemoryImage(base64Decode(img64)),
|
||
|
fit: BoxFit.cover,
|
||
|
// alignment: FractionalOffset(0, (0 / 1000) * -1),
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
Widget returnCircleAvatar() {
|
||
|
return photo == null && gender == null
|
||
|
? _familyNameCircleAvatar(
|
||
|
context.inverseSurface,
|
||
|
TextStyle(
|
||
|
color: context.surface,
|
||
|
fontSize: radius * 0.75,
|
||
|
fontWeight: FontWeight.bold,
|
||
|
),
|
||
|
)
|
||
|
: _photoCircleAvatar(
|
||
|
photo ?? (gender! ? maleDefaultImage : femaleDefaultImage));
|
||
|
}
|
||
|
|
||
|
return actions == null || actions!.isEmpty
|
||
|
? returnCircleAvatar()
|
||
|
: GestureDetector(
|
||
|
onTap: () {
|
||
|
showCupertinoModalPopup(
|
||
|
context: context,
|
||
|
builder: (BuildContext context) => CupertinoActionSheet(
|
||
|
actions: actions,
|
||
|
cancelButton: CupertinoActionSheetAction(
|
||
|
isDefaultAction: true,
|
||
|
child: Text(AppLocalizations.of(context).cancel),
|
||
|
onPressed: () {
|
||
|
Navigator.pop(context);
|
||
|
},
|
||
|
),
|
||
|
),
|
||
|
);
|
||
|
},
|
||
|
child: returnCircleAvatar(),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
final maleDefaultImage =
|
||
|
'/9j/4AAQSkZJRgABAgAAZABkAAD/4QCwRXhpZgAATU0AKgAAAAgAAwEOAAIAAABXAAAAMgESAAMAAAABAAEAAIdpAAQAAAABAAAAigAAAABQaWN0dXJlIHByb2ZpbGUgaWNvbi4gTWFsZSBpY29uLiBIdW1hbiBvciBwZW9wbGUgc2lnbiBhbmQgc3ltYm9sLiBWZWN0b3IgaWxsdXN0cmF0aW9uLgAAAAKQAAAHAAAABDAyMzGgAQADAAAAAf//AAAAAAAA/+ETU2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9IkRCN0Q3MEEwQTk0OTY2NTE2OTQ0RkZCNjExNDQ1NjA4IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9IkRCN0Q3MEEwQTk0OTY2NTE2OTQ0RkZCNjExNDQ1NjA4IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBiYmVmMzY1LTNjY2ItNTg0ZS1iODYxLTk5NzA5NTliNWM2ZCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTA5LTE3VDIwOjA5OjUyKzA3OjAwIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NGFmNDRhNWYtOWEyMC1kMzQzLWI5YjAtN2VkOWM4Y2NmYjVhIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTE3VDIwOjA5OjUyKzA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ2FtZXJhIFJhdyAxMi40IiBzdEV2dDpjaGFuZ2VkPSIvbWV0YWRhdGEiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjBiYmVmMzY1LTNjY2ItNTg0ZS1iODYxLTk5NzA5NTliNWM2ZCIgc3RFdnQ6d2hlbj0iMjAyMC0wOS0xN1QyMDowOTo1MiswNzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENhbWVyYSBSYXcgMTIuNCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii9tZXRhZGF0YSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPGRjOmRlc2NyaXB0aW9uPiA8cmRmOkFsdD4gPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5QaWN0dXJlIHByb2ZpbGUgaWNvbi4gTWFsZSBpY29uLiBIdW1hbiBvciBwZW9wbGUgc2lnbiBhbmQgc3ltYm9sLiBWZWN0b3IgaWxsdXN0cmF0aW9uLjwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6ZGVzY3JpcHRpb24+IDxkYzpzdWJqZWN0PiA8cmRmOkJhZz4gPHJkZjpsaT5wcm9maWxlPC9yZGY6bGk+IDxyZGY6bGk+Ymxhbms8L3JkZjpsaT4gPHJkZjpsaT5waWM8L3JkZjpsaT4gPHJkZjpsaT5waWN0dXJlPC9yZGY6bGk+IDxyZGY6bGk+aGVhZDwvcmRmOmxpPiA8cmRmOmxpPmljb248L3JkZjpsaT4gPHJkZjpsaT50aHVtYm5haWw8L3JkZjpsaT4gPHJkZjpsaT5waG90b2dyYXBoPC9yZGY6bGk+IDxyZGY6bGk+dmVjdG9yPC9yZGY6bGk+IDxyZGY6bGk+YW5vbnltb3VzPC9yZGY6bGk+IDxyZGY6bGk+YXZhdGFyPC9yZGY6bGk+IDxyZGY6bGk+Y29udGVudDwvcmRmOmxpPiA8cmRmOmxpPmRlZmF1bHQ8L3JkZjpsaT4gPHJkZjpsaT5kZXNpZ248L3JkZjpsaT4gPHJkZjpsaT5kaWdpdGFsPC9yZGY6bGk+IDxyZGY6bGk+ZGlzcGxheTwvcmRmOmxpPiA8cmRmOmxpPmVsZW1lbnQ8L3JkZjpsaT4gPHJkZjpsaT5mYWNlbGVzczwvcmRmOmxpPiA8cmRmOmxpPmZpbG08L3JkZjpsaT4gPHJkZjpsaT5mcmFtZTwvcmRmOmxpPiA8cmRmOmxpPmdyYXBoaWM8L3JkZjpsaT4gPHJkZjpsaT5ncmF5PC9yZGY6bGk+IDxyZGY6bGk+Z3V5PC9yZGY6bGk+IDxyZGY6bGk+aHVtYW48L3JkZjpsaT4gPHJkZjpsaT5pbGx1c3RyYXRpb248L3JkZjpsaT4gPHJkZjpsaT5pbWFnZTwvcmRmOmxpPiA8cmRmOmxpPmludGVybmV0PC9yZGY6bGk+IDxyZGY6bGk+bWFsZTwvcmRmOmxpPiA8cmRmOmxpPm1hbjwvcmRmOmxpPiA8cmRmOmxpPm1lbWJlcjwvcmRmOmxpPiA8cmRmOmxpPm11bHRpbWVkaWE8L3JkZjpsaT4gPHJkZjpsaT5uZXR3b3JrPC9yZGY6bGk+IDxyZGY6bGk+b3V0bGluZTwvcmRmOmxpPiA8cmRmOmxpPnBhZ2U8L3JkZjpsaT4gPHJkZjpsaT5wZW9wbGU8L3JkZjpsaT4gPHJkZjpsaT5wZXJzb248L3JkZjpsaT4gPHJkZjpsaT5waG90bzwvcmRmOmxpPiA8cmRmOmxpPnBob3RvZ3JhcGhlcjwvcmRmOmxpPiA8cmRmOmxpPnBob3RvZ3JhcGhpYzwvcmRmOmxpPiA8cmRmOmxpPnBob3RvZ3JhcGh5PC9yZGY6bGk+IDxyZGY6bGk+cG9ydHJhaXQ8L3JkZjpsaT4gPHJkZjpsaT5zaWduPC9yZGY6bGk+IDxyZGY6bGk+c2lsaG91ZXR0ZTwvcmRmOmxpPiA8cmRmOmxpPnNvY2lhbDwvcmRmOmxpPiA8cmRmOmxpPnN5bWJvbDwvcmRmOmxpPiA8cmRmOmxpPnN5bWJvbGljPC9yZGY6bGk+IDxyZGY6bGk+dXBsb2FkaW5nPC9yZGY6bGk+IDxyZGY6bGk+dXNlcjwvcmRmOmxpPiA8cmRmOmxpPndlYnNpdGU8L3JkZjpsaT4gPHJkZjpsaT53aG88L3JkZjpsaT4gPC9yZGY6QmFnPiA8L2RjOnN1YmplY3Q+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+UGljdHVyZSBwcm9maWxlIGljb24uIE1hbGUgaWNvbi4gSHVtYW4gb3IgcGVvcGxlIHNpZ24gYW5kIHN5bWJvbC4gVmVjdG9yLjwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6dGl0bGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+
|
||
|
final femaleDefaultImage =
|
||
|
'/9j/4AAQSkZJRgABAgAAZABkAAD/4QC4RXhpZgAATU0AKgAAAAgAAwEOAAIAAABgAAAAMgESAAMAAAABAAEAAIdpAAQAAAABAAAAkgAAAABXb21hbiBpY29uIGZvciB1c2VyIHByb2ZpbGUuIEZlbWFsZSBpY29uLiBIdW1hbiBvciBwZW9wbGUgc2lnbiBhbmQgc3ltYm9sLiBWZWN0b3IgaWxsdXN0cmF0aW9uLgAAApAAAAcAAAAEMDIzMaABAAMAAAAB//8AAAAAAAD/4RNyaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzE0MCA3OS4xNjA0NTEsIDIwMTcvMDUvMDYtMDE6MDg6MjEgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1wTU06RG9jdW1lbnRJRD0iRTY5MzkzQjVGMjkxNjlCREE1RDU3RjU2RDJGQTdGMzciIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0iRTY5MzkzQjVGMjkxNjlCREE1RDU3RjU2RDJGQTdGMzciIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N2ZhOTg3NTctYzI4NS04OTRlLTljNjQtYzBkY2M2N2QxZGNmIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhtcDpNZXRhZGF0YURhdGU9IjIwMjAtMDktMTdUMjE6MDU6NDArMDc6MDAiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmYTIwZWZmYi1mYThkLTZkNDEtOTBiMS00OThmMDVmNWE3NDIiIHN0RXZ0OndoZW49IjIwMjAtMDktMTdUMjE6MDU6NDArMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDYW1lcmEgUmF3IDEyLjQiIHN0RXZ0OmNoYW5nZWQ9Ii9tZXRhZGF0YSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6N2ZhOTg3NTctYzI4NS04OTRlLTljNjQtYzBkY2M2N2QxZGNmIiBzdEV2dDp3aGVuPSIyMDIwLTA5LTE3VDIxOjA1OjQwKzA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ2FtZXJhIFJhdyAxMi40IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iL21ldGFkYXRhIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8ZGM6ZGVzY3JpcHRpb24+IDxyZGY6QWx0PiA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPldvbWFuIGljb24gZm9yIHVzZXIgcHJvZmlsZS4gRmVtYWxlIGljb24uIEh1bWFuIG9yIHBlb3BsZSBzaWduIGFuZCBzeW1ib2wuIFZlY3RvciBpbGx1c3RyYXRpb24uPC9yZGY6bGk+IDwvcmRmOkFsdD4gPC9kYzpkZXNjcmlwdGlvbj4gPGRjOnN1YmplY3Q+IDxyZGY6QmFnPiA8cmRmOmxpPmFic3RyYWN0PC9yZGY6bGk+IDxyZGY6bGk+YWRtaW5pc3RyYXRvcjwvcmRmOmxpPiA8cmRmOmxpPmFzc29jaWF0ZTwvcmRmOmxpPiA8cmRmOmxpPmF2YXRhcjwvcmRmOmxpPiA8cmRmOmxpPmJhY2tncm91bmQ8L3JkZjpsaT4gPHJkZjpsaT5idXNpbmVzczwvcmRmOmxpPiA8cmRmOmxpPmJ1c2luZXNzbWFuPC9yZGY6bGk+IDxyZGY6bGk+Y3VzdG9tZXI8L3JkZjpsaT4gPHJkZjpsaT5kZWZhdWx0PC9yZGY6bGk+IDxyZGY6bGk+ZW1wbG95ZWU8L3JkZjpsaT4gPHJkZjpsaT5lbXBsb3llcjwvcmRmOmxpPiA8cmRmOmxpPmZlbWFsZTwvcmRmOmxpPiA8cmRmOmxpPmZpZ3VyZTwvcmRmOmxpPiA8cmRmOmxpPmZyaWVuZDwvcmRmOmxpPiA8cmRmOmxpPmdpcmw8L3JkZjpsaT4gPHJkZjpsaT5ncmFwaGljPC9yZGY6bGk+IDxyZGY6bGk+Z3V5PC9yZGY6bGk+IDxyZGY6bGk+aHVtYW48L3JkZjpsaT4gPHJkZjpsaT5pY29uPC9yZGY6bGk+IDxyZGY6bGk+aWxsdXN0cmF0aW9uPC9yZGY6bGk+IDxyZGY6bGk+aW1hZ2U8L3JkZjpsaT4gPHJkZjpsaT5pbnRlcm5ldDwvcmRmOmxpPiA8cmRmOmxpPmlzb2xhdGVkPC9yZGY6bGk+IDxyZGY6bGk+bGVhZGVyPC9yZGY6bGk+IDxyZGY6bGk+bG9nbzwvcmRmOmxpPiA8cmRmOmxpPm1hbGU8L3JkZjpsaT4gPHJkZjpsaT5tYW48L3JkZjpsaT4gPHJkZjpsaT5tYW5hZ2VyPC9yZGY6bGk+IDxyZGY6bGk+bWVtYmVyPC9yZGY6bGk+IDxyZGY6bGk+bXVsdGltZWRpYTwvcmRmOmxpPiA8cmRmOmxpPm5ldHdvcms8L3JkZjpsaT4gPHJkZjpsaT5wZW9wbGU8L3JkZjpsaT4gPHJkZjpsaT5wZXJzb248L3JkZjpsaT4gPHJkZjpsaT5waG90bzwvcmRmOmxpPiA8cmRmOmxpPnBob3RvZ3JhcGg8L3JkZjpsaT4gPHJkZjpsaT5waG90b2dyYXBoZXI8L3JkZjpsaT4gPHJkZjpsaT5waG90b2dyYXBoeTwvcmRmOmxpPiA8cmRmOmxpPnBpY3R1cmU8L3JkZjpsaT4gPHJkZjpsaT5wb3J0cmFpdDwvcmRmOmxpPiA8cmRmOmxpPnByb2ZpbGU8L3JkZjpsaT4gPHJkZjpsaT5zaGFwZTwvcmRmOmxpPiA8cmRmOmxpPnNpZ248L3JkZjpsaT4gPHJkZjpsaT5zb2NpYWw8L3JkZjpsaT4gPHJkZjpsaT5zeW1ib2w8L3JkZjpsaT4gPHJkZjpsaT5zeW1ib2xpYzwvcmRmOmxpPiA8cmRmOmxpPnVzZXI8L3JkZjpsaT4gPHJkZjpsaT52ZWN0b3I8L3JkZjpsaT4gPHJkZjpsaT53ZWI8L3JkZjpsaT4gPHJkZjpsaT53ZWJzaXRlPC9yZGY6bGk+IDxyZGY6bGk+d29tYW48L3JkZjpsaT4gPC9yZGY6QmFnPiA8L2RjOnN1YmplY3Q+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+V29tYW4gaWNvbiBmb3IgdXNlciBwcm9maWxlLiBGZW1hbGUgaWNvbi4gSHVtYW4gb3IgcGVvcGxlIHNpZ24gYW5kIHN5bWJvbC4gVmVjdG9yLjwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwv
|
||
|
}
|