Skip to content

Commit

Permalink
feat: added reusable widget to show user's public language and level,…
Browse files Browse the repository at this point in the history
… added to participant list items
  • Loading branch information
ggurdin committed Feb 21, 2025
1 parent 62d5a71 commit 121f50c
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/pages/chat_details/participant_list_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:matrix/matrix.dart';

import 'package:fluffychat/config/app_config.dart';
import 'package:fluffychat/pangea/analytics_misc/level_display_name.dart';
import 'package:fluffychat/utils/adaptive_bottom_sheet.dart';
import '../../widgets/avatar.dart';
import '../user_bottom_sheet/user_bottom_sheet.dart';
Expand Down Expand Up @@ -49,6 +50,9 @@ class ParticipantListItem extends StatelessWidget {
overflow: TextOverflow.ellipsis,
),
),
// #Pangea
LevelDisplayName(userId: user.id),
// Pangea#
if (permissionBatch.isNotEmpty)
Container(
padding: const EdgeInsets.symmetric(
Expand Down
79 changes: 79 additions & 0 deletions lib/pangea/analytics_misc/level_display_name.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import 'package:flutter/material.dart';

import 'package:fluffychat/pangea/user/models/profile_model.dart';
import 'package:fluffychat/widgets/matrix.dart';

class LevelDisplayName extends StatefulWidget {
final String userId;
const LevelDisplayName({
required this.userId,
super.key,
});

@override
State<LevelDisplayName> createState() => LevelDisplayNameState();
}

class LevelDisplayNameState extends State<LevelDisplayName> {
PublicProfileModel? _profile;
bool _loading = true;
String? _error;

@override
void initState() {
super.initState();
_fetchProfile();
}

Future<void> _fetchProfile() async {
try {
final userController = MatrixState.pangeaController.userController;
_profile = await userController.getPublicProfile(widget.userId);
} catch (e) {
_error = e.toString();
} finally {
if (mounted) setState(() => _loading = false);
}
}

@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(
horizontal: 8.0,
vertical: 4.0,
),
child: Row(
children: <Widget>[
if (_loading)
const CircularProgressIndicator()
else if (_error != null || _profile == null)
const SizedBox()
else
Row(
spacing: 4.0,
children: [
if (_profile?.targetLanguage != null)
Text(
_profile!.targetLanguage!.langCode.toUpperCase(),
style: TextStyle(
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
),
),
if (_profile?.level != null) const Text("⭐"),
if (_profile?.level != null)
Text(
"${_profile!.level!}",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
),
),
],
),
],
),
);
}
}

0 comments on commit 121f50c

Please sign in to comment.