diff --git a/lib/pages/chat/events/room_creation_state_event.dart b/lib/pages/chat/events/room_creation_state_event.dart index 8cfd0c100..3dbdfb5e0 100644 --- a/lib/pages/chat/events/room_creation_state_event.dart +++ b/lib/pages/chat/events/room_creation_state_event.dart @@ -34,6 +34,7 @@ class RoomCreationStateEvent extends StatelessWidget { name: roomName, // #Pangea presenceUserId: event.room.directChatMatrixID, + useRive: true, // Pangea# size: Avatar.defaultSize * 2, ), diff --git a/lib/pages/chat_list/chat_list_item.dart b/lib/pages/chat_list/chat_list_item.dart index 581f3eaf5..b18b4ce48 100644 --- a/lib/pages/chat_list/chat_list_item.dart +++ b/lib/pages/chat_list/chat_list_item.dart @@ -158,6 +158,7 @@ class ChatListItem extends StatelessWidget { name: space.getLocalizedDisplayname(), // #Pangea presenceUserId: space.directChatMatrixID, + useRive: true, // Pangea# onTap: () => onLongPress?.call(context), ), diff --git a/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart index 40b8fef03..16ada73de 100644 --- a/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart +++ b/lib/pangea/analytics/widgets/analytics_summary/vocab_analytics_popup/vocab_analytics_popup.dart @@ -185,7 +185,17 @@ class LemmaListDialogContent extends StatelessWidget { @override Widget build(BuildContext context) { if (lemmas.isEmpty) { - return Center(child: Text(L10n.of(context).noDataFound)); + return Scaffold( + appBar: AppBar( + title: Text(ProgressIndicatorEnum.wordsUsed.tooltip(context)), + leading: IconButton( + icon: const Icon(Icons.close), + onPressed: Navigator.of(context).pop, + ), + // TODO: add search and training buttons? + ), + body: Center(child: Text(L10n.of(context).noDataFound)), + ); } // Get lists of lemmas by category diff --git a/lib/pangea/bot/widgets/bot_face_svg.dart b/lib/pangea/bot/widgets/bot_face_svg.dart index 10376445f..b9140b5d2 100644 --- a/lib/pangea/bot/widgets/bot_face_svg.dart +++ b/lib/pangea/bot/widgets/bot_face_svg.dart @@ -5,18 +5,22 @@ import 'package:flutter/material.dart'; import 'package:rive/rive.dart'; +import 'package:fluffychat/config/app_config.dart'; + enum BotExpression { gold, nonGold, addled, idle, surprised } class BotFace extends StatefulWidget { final double width; final Color? forceColor; final BotExpression expression; + final bool useRive; const BotFace({ super.key, required this.width, required this.expression, this.forceColor, + this.useRive = true, }); @override @@ -27,17 +31,20 @@ class BotFaceState extends State { Artboard? _artboard; StateMachineController? _controller; final Random _random = Random(); + final String svgURL = "${AppConfig.svgAssetsBaseURL}/bot_face_neutral.png"; @override void initState() { super.initState(); - _loadRiveFile().then((_) => _scheduleNextRun()); + if (widget.useRive) { + _loadRiveFile().then((_) => _scheduleNextRun()); + } } @override void didUpdateWidget(BotFace oldWidget) { super.didUpdateWidget(oldWidget); - if (oldWidget.expression != widget.expression) { + if (widget.useRive && oldWidget.expression != widget.expression) { _controller!.setInputValue( _controller!.stateMachine.inputs[0].id, mapExpressionToInput(widget.expression), @@ -52,6 +59,8 @@ class BotFaceState extends State { } void _scheduleNextRun() { + if (!widget.useRive) return; + final int nextInterval = _random.nextInt(21) + 20; // Random interval between 20-40 seconds @@ -79,6 +88,8 @@ class BotFaceState extends State { } Future _loadRiveFile() async { + if (!widget.useRive) return; + final riveFile = await RiveFile.asset('assets/pangea/bot_faces/pangea_bot.riv'); @@ -111,7 +122,7 @@ class BotFaceState extends State { artboard: _artboard!, fit: BoxFit.cover, ) - : Container(), + : Image.network(svgURL), ); } } diff --git a/lib/widgets/avatar.dart b/lib/widgets/avatar.dart index 91d3b257a..29e05b03e 100644 --- a/lib/widgets/avatar.dart +++ b/lib/widgets/avatar.dart @@ -20,6 +20,9 @@ class Avatar extends StatelessWidget { final BorderRadius? borderRadius; final IconData? icon; final BorderSide? border; + // #Pangea + final bool useRive; + // Pangea# const Avatar({ this.mxContent, @@ -32,6 +35,9 @@ class Avatar extends StatelessWidget { this.borderRadius, this.border, this.icon, + // #Pangea + this.useRive = false, + // Pangea# super.key, }); @@ -83,7 +89,11 @@ class Avatar extends StatelessWidget { child: // #Pangea presenceUserId == BotName.byEnvironment - ? BotFace(width: size, expression: BotExpression.idle) + ? BotFace( + width: size, + expression: BotExpression.idle, + useRive: useRive, + ) : // Pangea# noPic