remove wear_login_screen.dart

This commit is contained in:
2025-09-11 13:56:22 +02:00
parent c22d175afb
commit 4327cae06a

View File

@@ -1,330 +0,0 @@
import 'package:firka/helpers/api/consts.dart';
import 'package:firka/helpers/db/models/token_model.dart';
import 'package:firka/main.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:watch_connectivity/watch_connectivity.dart';
import 'package:webview_flutter/webview_flutter.dart';
import '../../../../helpers/api/token_grant.dart';
import '../../../../helpers/firka_state.dart';
import '../home/home_screen.dart';
import '../login/login_screen.dart';
class WearLoginScreen extends StatefulWidget {
final AppInitialization data;
const WearLoginScreen(this.data, {super.key});
@override
State<WearLoginScreen> createState() => _WearLoginScreenState();
}
class _WearLoginScreenState extends FirkaState<WearLoginScreen> {
late WebViewController _webViewController;
_WearLoginScreenState();
final watch = WatchConnectivity();
@override
void initState() {
super.initState();
_webViewController = WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..loadRequest(Uri.parse(KretaEndpoints.kretaLoginUrl))
..setNavigationDelegate(NavigationDelegate(
onNavigationRequest: (NavigationRequest request) async {
var uri = Uri.parse(request.url);
if (uri.path == "/ellenorzo-student/prod/oauthredirect") {
if (kDebugMode) {
print("query params: ${uri.queryParameters}");
}
var code = uri.queryParameters["code"]!;
try {
var resp = await getAccessToken(code);
if (kDebugMode) {
print("getAccessToken(): $resp");
}
var tokenModel = TokenModel.fromResp(resp);
debugPrint("[Phone -> Watch]: auth");
watch.sendMessage({
"id": "auth",
"data": {
"studentId": tokenModel.studentId,
"iss": tokenModel.iss,
"idToken": tokenModel.idToken,
"accessToken": tokenModel.accessToken,
"refreshToken": tokenModel.refreshToken,
"expiryDate": tokenModel.expiryDate!.millisecondsSinceEpoch
}
});
if (!mounted) return NavigationDecision.prevent;
if (widget.data.tokenCount > 0) {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (context) => HomeScreen(widget.data, false)),
(route) => false, // Remove all previous routes
);
} else {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (context) => LoginScreen(widget.data)),
(route) => false, // Remove all previous routes
);
}
} catch (ex) {
if (kDebugMode) {
print("oauthredirect failed: $ex");
}
// TODO: display an error popup
}
return NavigationDecision.prevent;
}
return NavigationDecision.navigate;
}));
SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
}
@override
Widget build(BuildContext context) {
final paddingWidthHorizontal = MediaQuery.of(context).size.width -
MediaQuery.of(context).size.width * 0.95;
return MaterialApp(
home: Scaffold(
backgroundColor: const Color(0xFFFAFFEF),
body: SafeArea(
child: Stack(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const SizedBox(height: 16),
Padding(
padding: EdgeInsets.only(left: paddingWidthHorizontal),
child: Row(
children: [
Container(
width: 30,
height: 30,
clipBehavior: Clip.antiAlias,
decoration: ShapeDecoration(
image: const DecorationImage(
image: AssetImage(
'assets/images/logos/colored_logo.webp'),
fit: BoxFit.cover,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(6)),
),
),
const SizedBox(width: 8),
const Text(
'Firka',
style: TextStyle(
color: Color(0xFF394B0A),
fontSize: 17,
fontFamily: 'Montserrat',
fontVariations: [
FontVariation('wght', 700),
],
),
),
],
),
),
const SizedBox(height: 16),
Container(
padding: EdgeInsets.only(top: 16, left: 16),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'Placeholder :3',
style: TextStyle(
color: Color(0xFF394B0A),
fontSize: 24,
fontFamily: 'Montserrat',
fontVariations: [
FontVariation('wght', 700),
],
),
)
],
),
),
],
),
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
width: double.infinity,
height: 200,
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [
Color(0x00DAE4F7),
Color(0xFFDAE4F7)
], // customize colors
stops: [0.0, 0.5], // percentages (0% → 50% → 100%)
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
),
),
)
],
),
Positioned(
bottom: 10,
left: 0,
right: 0,
child: Column(
children: [
Center(
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: paddingWidthHorizontal),
child: InkWell(
onTap: () {
showModalBottomSheet<void>(
context: context,
isScrollControlled: true,
builder: (BuildContext context) {
return Padding(
padding: EdgeInsets.only(
bottom: MediaQuery.of(context)
.viewInsets
.bottom),
child: FractionallySizedBox(
heightFactor: 0.90,
child: Center(
child: Column(
mainAxisAlignment:
MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Column(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Padding(
padding:
const EdgeInsets.symmetric(
vertical: 16),
child: Container(
decoration: const BoxDecoration(
color: Color(0xFFB9C8E5),
borderRadius:
BorderRadius.all(
Radius.circular(2)),
),
width: 40,
height: 4,
),
),
],
),
Container(
height: MediaQuery.of(context)
.size
.height *
0.8,
// Adjust height for content
margin: const EdgeInsets.symmetric(
horizontal: 16),
// Add ClipRRect for circular edges
child: ClipRRect(
borderRadius:
BorderRadius.circular(20),
child: WebViewWidget(
controller: _webViewController,
),
),
),
],
),
),
),
);
},
);
},
borderRadius: BorderRadius.circular(12),
child: Container(
width: double.infinity,
height: 48,
padding: const EdgeInsets.symmetric(vertical: 8),
decoration: ShapeDecoration(
color: const Color(0xFFA7DB21), // Accent-Accent
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
shadows: const [
BoxShadow(
color: Color(0x33647E22),
blurRadius: 2,
offset: Offset(0, 1),
spreadRadius: 0,
)
],
),
child: const Center(
child: Text(
'Bejelentkezés E-Kréta fiókkal',
textAlign: TextAlign.center,
style: TextStyle(
color: Color(0xFF394B0A),
// Text-Primary
fontSize: 17,
fontFamily: 'Montserrat',
fontVariations: [
FontVariation('wght', 700),
],
letterSpacing: -0.30,
),
),
),
),
),
),
),
const SizedBox(height: 20),
const Text(
'Adatvédelmi tájékoztató',
textAlign: TextAlign.center,
style: TextStyle(
color: Color(0x7F394C0A) /* Text-Teritary */,
fontSize: 14,
fontFamily: 'Montserrat',
fontVariations: [
FontVariation('wght', 500),
],
height: 1.30,
),
),
],
),
),
],
)),
),
);
}
}