Chat, chat local db, chat messaging retriving (no sync yet)

This commit is contained in:
2025-05-03 14:19:46 +08:00
parent b2c31bcf13
commit e2e6de965b
30 changed files with 258 additions and 206 deletions

View File

@ -1,3 +1,4 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:island/models/file.dart';
@ -42,18 +43,21 @@ class CloudFileWidget extends ConsumerWidget {
}
class ProfilePictureWidget extends ConsumerWidget {
final SnCloudFile? item;
final String? fileId;
final double radius;
final IconData? fallbackIcon;
const ProfilePictureWidget({
super.key,
required this.item,
required this.fileId,
this.radius = 20,
this.fallbackIcon,
});
@override
Widget build(BuildContext context, WidgetRef ref) {
final serverUrl = ref.watch(serverUrlProvider);
final uri = '$serverUrl/files/$fileId';
return ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(radius)),
child: Container(
@ -61,12 +65,12 @@ class ProfilePictureWidget extends ConsumerWidget {
height: radius * 2,
color: Theme.of(context).colorScheme.primaryContainer,
child:
item == null
fileId == null
? Icon(
fallbackIcon ?? Symbols.account_circle,
size: radius,
).center()
: CloudFileWidget(item: item!),
: CachedNetworkImage(imageUrl: uri, fit: BoxFit.cover),
),
);
}

View File

@ -105,7 +105,7 @@ class PostItem extends HookConsumerWidget {
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 12,
children: [
ProfilePictureWidget(item: item.publisher.picture),
ProfilePictureWidget(fileId: item.publisher.pictureId),
Expanded(
child: GestureDetector(
child: Column(

View File

@ -66,7 +66,7 @@ class PostQuickReply extends HookConsumerWidget {
children: [
GestureDetector(
child: ProfilePictureWidget(
item: currentPublisher.value?.picture,
fileId: currentPublisher.value?.pictureId,
radius: 16,
),
onTap: () {

View File

@ -68,7 +68,7 @@ class PublisherModal extends HookConsumerWidget {
for (final publisher in value)
ListTile(
leading: ProfilePictureWidget(
item: publisher.picture,
fileId: publisher.picture?.id,
),
title: Text(publisher.nick),
subtitle: Text('@${publisher.name}'),