FurryChat/lib/components/list_items/public_room_list_item.dart

69 lines
2.1 KiB
Dart
Raw Normal View History

2020-02-22 19:05:04 +00:00
import 'package:famedlysdk/famedlysdk.dart';
2020-06-10 08:07:01 +00:00
import 'package:famedlysdk/matrix_api.dart';
2020-02-22 19:05:04 +00:00
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
2020-02-22 19:05:04 +00:00
import '../../utils/app_route.dart';
import '../../views/chat.dart';
import '../avatar.dart';
2020-10-15 13:51:24 +00:00
import '../dialogs/simple_dialogs.dart';
2020-06-10 08:07:01 +00:00
import '../matrix.dart';
2020-02-22 19:05:04 +00:00
class PublicRoomListItem extends StatelessWidget {
2020-06-10 08:07:01 +00:00
final PublicRoom publicRoomEntry;
2020-02-22 19:05:04 +00:00
const PublicRoomListItem(this.publicRoomEntry, {Key key}) : super(key: key);
void joinAction(BuildContext context) async {
2020-06-27 11:24:19 +00:00
final success = await SimpleDialogs(context)
.tryRequestWithLoadingDialog(_joinRoomAndWait(context));
2020-02-22 19:05:04 +00:00
if (success != false) {
await Navigator.of(context).push(
AppRoute.defaultRoute(
context,
2020-06-27 11:24:19 +00:00
ChatView(success),
2020-02-22 19:05:04 +00:00
),
);
}
}
2020-06-27 11:24:19 +00:00
Future<String> _joinRoomAndWait(BuildContext context) async {
2020-08-16 10:54:43 +00:00
final roomId =
await Matrix.of(context).client.joinRoomOrAlias(publicRoomEntry.roomId);
2020-06-27 11:24:19 +00:00
if (Matrix.of(context).client.getRoomById(roomId) == null) {
await Matrix.of(context)
.client
.onRoomUpdate
.stream
.firstWhere((r) => r.id == roomId);
}
return roomId;
}
2020-02-22 19:05:04 +00:00
@override
Widget build(BuildContext context) {
2020-05-13 13:58:59 +00:00
final hasTopic =
2020-02-22 19:05:04 +00:00
publicRoomEntry.topic != null && publicRoomEntry.topic.isNotEmpty;
return ListTile(
2020-04-28 12:11:56 +00:00
leading: Avatar(
publicRoomEntry.avatarUrl == null
? null
: Uri.parse(publicRoomEntry.avatarUrl),
publicRoomEntry.name),
2020-02-22 19:05:04 +00:00
title: Text(hasTopic
2020-05-13 13:58:59 +00:00
? '${publicRoomEntry.name} (${publicRoomEntry.numJoinedMembers})'
2020-02-22 19:05:04 +00:00
: publicRoomEntry.name),
subtitle: Text(
hasTopic
? publicRoomEntry.topic
2020-06-27 11:24:19 +00:00
: publicRoomEntry.numJoinedMembers == null
? L10n.of(context).joinRoom
: L10n.of(context).countParticipants(
publicRoomEntry.numJoinedMembers.toString()),
2020-02-22 19:05:04 +00:00
maxLines: 1,
),
onTap: () => joinAction(context),
);
}
}