Compare commits

...

2 Commits

Author SHA1 Message Date
0509f37c96 ♻️ Use system browser for OIDC 2025-11-02 16:32:29 +08:00
a7dc9ac6fa Add spotify in account connection 2025-11-02 15:49:44 +08:00
3 changed files with 18 additions and 21 deletions

View File

@@ -162,6 +162,7 @@
"accountConnectionProviderGithub": "GitHub", "accountConnectionProviderGithub": "GitHub",
"accountConnectionProviderDiscord": "Discord", "accountConnectionProviderDiscord": "Discord",
"accountConnectionProviderAfdian": "Afdian", "accountConnectionProviderAfdian": "Afdian",
"accountConnectionProviderSpotify": "Spotify",
"checkIn": "Check In", "checkIn": "Check In",
"checkInNone": "Not checked-in yet", "checkInNone": "Not checked-in yet",
"checkInNoneHint": "Get your fortune tips and daily rewards by checking in.", "checkInNoneHint": "Get your fortune tips and daily rewards by checking in.",

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -1,5 +1,4 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
@@ -9,7 +8,6 @@ import 'package:island/models/auth.dart';
import 'package:island/pods/config.dart'; import 'package:island/pods/config.dart';
import 'package:island/pods/network.dart'; import 'package:island/pods/network.dart';
import 'package:island/screens/account/me/account_settings.dart'; import 'package:island/screens/account/me/account_settings.dart';
import 'package:island/screens/auth/oidc.native.dart';
import 'package:island/utils/text.dart'; import 'package:island/utils/text.dart';
import 'package:island/services/time.dart'; import 'package:island/services/time.dart';
import 'package:island/widgets/alert.dart'; import 'package:island/widgets/alert.dart';
@@ -38,6 +36,13 @@ Widget getProviderIcon(String provider, {double size = 24, Color? color}) {
height: size, height: size,
color: color, color: color,
); );
case 'spotify':
return Image.asset(
'assets/images/oidc/spotify.png',
width: size,
height: size,
color: color,
);
default: default:
return Icon(Symbols.link, size: size); return Icon(Symbols.link, size: size);
} }
@@ -57,6 +62,8 @@ String getLocalizedProviderName(String provider) {
return 'accountConnectionProviderDiscord'.tr(); return 'accountConnectionProviderDiscord'.tr();
case 'afdian': case 'afdian':
return 'accountConnectionProviderAfdian'.tr(); return 'accountConnectionProviderAfdian'.tr();
case 'spotify':
return 'accountConnectionProviderSpotify'.tr();
default: default:
return provider; return provider;
} }
@@ -156,6 +163,7 @@ class AccountConnectionNewSheet extends HookConsumerWidget {
'github', 'github',
'discord', 'discord',
'afdian', 'afdian',
'spotify',
]; ];
Future<void> addConnection() async { Future<void> addConnection() async {
@@ -196,25 +204,13 @@ class AccountConnectionNewSheet extends HookConsumerWidget {
case 'github': case 'github':
case 'discord': case 'discord':
case 'afdian': case 'afdian':
if (kIsWeb) { case 'spotify':
final serverUrl = ref.watch(serverUrlProvider); final serverUrl = ref.watch(serverUrlProvider);
final accessToken = ref.watch(tokenProvider); final accessToken = ref.watch(tokenProvider);
launchUrlString( launchUrlString(
'$serverUrl/pass/auth/login/${selectedProvider.value}?tk=${accessToken!.token}', '$serverUrl/pass/auth/login/${selectedProvider.value}?tk=${accessToken!.token}',
); );
} else { if (context.mounted) Navigator.pop(context, true);
await Navigator.of(context, rootNavigator: true).push(
MaterialPageRoute(
builder:
(context) => OidcScreen(
provider: selectedProvider.value.toLowerCase(),
title:
'Connect with ${selectedProvider.value.capitalizeEachWord()}',
),
),
);
if (context.mounted) Navigator.pop(context, true);
}
break; break;
default: default:
showSnackBar('accountConnectionAddError'.tr()); showSnackBar('accountConnectionAddError'.tr());