From 403454d6b8378d4125ea5d88683b62f573086aaf Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Mon, 7 Feb 2022 15:12:36 -0800 Subject: [PATCH] Add Edit Badge --- lib/views/addeditprofileview.dart | 26 +++++++++++++------------- lib/widgets/profileimage.dart | 23 +++++++++++++++++++---- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/lib/views/addeditprofileview.dart b/lib/views/addeditprofileview.dart index ef398ffd..4a266ce6 100644 --- a/lib/views/addeditprofileview.dart +++ b/lib/views/addeditprofileview.dart @@ -91,10 +91,10 @@ class _AddEditProfileViewState extends State { visible: Provider.of(context).onion.isNotEmpty, child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ MouseRegion( - cursor: Provider.of(context).isExperimentEnabled(ImagePreviewsExperiment) ? SystemMouseCursors.click : SystemMouseCursors.basic, + cursor: Provider.of(context, listen: false).isExperimentEnabled(ImagePreviewsExperiment) ? SystemMouseCursors.click : SystemMouseCursors.basic, child: GestureDetector( // don't allow setting of profile images if the image previews experiment is disabled. - onTap: Provider.of(context).disableFilePicker || !Provider.of(context).isExperimentEnabled(ImagePreviewsExperiment) + onTap: Provider.of(context).disableFilePicker || !Provider.of(context, listen: false).isExperimentEnabled(ImagePreviewsExperiment) ? null : () { filesharing.showFilePicker(context, MaxImageFileSharingSize, (File file) { @@ -112,17 +112,17 @@ class _AddEditProfileViewState extends State { }, () {}); }, child: ProfileImage( - imagePath: Provider.of(context).isExperimentEnabled(ImagePreviewsExperiment) - ? Provider.of(context).imagePath - : Provider.of(context).defaultImagePath, - diameter: 120, - tooltip: - Provider.of(context).isExperimentEnabled(ImagePreviewsExperiment) ? AppLocalizations.of(context)!.tooltipSelectACustomProfileImage : "", - maskOut: false, - border: theme.theme.portraitOnlineBorderColor, - badgeTextColor: Colors.red, - badgeColor: Colors.red, - ))) + imagePath: Provider.of(context).isExperimentEnabled(ImagePreviewsExperiment) + ? Provider.of(context).imagePath + : Provider.of(context).defaultImagePath, + diameter: 120, + tooltip: + Provider.of(context).isExperimentEnabled(ImagePreviewsExperiment) ? AppLocalizations.of(context)!.tooltipSelectACustomProfileImage : "", + maskOut: false, + border: theme.theme.portraitOnlineBorderColor, + badgeTextColor: theme.theme.portraitContactBadgeTextColor, + badgeColor: theme.theme.portraitContactBadgeColor, + badgeEdit: Provider.of(context).isExperimentEnabled(ImagePreviewsExperiment)))) ])), Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ CwtchLabel(label: AppLocalizations.of(context)!.displayNameLabel), diff --git a/lib/widgets/profileimage.dart b/lib/widgets/profileimage.dart index 8cea2c9c..db2c7774 100644 --- a/lib/widgets/profileimage.dart +++ b/lib/widgets/profileimage.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:math'; import 'package:flutter/material.dart'; import 'package:cwtch/themes/opaque.dart'; @@ -8,7 +9,15 @@ import '../settings.dart'; class ProfileImage extends StatefulWidget { ProfileImage( - {required this.imagePath, required this.diameter, required this.border, this.badgeCount = 0, required this.badgeColor, required this.badgeTextColor, this.maskOut = false, this.tooltip = ""}); + {required this.imagePath, + required this.diameter, + required this.border, + this.badgeCount = 0, + required this.badgeColor, + required this.badgeTextColor, + this.maskOut = false, + this.tooltip = "", + this.badgeEdit = false}); final double diameter; final String imagePath; final Color border; @@ -16,6 +25,7 @@ class ProfileImage extends StatefulWidget { final Color badgeColor; final Color badgeTextColor; final bool maskOut; + final bool badgeEdit; final String tooltip; @override @@ -70,14 +80,19 @@ class _ProfileImageState extends State { padding: const EdgeInsets.all(2.0), //border size child: ClipOval(clipBehavior: Clip.antiAlias, child: widget.tooltip == "" ? image : Tooltip(message: widget.tooltip, child: image))))), Visibility( - visible: widget.badgeCount > 0, + visible: widget.badgeEdit || widget.badgeCount > 0, child: Positioned( bottom: 0.0, right: 0.0, child: CircleAvatar( - radius: 10.0, + radius: max(10.0, widget.diameter / 6.0), backgroundColor: widget.badgeColor, - child: Text(widget.badgeCount > 99 ? "99+" : widget.badgeCount.toString(), style: TextStyle(color: widget.badgeTextColor, fontSize: 8.0)), + child: widget.badgeEdit + ? Icon( + Icons.edit, + color: widget.badgeTextColor, + ) + : Text(widget.badgeCount > 99 ? "99+" : widget.badgeCount.toString(), style: TextStyle(color: widget.badgeTextColor, fontSize: 8.0)), ), )), ]));