Files
flutter-jwt-auth/lib/time/ui/time_page.dart
2024-10-03 07:31:37 +02:00

103 lines
2.8 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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'),
);
}
}
}