chore: Follow up select event
This commit is contained in:
parent
dc2204d8b6
commit
41ae97fb8a
1 changed files with 172 additions and 190 deletions
|
|
@ -10,7 +10,6 @@ import 'package:fluffychat/utils/string_color.dart';
|
||||||
import 'package:fluffychat/widgets/avatar.dart';
|
import 'package:fluffychat/widgets/avatar.dart';
|
||||||
import 'package:fluffychat/widgets/matrix.dart';
|
import 'package:fluffychat/widgets/matrix.dart';
|
||||||
import '../../../config/app_config.dart';
|
import '../../../config/app_config.dart';
|
||||||
import '../../../widgets/hover_builder.dart';
|
|
||||||
import 'message_content.dart';
|
import 'message_content.dart';
|
||||||
import 'message_reactions.dart';
|
import 'message_reactions.dart';
|
||||||
import 'reply_content.dart';
|
import 'reply_content.dart';
|
||||||
|
|
@ -21,10 +20,10 @@ class Message extends StatelessWidget {
|
||||||
final Event event;
|
final Event event;
|
||||||
final Event? nextEvent;
|
final Event? nextEvent;
|
||||||
final bool displayReadMarker;
|
final bool displayReadMarker;
|
||||||
final void Function(Event)? onSelect;
|
final void Function(Event) onSelect;
|
||||||
final void Function(Event)? onAvatarTab;
|
final void Function(Event) onAvatarTab;
|
||||||
final void Function(Event)? onInfoTab;
|
final void Function(Event) onInfoTab;
|
||||||
final void Function(String)? scrollToEventId;
|
final void Function(String) scrollToEventId;
|
||||||
final void Function() onSwipe;
|
final void Function() onSwipe;
|
||||||
final bool longPressSelect;
|
final bool longPressSelect;
|
||||||
final bool selected;
|
final bool selected;
|
||||||
|
|
@ -35,10 +34,10 @@ class Message extends StatelessWidget {
|
||||||
this.nextEvent,
|
this.nextEvent,
|
||||||
this.displayReadMarker = false,
|
this.displayReadMarker = false,
|
||||||
this.longPressSelect = false,
|
this.longPressSelect = false,
|
||||||
this.onSelect,
|
required this.onSelect,
|
||||||
this.onInfoTab,
|
required this.onInfoTab,
|
||||||
this.onAvatarTab,
|
required this.onAvatarTab,
|
||||||
this.scrollToEventId,
|
required this.scrollToEventId,
|
||||||
required this.onSwipe,
|
required this.onSwipe,
|
||||||
this.selected = false,
|
this.selected = false,
|
||||||
required this.timeline,
|
required this.timeline,
|
||||||
|
|
@ -114,21 +113,11 @@ class Message extends StatelessWidget {
|
||||||
: Theme.of(context).colorScheme.primaryContainer;
|
: Theme.of(context).colorScheme.primaryContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
final row = HoverBuilder(
|
final row = Row(
|
||||||
builder: (context, hovered) => Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
mainAxisAlignment: rowMainAxisAlignment,
|
mainAxisAlignment: rowMainAxisAlignment,
|
||||||
children: [
|
children: [
|
||||||
if (hovered || selected)
|
if (sameSender || ownMessage)
|
||||||
SizedBox(
|
|
||||||
width: Avatar.defaultSize,
|
|
||||||
height: Avatar.defaultSize - 8,
|
|
||||||
child: Checkbox.adaptive(
|
|
||||||
value: selected,
|
|
||||||
onChanged: (_) => onSelect?.call(event),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
else if (sameSender || ownMessage)
|
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: Avatar.defaultSize,
|
width: Avatar.defaultSize,
|
||||||
child: Center(
|
child: Center(
|
||||||
|
|
@ -153,7 +142,7 @@ class Message extends StatelessWidget {
|
||||||
return Avatar(
|
return Avatar(
|
||||||
mxContent: user.avatarUrl,
|
mxContent: user.avatarUrl,
|
||||||
name: user.calcDisplayname(),
|
name: user.calcDisplayname(),
|
||||||
onTap: () => onAvatarTab!(event),
|
onTap: () => onAvatarTab(event),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
@ -232,11 +221,8 @@ class Message extends StatelessWidget {
|
||||||
originServerTs: DateTime.now(),
|
originServerTs: DateTime.now(),
|
||||||
);
|
);
|
||||||
return InkWell(
|
return InkWell(
|
||||||
onTap: () {
|
onTap: () =>
|
||||||
if (scrollToEventId != null) {
|
scrollToEventId(replyEvent.eventId),
|
||||||
scrollToEventId!(replyEvent.eventId);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
child: AbsorbPointer(
|
child: AbsorbPointer(
|
||||||
child: Container(
|
child: Container(
|
||||||
margin: const EdgeInsets.symmetric(
|
margin: const EdgeInsets.symmetric(
|
||||||
|
|
@ -292,7 +278,6 @@ class Message extends StatelessWidget {
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
|
||||||
);
|
);
|
||||||
Widget container;
|
Widget container;
|
||||||
if (event.hasAggregatedEvents(timeline, RelationshipTypes.reaction) ||
|
if (event.hasAggregatedEvents(timeline, RelationshipTypes.reaction) ||
|
||||||
|
|
@ -391,10 +376,8 @@ class Message extends StatelessWidget {
|
||||||
),
|
),
|
||||||
direction: SwipeDirection.endToStart,
|
direction: SwipeDirection.endToStart,
|
||||||
onSwipe: (_) => onSwipe(),
|
onSwipe: (_) => onSwipe(),
|
||||||
child: Center(
|
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: longPressSelect ? () => onSelect!(event) : null,
|
onTap: () => onSelect(event),
|
||||||
onLongPress: () => onSelect!(event),
|
|
||||||
child: Container(
|
child: Container(
|
||||||
color: selected
|
color: selected
|
||||||
? Theme.of(context).primaryColor.withAlpha(100)
|
? Theme.of(context).primaryColor.withAlpha(100)
|
||||||
|
|
@ -409,7 +392,6 @@ class Message extends StatelessWidget {
|
||||||
child: container,
|
child: container,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue