✨ Status activity
This commit is contained in:
parent
fb6e65a0fb
commit
a9cfbe7817
@ -138,5 +138,8 @@
|
|||||||
"statusClearTime": "Cleared At",
|
"statusClearTime": "Cleared At",
|
||||||
"statusNoAutoClear": "Do not auto clear",
|
"statusNoAutoClear": "Do not auto clear",
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
"offline": "Offline"
|
"offline": "Offline",
|
||||||
|
"status": "Status",
|
||||||
|
"statusActivityTitle": "{} is {} {}",
|
||||||
|
"statusActivityEndedTitle": "{} is {} {} until {}"
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import 'package:island/pods/websocket.dart';
|
|||||||
import 'package:island/route.dart';
|
import 'package:island/route.dart';
|
||||||
import 'package:island/services/notify.dart';
|
import 'package:island/services/notify.dart';
|
||||||
import 'package:island/widgets/app_scaffold.dart';
|
import 'package:island/widgets/app_scaffold.dart';
|
||||||
|
import 'package:relative_time/relative_time.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
|
import 'package:image_picker_platform_interface/image_picker_platform_interface.dart';
|
||||||
|
|
||||||
@ -102,6 +103,7 @@ class IslandApp extends HookConsumerWidget {
|
|||||||
localizationsDelegates: [
|
localizationsDelegates: [
|
||||||
...context.localizationDelegates,
|
...context.localizationDelegates,
|
||||||
CroppyLocalizations.delegate,
|
CroppyLocalizations.delegate,
|
||||||
|
RelativeTimeLocalizations.delegate,
|
||||||
], // this contains the cupertino one
|
], // this contains the cupertino one
|
||||||
locale: context.locale,
|
locale: context.locale,
|
||||||
builder: (context, child) {
|
builder: (context, child) {
|
||||||
|
@ -5,6 +5,7 @@ import 'package:gap/gap.dart';
|
|||||||
import 'package:island/models/activity.dart';
|
import 'package:island/models/activity.dart';
|
||||||
import 'package:island/pods/userinfo.dart';
|
import 'package:island/pods/userinfo.dart';
|
||||||
import 'package:island/route.gr.dart';
|
import 'package:island/route.gr.dart';
|
||||||
|
import 'package:island/widgets/account/status.dart';
|
||||||
import 'package:island/widgets/app_scaffold.dart';
|
import 'package:island/widgets/app_scaffold.dart';
|
||||||
import 'package:island/models/post.dart';
|
import 'package:island/models/post.dart';
|
||||||
import 'package:island/widgets/check_in.dart';
|
import 'package:island/widgets/check_in.dart';
|
||||||
@ -66,6 +67,8 @@ class ExploreScreen extends ConsumerWidget {
|
|||||||
);
|
);
|
||||||
case 'accounts.check-in':
|
case 'accounts.check-in':
|
||||||
return CheckInActivityWidget(item: item);
|
return CheckInActivityWidget(item: item);
|
||||||
|
case 'accounts.status':
|
||||||
|
return StatusActivityWidget(item: item);
|
||||||
default:
|
default:
|
||||||
return Placeholder();
|
return Placeholder();
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:island/models/activity.dart';
|
||||||
import 'package:island/models/user.dart';
|
import 'package:island/models/user.dart';
|
||||||
import 'package:island/pods/network.dart';
|
import 'package:island/pods/network.dart';
|
||||||
import 'package:island/widgets/account/status_creation.dart';
|
import 'package:island/widgets/account/status_creation.dart';
|
||||||
|
import 'package:island/widgets/content/cloud_files.dart';
|
||||||
import 'package:material_symbols_icons/symbols.dart';
|
import 'package:material_symbols_icons/symbols.dart';
|
||||||
|
import 'package:relative_time/relative_time.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
import 'package:styled_widget/styled_widget.dart';
|
import 'package:styled_widget/styled_widget.dart';
|
||||||
|
|
||||||
@ -128,3 +132,54 @@ class AccountStatusWidget extends HookConsumerWidget {
|
|||||||
).opacity((userStatus.value?.isCustomized ?? false) ? 1 : 0.85);
|
).opacity((userStatus.value?.isCustomized ?? false) ? 1 : 0.85);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class StatusActivityWidget extends StatelessWidget {
|
||||||
|
final SnActivity item;
|
||||||
|
const StatusActivityWidget({super.key, required this.item});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final result = SnAccountStatus.fromJson(item.data);
|
||||||
|
return Row(
|
||||||
|
spacing: 12,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
ProfilePictureWidget(
|
||||||
|
fileId: item.account.profile.pictureId,
|
||||||
|
radius: 12,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const Icon(Symbols.circle, size: 12).padding(top: 1, left: 2),
|
||||||
|
const Gap(4),
|
||||||
|
Text('status').fontSize(11).tr(),
|
||||||
|
],
|
||||||
|
).opacity(0.85),
|
||||||
|
Text(
|
||||||
|
result.clearedAt == null
|
||||||
|
? 'statusActivityTitle'
|
||||||
|
: 'statusActivityEndedTitle',
|
||||||
|
)
|
||||||
|
.tr(
|
||||||
|
args: [
|
||||||
|
item.account.nick,
|
||||||
|
result.label,
|
||||||
|
RelativeTime(context).format(result.createdAt),
|
||||||
|
if (result.clearedAt != null)
|
||||||
|
RelativeTime(context).format(result.clearedAt!),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
.fontSize(13)
|
||||||
|
.padding(left: 2),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
).padding(horizontal: 16, vertical: 12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1397,6 +1397,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.0"
|
version: "4.1.0"
|
||||||
|
relative_time:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: relative_time
|
||||||
|
sha256: "4e6c3b27d98ff6af5061b6dbaca178b5aa2607b7a7c2a77e6cae1d32b2759893"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.0.0"
|
||||||
responsive_framework:
|
responsive_framework:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
@ -93,6 +93,7 @@ dependencies:
|
|||||||
croppy: ^1.3.6
|
croppy: ^1.3.6
|
||||||
tencent_rtc_sdk: ^12.3.6
|
tencent_rtc_sdk: ^12.3.6
|
||||||
table_calendar: ^3.1.3
|
table_calendar: ^3.1.3
|
||||||
|
relative_time: ^5.0.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user