✨ Auth check
This commit is contained in:
parent
67feaacf5a
commit
49d1d607ce
@ -415,5 +415,7 @@
|
|||||||
"channelDirectMessageDescription": "Direct Message with {}",
|
"channelDirectMessageDescription": "Direct Message with {}",
|
||||||
"fieldCannotBeEmpty": "This field cannot be empty.",
|
"fieldCannotBeEmpty": "This field cannot be empty.",
|
||||||
"termAcceptLink": "View terms",
|
"termAcceptLink": "View terms",
|
||||||
"termAcceptNextWithAgree": "By clicking the \"Next\", it means you agree to our terms and its updates."
|
"termAcceptNextWithAgree": "By clicking the \"Next\", it means you agree to our terms and its updates.",
|
||||||
|
"unauthorized": "Unauthorized",
|
||||||
|
"unauthorizedDescription": "Login to explore the entire Solar Network."
|
||||||
}
|
}
|
||||||
|
@ -415,5 +415,7 @@
|
|||||||
"channelDirectMessageDescription": "与 {} 的私聊",
|
"channelDirectMessageDescription": "与 {} 的私聊",
|
||||||
"fieldCannotBeEmpty": "此字段不能为空。",
|
"fieldCannotBeEmpty": "此字段不能为空。",
|
||||||
"termAcceptLink": "浏览条款",
|
"termAcceptLink": "浏览条款",
|
||||||
"termAcceptNextWithAgree": "点击 “下一步”,即表示你同意我们的各项条款,包括其之后的更新。"
|
"termAcceptNextWithAgree": "点击 “下一步”,即表示你同意我们的各项条款,包括其之后的更新。",
|
||||||
|
"unauthorized": "未登陆",
|
||||||
|
"unauthorizedDescription": "登陆以探索整个 Solar Network。"
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import 'package:surface/widgets/account/account_select.dart';
|
|||||||
import 'package:surface/widgets/app_bar_leading.dart';
|
import 'package:surface/widgets/app_bar_leading.dart';
|
||||||
import 'package:surface/widgets/dialog.dart';
|
import 'package:surface/widgets/dialog.dart';
|
||||||
import 'package:surface/widgets/loading_indicator.dart';
|
import 'package:surface/widgets/loading_indicator.dart';
|
||||||
|
import 'package:surface/widgets/unauthorized_hint.dart';
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
import '../providers/sn_network.dart';
|
import '../providers/sn_network.dart';
|
||||||
@ -34,6 +35,12 @@ class _ChatScreenState extends State<ChatScreen> {
|
|||||||
Map<int, SnChatMessage>? _lastMessages;
|
Map<int, SnChatMessage>? _lastMessages;
|
||||||
|
|
||||||
void _refreshChannels() {
|
void _refreshChannels() {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
if (!ua.isAuthorized) {
|
||||||
|
setState(() => _isBusy = false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final chan = context.read<ChatChannelProvider>();
|
final chan = context.read<ChatChannelProvider>();
|
||||||
chan.fetchChannels().listen((channels) async {
|
chan.fetchChannels().listen((channels) async {
|
||||||
final lastMessages = await chan.getLastMessages(channels);
|
final lastMessages = await chan.getLastMessages(channels);
|
||||||
@ -112,6 +119,18 @@ class _ChatScreenState extends State<ChatScreen> {
|
|||||||
final ud = context.read<UserDirectoryProvider>();
|
final ud = context.read<UserDirectoryProvider>();
|
||||||
final ua = context.read<UserProvider>();
|
final ua = context.read<UserProvider>();
|
||||||
|
|
||||||
|
if (!ua.isAuthorized) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
leading: AutoAppBarLeading(),
|
||||||
|
title: Text('screenChat').tr(),
|
||||||
|
),
|
||||||
|
body: Center(
|
||||||
|
child: UnauthorizedHint(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
leading: AutoAppBarLeading(),
|
leading: AutoAppBarLeading(),
|
||||||
|
@ -12,6 +12,9 @@ import 'package:surface/widgets/app_bar_leading.dart';
|
|||||||
import 'package:surface/widgets/dialog.dart';
|
import 'package:surface/widgets/dialog.dart';
|
||||||
import 'package:surface/widgets/loading_indicator.dart';
|
import 'package:surface/widgets/loading_indicator.dart';
|
||||||
|
|
||||||
|
import '../providers/userinfo.dart';
|
||||||
|
import '../widgets/unauthorized_hint.dart';
|
||||||
|
|
||||||
const kFriendStatus = {
|
const kFriendStatus = {
|
||||||
0: 'friendStatusPending',
|
0: 'friendStatusPending',
|
||||||
1: 'friendStatusActive',
|
1: 'friendStatusActive',
|
||||||
@ -34,6 +37,9 @@ class _FriendScreenState extends State<FriendScreen> {
|
|||||||
List<SnRelationship> _blocks = List.empty();
|
List<SnRelationship> _blocks = List.empty();
|
||||||
|
|
||||||
Future<void> _fetchRelations() async {
|
Future<void> _fetchRelations() async {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
if (!ua.isAuthorized) return;
|
||||||
|
|
||||||
setState(() => _isBusy = true);
|
setState(() => _isBusy = true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -51,6 +57,9 @@ class _FriendScreenState extends State<FriendScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _fetchRequests() async {
|
Future<void> _fetchRequests() async {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
if (!ua.isAuthorized) return;
|
||||||
|
|
||||||
setState(() => _isBusy = true);
|
setState(() => _isBusy = true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -68,6 +77,9 @@ class _FriendScreenState extends State<FriendScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _fetchBlocks() async {
|
Future<void> _fetchBlocks() async {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
if (!ua.isAuthorized) return;
|
||||||
|
|
||||||
setState(() => _isBusy = true);
|
setState(() => _isBusy = true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -165,6 +177,20 @@ class _FriendScreenState extends State<FriendScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
|
||||||
|
if (!ua.isAuthorized) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
leading: AutoAppBarLeading(),
|
||||||
|
title: Text('screenFriend').tr(),
|
||||||
|
),
|
||||||
|
body: Center(
|
||||||
|
child: UnauthorizedHint(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
leading: AutoAppBarLeading(),
|
leading: AutoAppBarLeading(),
|
||||||
|
@ -17,6 +17,9 @@ import 'package:surface/widgets/markdown_content.dart';
|
|||||||
import 'package:surface/widgets/post/post_item.dart';
|
import 'package:surface/widgets/post/post_item.dart';
|
||||||
import 'package:very_good_infinite_list/very_good_infinite_list.dart';
|
import 'package:very_good_infinite_list/very_good_infinite_list.dart';
|
||||||
|
|
||||||
|
import '../providers/userinfo.dart';
|
||||||
|
import '../widgets/unauthorized_hint.dart';
|
||||||
|
|
||||||
class NotificationScreen extends StatefulWidget {
|
class NotificationScreen extends StatefulWidget {
|
||||||
const NotificationScreen({super.key});
|
const NotificationScreen({super.key});
|
||||||
|
|
||||||
@ -40,6 +43,9 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Future<void> _fetchNotifications() async {
|
Future<void> _fetchNotifications() async {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
if (!ua.isAuthorized) return;
|
||||||
|
|
||||||
setState(() => _isBusy = true);
|
setState(() => _isBusy = true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -62,6 +68,9 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _markAllAsRead() async {
|
void _markAllAsRead() async {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
if (!ua.isAuthorized) return;
|
||||||
|
|
||||||
if (_notifications.isEmpty) return;
|
if (_notifications.isEmpty) return;
|
||||||
|
|
||||||
final confirm = await context.showConfirmDialog(
|
final confirm = await context.showConfirmDialog(
|
||||||
@ -101,6 +110,9 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _markOneAsRead(SnNotification notification) async {
|
void _markOneAsRead(SnNotification notification) async {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
if (!ua.isAuthorized) return;
|
||||||
|
|
||||||
if (notification.readAt != null) return;
|
if (notification.readAt != null) return;
|
||||||
|
|
||||||
setState(() => _isSubmitting = true);
|
setState(() => _isSubmitting = true);
|
||||||
@ -131,6 +143,20 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
|
||||||
|
if (!ua.isAuthorized) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
leading: AutoAppBarLeading(),
|
||||||
|
title: Text('screenNotification').tr(),
|
||||||
|
),
|
||||||
|
body: Center(
|
||||||
|
child: UnauthorizedHint(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
leading: AutoAppBarLeading(),
|
leading: AutoAppBarLeading(),
|
||||||
|
@ -13,6 +13,9 @@ import 'package:surface/widgets/dialog.dart';
|
|||||||
import 'package:surface/widgets/loading_indicator.dart';
|
import 'package:surface/widgets/loading_indicator.dart';
|
||||||
import 'package:surface/widgets/universal_image.dart';
|
import 'package:surface/widgets/universal_image.dart';
|
||||||
|
|
||||||
|
import '../providers/userinfo.dart';
|
||||||
|
import '../widgets/unauthorized_hint.dart';
|
||||||
|
|
||||||
class RealmScreen extends StatefulWidget {
|
class RealmScreen extends StatefulWidget {
|
||||||
const RealmScreen({super.key});
|
const RealmScreen({super.key});
|
||||||
|
|
||||||
@ -27,6 +30,9 @@ class _RealmScreenState extends State<RealmScreen> {
|
|||||||
List<SnRealm>? _realms;
|
List<SnRealm>? _realms;
|
||||||
|
|
||||||
Future<void> _fetchRealms() async {
|
Future<void> _fetchRealms() async {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
if (!ua.isAuthorized) return;
|
||||||
|
|
||||||
setState(() => _isBusy = true);
|
setState(() => _isBusy = true);
|
||||||
try {
|
try {
|
||||||
final sn = context.read<SnNetworkProvider>();
|
final sn = context.read<SnNetworkProvider>();
|
||||||
@ -75,6 +81,19 @@ class _RealmScreenState extends State<RealmScreen> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final sn = context.read<SnNetworkProvider>();
|
final sn = context.read<SnNetworkProvider>();
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
|
||||||
|
if (!ua.isAuthorized) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
leading: AutoAppBarLeading(),
|
||||||
|
title: Text('screenRealm').tr(),
|
||||||
|
),
|
||||||
|
body: Center(
|
||||||
|
child: UnauthorizedHint(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
|
49
lib/widgets/unauthorized_hint.dart
Normal file
49
lib/widgets/unauthorized_hint.dart
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:material_symbols_icons/material_symbols_icons.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:surface/widgets/dialog.dart';
|
||||||
|
|
||||||
|
import '../providers/userinfo.dart';
|
||||||
|
|
||||||
|
class UnauthorizedHint extends StatelessWidget {
|
||||||
|
const UnauthorizedHint({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return GestureDetector(
|
||||||
|
child: Container(
|
||||||
|
constraints: const BoxConstraints(maxWidth: 280),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
const Icon(Symbols.login, size: 36),
|
||||||
|
const Gap(8),
|
||||||
|
Text(
|
||||||
|
'unauthorized',
|
||||||
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
|
).tr(),
|
||||||
|
const Gap(8),
|
||||||
|
Text(
|
||||||
|
'unauthorizedDescription',
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium,
|
||||||
|
).tr(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
onTap: () {
|
||||||
|
GoRouter.of(context).pushNamed('authLogin').then((value) {
|
||||||
|
if (value == true && context.mounted) {
|
||||||
|
final ua = context.read<UserProvider>();
|
||||||
|
context.showSnackbar('loginSuccess'.tr(args: [
|
||||||
|
'@${ua.user?.name} (${ua.user?.nick})',
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user