✨ Channel kick members
This commit is contained in:
44
lib/widgets/account/avatar.dart
Normal file
44
lib/widgets/account/avatar.dart
Normal file
@ -0,0 +1,44 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:solian/utils/service_url.dart';
|
||||
|
||||
class AccountAvatar extends StatelessWidget {
|
||||
final String source;
|
||||
final double? radius;
|
||||
final bool? direct;
|
||||
final Color? backgroundColor;
|
||||
|
||||
const AccountAvatar({
|
||||
super.key,
|
||||
required this.source,
|
||||
this.radius,
|
||||
this.direct,
|
||||
this.backgroundColor,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final detectRegex = RegExp(r'https://.*/api/avatar/');
|
||||
|
||||
if (source.isEmpty || source.replaceAll(detectRegex, '').isEmpty) {
|
||||
return CircleAvatar(
|
||||
radius: radius,
|
||||
backgroundColor: backgroundColor,
|
||||
child: const Icon(Icons.account_circle),
|
||||
);
|
||||
}
|
||||
if (direct == true) {
|
||||
return CircleAvatar(
|
||||
radius: radius,
|
||||
backgroundColor: backgroundColor,
|
||||
backgroundImage: NetworkImage(source),
|
||||
);
|
||||
} else {
|
||||
final url = getRequestUri('passport', '/api/avatar/$source').toString();
|
||||
return CircleAvatar(
|
||||
radius: radius,
|
||||
backgroundColor: backgroundColor,
|
||||
backgroundImage: NetworkImage(url),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:solian/models/message.dart';
|
||||
import 'package:solian/widgets/account/avatar.dart';
|
||||
import 'package:solian/widgets/chat/content.dart';
|
||||
import 'package:solian/widgets/posts/content/attachment.dart';
|
||||
import 'package:timeago/timeago.dart' as timeago;
|
||||
@ -38,9 +39,10 @@ class ChatMessage extends StatelessWidget {
|
||||
child: const Icon(Icons.reply, size: 16),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
CircleAvatar(
|
||||
AccountAvatar(
|
||||
radius: 10,
|
||||
backgroundImage: NetworkImage(item.replyTo!.sender.account.avatar),
|
||||
source: item.replyTo!.sender.account.avatar,
|
||||
direct: true,
|
||||
),
|
||||
],
|
||||
),
|
||||
@ -102,8 +104,9 @@ class ChatMessage extends StatelessWidget {
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
CircleAvatar(
|
||||
backgroundImage: NetworkImage(item.sender.account.avatar),
|
||||
AccountAvatar(
|
||||
source: item.sender.account.avatar,
|
||||
direct: true,
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
|
||||
import 'package:solian/models/post.dart';
|
||||
import 'package:solian/widgets/account/avatar.dart';
|
||||
import 'package:solian/widgets/posts/comment_list.dart';
|
||||
import 'package:solian/widgets/posts/content/article.dart';
|
||||
import 'package:solian/widgets/posts/content/attachment.dart';
|
||||
@ -166,8 +167,9 @@ class _PostItemState extends State<PostItem> {
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
CircleAvatar(
|
||||
backgroundImage: NetworkImage(widget.item.author.avatar),
|
||||
AccountAvatar(
|
||||
source: widget.item.author.avatar,
|
||||
direct: true,
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
@ -196,8 +198,9 @@ class _PostItemState extends State<PostItem> {
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
CircleAvatar(
|
||||
backgroundImage: NetworkImage(widget.item.author.avatar),
|
||||
AccountAvatar(
|
||||
source: widget.item.author.avatar,
|
||||
direct: true,
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
|
Reference in New Issue
Block a user