chore: Follow up status feature

This commit is contained in:
Krille 2023-12-22 19:27:19 +01:00
parent 376d59889b
commit fa543e93b8
No known key found for this signature in database
GPG key ID: E067ECD60F1A0652
3 changed files with 21 additions and 8 deletions

View file

@ -153,9 +153,10 @@ class ChatListViewBody extends StatelessWidget {
),
),
],
StatusMessageList(
onStatusEdit: controller.setStatus,
),
if (!controller.isSearchMode)
StatusMessageList(
onStatusEdit: controller.setStatus,
),
const ConnectionStatusHeader(),
AnimatedContainer(
height: controller.isTorBrowser ? 64 : 0,

View file

@ -18,7 +18,7 @@ class StatusMessageList extends StatelessWidget {
super.key,
});
static const double height = 108;
static const double height = 116;
void _onStatusTab(BuildContext context, Profile profile) {
final client = Matrix.of(context).client;
@ -37,6 +37,8 @@ class StatusMessageList extends StatelessWidget {
@override
Widget build(BuildContext context) {
final client = Matrix.of(context).client;
final interestingPresences = client.interestingPresences;
return StreamBuilder(
stream: client.onSync.stream.rateLimit(const Duration(seconds: 3)),
builder: (context, snapshot) {
@ -44,6 +46,10 @@ class StatusMessageList extends StatelessWidget {
duration: FluffyThemes.animationDuration,
curve: Curves.easeInOut,
child: FutureBuilder(
initialData: interestingPresences
// ignore: deprecated_member_use
.map((userId) => client.presences[userId])
.whereType<CachedPresence>(),
future: Future.wait(
client.interestingPresences
.map((userId) => client.fetchCurrentPresence(userId)),
@ -69,7 +75,7 @@ class StatusMessageList extends StatelessWidget {
return SizedBox(
height: StatusMessageList.height,
child: ListView.builder(
padding: const EdgeInsets.symmetric(horizontal: 8),
padding: const EdgeInsets.all(8),
scrollDirection: Axis.horizontal,
itemCount: presences.length,
itemBuilder: (context, i) => PresenceAvatar(
@ -101,7 +107,7 @@ class PresenceAvatar extends StatelessWidget {
@override
Widget build(BuildContext context) {
final avatarSize = height - 16 - 16;
final avatarSize = height - 16 - 16 - 8;
final client = Matrix.of(context).client;
return FutureBuilder<Profile>(
future: client.getProfileFromUserId(presence.userid),
@ -162,6 +168,9 @@ class PresenceAvatar extends StatelessWidget {
profile ??
Profile(userId: presence.userid),
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
child: const Icon(
Icons.add_outlined,
size: 16,

View file

@ -419,8 +419,11 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
Logs().v('AppLifecycleState = $state');
final foreground = state != AppLifecycleState.detached &&
state != AppLifecycleState.paused;
client.backgroundSync = foreground;
client.requestHistoryOnLimitedTimeline = !foreground;
client.syncPresence = foreground ? null : PresenceType.unavailable;
if (PlatformInfos.isMobile) {
client.backgroundSync = foreground;
client.requestHistoryOnLimitedTimeline = !foreground;
}
}
void initSettings() {