Skip to content
This repository has been archived by the owner on Sep 9, 2024. It is now read-only.

Commit

Permalink
feat: user cards
Browse files Browse the repository at this point in the history
  • Loading branch information
Craftplacer committed May 23, 2023
1 parent ddbd432 commit 82d64e2
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 123 deletions.
88 changes: 88 additions & 0 deletions src/kaiteki/lib/ui/shared/users/user_card.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import "package:flutter/material.dart";
import "package:kaiteki/di.dart";
import "package:kaiteki/fediverse/model/user/user.dart";
import "package:kaiteki/utils/extensions.dart";

class UserCard extends ConsumerWidget {
/// The user to display. If null, a placeholder will be displayed.
final User? user;

final List<Widget> actions;

const UserCard(this.user, {super.key, this.actions = const []});

@override
Widget build(BuildContext context, WidgetRef ref) {
final handleTextStyle = Theme.of(context).textTheme.bodyMedium?.copyWith(
color: Theme.of(context).colorScheme.onSurfaceVariant,
);
final displayNameTextStyle =
Theme.of(context).textTheme.bodyLarge?.copyWith(
color: Theme.of(context).colorScheme.onSurface,
);
return Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
ClipRRect(
borderRadius: BorderRadius.circular(12.0),
child: AspectRatio(
aspectRatio: 16 / 9,
child: user?.bannerUrl.nullTransform(
(url) => Image.network(
url.toString(),
fit: BoxFit.cover,
),
),
),
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text.rich(
user?.renderDisplayName(context, ref) ??
const TextSpan(text: "..."),
maxLines: 1,
overflow: TextOverflow.fade,
softWrap: false,
style: displayNameTextStyle,
),
Text(
user?.handle.toString() ?? "...",
maxLines: 1,
overflow: TextOverflow.ellipsis,
softWrap: false,
style: handleTextStyle,
),
],
),
),
...actions,
],
),
const SizedBox(height: 8),
if (user?.description != null)
Text.rich(
user?.renderDescription(context, ref) ??
const TextSpan(
text: "...",
),
overflow: TextOverflow.ellipsis,
maxLines: 2,
),
],
),
),
],
),
);
}
}
119 changes: 0 additions & 119 deletions src/kaiteki/lib/ui/user/user_card.dart

This file was deleted.

36 changes: 32 additions & 4 deletions src/kaiteki/lib/ui/user/user_sliver.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import "package:kaiteki/fediverse/adapter.dart";
import "package:kaiteki/fediverse/model/model.dart";
import "package:kaiteki/ui/shared/error_landing_widget.dart";
import "package:kaiteki/ui/shared/posts/user_list_dialog.dart";
import "package:kaiteki/ui/shared/users/user_card.dart";
import "package:kaiteki/utils/extensions.dart";
import "package:tuple/tuple.dart";

Expand Down Expand Up @@ -96,14 +97,41 @@ class UserSliverState extends ConsumerState<UserSliver> {

@override
Widget build(BuildContext context) {
if (widget.wide) {
return PagedSliverGrid(
pagingController: _controller,
builderDelegate: PagedChildBuilderDelegate<User>(
itemBuilder: (context, item, index) {
return UserCard(item);
},
firstPageErrorIndicatorBuilder: (context) {
final t = _controller.error as Tuple2<Object, StackTrace>;
return Center(
child: ErrorLandingWidget(
error: t.item1,
stackTrace: t.item2,
),
);
},
),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 8.0,
mainAxisSpacing: 8.0,
),
);
}

return PagedSliverList<dynamic, User>.separated(
pagingController: _controller,
builderDelegate: PagedChildBuilderDelegate<User>(
itemBuilder: (context, item, index) {
return UserListTile(
user: item,
onPressed: () => context.showUser(item, ref),
);
return widget.wide
? UserCard(item)
: UserListTile(
user: item,
onPressed: () => context.showUser(item, ref),
);
},
animateTransitions: true,
firstPageErrorIndicatorBuilder: (context) {
Expand Down

0 comments on commit 82d64e2

Please sign in to comment.