mirror of
https://github.com/bettercoding-dev/flutter-jwt-auth.git
synced 2025-08-06 17:28:17 +08:00
103 lines
2.8 KiB
Dart
103 lines
2.8 KiB
Dart
import 'package:flutter/material.dart';
|
||
import 'package:flutter_jwt_auth/auth/state/auth_controller.dart';
|
||
import 'package:flutter_jwt_auth/common/ui/error_view.dart';
|
||
import 'package:flutter_jwt_auth/common/ui/loading_view.dart';
|
||
import 'package:flutter_jwt_auth/time/state/time_controller.dart';
|
||
import 'package:flutter_jwt_auth/time/ui/login_button.dart';
|
||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||
|
||
class TimePage extends ConsumerWidget {
|
||
const TimePage({super.key});
|
||
|
||
@override
|
||
Widget build(BuildContext context, WidgetRef ref) {
|
||
ref.listen(authControllerProvider, (prev, state) {
|
||
if (state.hasError) {
|
||
ScaffoldMessenger.of(context).showSnackBar(
|
||
const SnackBar(
|
||
backgroundColor: Colors.red,
|
||
content: Text('Login error occurred'),
|
||
),
|
||
);
|
||
}
|
||
});
|
||
|
||
return Scaffold(
|
||
appBar: AppBar(
|
||
title: const Text('JWT Auth Tutorial'),
|
||
actions: const [
|
||
LoginButton(),
|
||
],
|
||
),
|
||
body: const Column(
|
||
children: [
|
||
_AuthContent(),
|
||
_TimeContent(),
|
||
],
|
||
),
|
||
);
|
||
}
|
||
}
|
||
|
||
class _AuthContent extends ConsumerWidget {
|
||
const _AuthContent();
|
||
|
||
@override
|
||
Widget build(BuildContext context, WidgetRef ref) {
|
||
final authState = ref.watch(authControllerProvider);
|
||
|
||
return authState.when(
|
||
data: (authData) => Column(
|
||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||
children: [
|
||
ListTile(
|
||
subtitle: const Text('Token'),
|
||
title: Text(authData?.token ?? '–'),
|
||
),
|
||
ListTile(
|
||
subtitle: const Text('Refresh Token'),
|
||
title: Text(authData?.refreshToken ?? '–'),
|
||
),
|
||
],
|
||
),
|
||
error: (error, trace) => Center(
|
||
child: Text(error.toString()),
|
||
),
|
||
loading: () => const LoadingView(),
|
||
);
|
||
}
|
||
}
|
||
|
||
class _TimeContent extends ConsumerWidget {
|
||
const _TimeContent();
|
||
|
||
@override
|
||
Widget build(BuildContext context, WidgetRef ref) {
|
||
final isAuthorized = ref.watch(authControllerProvider).valueOrNull != null;
|
||
|
||
if (isAuthorized) {
|
||
final timeState = ref.watch(timeControllerProvider);
|
||
return timeState.when(
|
||
data: (time) => Column(
|
||
children: [
|
||
ListTile(
|
||
subtitle: const Text('Current Server Time'),
|
||
title: Text(time.toString()),
|
||
),
|
||
ElevatedButton(
|
||
onPressed: () => ref.refresh(timeControllerProvider.future),
|
||
child: const Text('Refresh'),
|
||
),
|
||
],
|
||
),
|
||
error: (error, trace) => ErrorView(error: error),
|
||
loading: () => const LoadingView(),
|
||
);
|
||
} else {
|
||
return const Center(
|
||
child: Text('Unauthorized'),
|
||
);
|
||
}
|
||
}
|
||
}
|