52 lines
1.5 KiB
Dart
52 lines
1.5 KiB
Dart
import 'package:famedlysdk/famedlysdk.dart';
|
|
import 'package:fluffychat/components/dialogs/simple_dialogs.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
import '../../l10n/l10n.dart';
|
|
import '../../utils/app_route.dart';
|
|
import '../../views/chat.dart';
|
|
import '../avatar.dart';
|
|
|
|
class PublicRoomListItem extends StatelessWidget {
|
|
final PublicRoomEntry publicRoomEntry;
|
|
|
|
const PublicRoomListItem(this.publicRoomEntry, {Key key}) : super(key: key);
|
|
|
|
void joinAction(BuildContext context) async {
|
|
final success = await SimpleDialogs(context)
|
|
.tryRequestWithLoadingDialog(publicRoomEntry.join());
|
|
if (success != false) {
|
|
await Navigator.of(context).push(
|
|
AppRoute.defaultRoute(
|
|
context,
|
|
ChatView(publicRoomEntry.roomId),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final bool hasTopic =
|
|
publicRoomEntry.topic != null && publicRoomEntry.topic.isNotEmpty;
|
|
return ListTile(
|
|
leading: Avatar(
|
|
publicRoomEntry.avatarUrl == null
|
|
? null
|
|
: Uri.parse(publicRoomEntry.avatarUrl),
|
|
publicRoomEntry.name),
|
|
title: Text(hasTopic
|
|
? "${publicRoomEntry.name} (${publicRoomEntry.numJoinedMembers})"
|
|
: publicRoomEntry.name),
|
|
subtitle: Text(
|
|
hasTopic
|
|
? publicRoomEntry.topic
|
|
: L10n.of(context).countParticipants(
|
|
publicRoomEntry.numJoinedMembers?.toString() ?? "0"),
|
|
maxLines: 1,
|
|
),
|
|
onTap: () => joinAction(context),
|
|
);
|
|
}
|
|
}
|