feat: add Flutter web frontend with authentication and recipe management features
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'token_storage.dart';
|
||||
import 'web_token_storage.dart';
|
||||
|
||||
/// Bind ITokenStorage to the web adapter.
|
||||
/// For mobile: swap WebTokenStorage for SecureTokenStorage here.
|
||||
final tokenStorageProvider = Provider<ITokenStorage>((ref) {
|
||||
return WebTokenStorage();
|
||||
});
|
||||
@@ -0,0 +1,7 @@
|
||||
/// Platform-neutral contract for token storage.
|
||||
/// Web implementation uses SharedPreferences; mobile uses flutter_secure_storage.
|
||||
abstract interface class ITokenStorage {
|
||||
Future<String?> getToken();
|
||||
Future<void> saveToken(String token);
|
||||
Future<void> deleteToken();
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'token_storage.dart';
|
||||
|
||||
/// Web-adapter: stores JWT in SharedPreferences (localStorage on web).
|
||||
/// Replace with flutter_secure_storage adapter for Android/iOS.
|
||||
class WebTokenStorage implements ITokenStorage {
|
||||
static const _key = 'auth_token';
|
||||
|
||||
@override
|
||||
Future<String?> getToken() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
return prefs.getString(_key);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> saveToken(String token) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.setString(_key, token);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> deleteToken() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
await prefs.remove(_key);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user