diff --git a/lib/main.dart b/lib/main.dart index 4dd2f2c..aca3035 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:gitea_client/model/user.dart'; -import 'package:gitea_client/service/AuthenticationChecker.dart'; -import 'package:url_launcher/url_launcher.dart'; +import 'package:gitea_client/widget/login_form.dart'; +import 'package:gitea_client/widget/login_status.dart'; import 'model/ApiAccess.dart'; @@ -70,145 +69,4 @@ class LoginPage extends StatelessWidget { ), )); } -} - -class StatefulLoginForm extends StatefulWidget { - const StatefulLoginForm({Key? key}) : super(key: key); - - @override - State createState() => _LoginForm(); -} - -class _LoginForm extends State { - final Uri getTokenUri = Uri.parse( - "https://www.jetbrains.com/help/youtrack/incloud/integration-with-gitea.html#enable-youtrack-integration-gitea"); - final tokenController = TextEditingController(); - final instanceController = TextEditingController(); - String instance = "gitea.com"; - - @override - Widget build(BuildContext context) { - final media = MediaQuery.of(context).size; - - return SingleChildScrollView( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - DropdownButton( - value: instance, - items: ['gitea.com', 'codeberg.org', 'Other'] - .map>((String value) { - return DropdownMenuItem( - value: value, - child: Text(value), - ); - }).toList(), - onChanged: (String? newValue) { - setState(() { - instance = newValue!; - }); - instance = newValue!; - print("New Value: $newValue"); - }), - if (instance == "Other") - TextField( - decoration: const InputDecoration( - labelText: "Instance URL", - ), - controller: instanceController, - ), - TextField( - decoration: const InputDecoration( - labelText: "Token", - ), - controller: tokenController, - obscureText: true, - ), - SizedBox( - width: - (media.width > 600) ? media.width * 0.25 : media.width * 0.5, - child: Container( - padding: EdgeInsetsDirectional.all(15), - child: ElevatedButton( - child: const Text("Login"), - onPressed: () => { - Navigator.pushNamed(context, "/loginstatus", - arguments: ApiAccess( - (instance == "Other") - ? instanceController.text - : instance, - tokenController.text)) - }, - ), - )), - // - TextButton( - onPressed: () => {_launchUrl(getTokenUri)}, - child: Text("Need a Token? Find out how to generate one!")) - ], - ), - ); - } -} - -class StatefulLoginStatus extends StatefulWidget { - final ApiAccess apiAccess; - const StatefulLoginStatus({Key? key, required this.apiAccess}) : super(key: key); - - @override - _StatefulLoginStatus createState() => _StatefulLoginStatus(); -} - -class _StatefulLoginStatus extends State { - - - Future? userRequest; - - @override - void initState() { - userRequest = AuthenticationChecker(widget.apiAccess).getAuthenticatedUserOrError(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("Login status"), - ), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - FutureBuilder( - future: userRequest, - builder: (context, snapshot) { - if (snapshot.hasError){ - return Center( - child: Text( - "Hiba történt: ${snapshot.error}" - ), - ); - } else if (snapshot.hasData){ - var user = snapshot.data!; - final username = user.username; - return Text("Logged in as $username"); - - } else { - return Center( - child: CircularProgressIndicator(), - ); - } - } - ) - ], - ), - )); - } -} - -void _launchUrl(Uri url) async { - if (!await launchUrl(url)) throw 'Could not launch $url'; -} +} \ No newline at end of file diff --git a/lib/widget/login_form.dart b/lib/widget/login_form.dart new file mode 100644 index 0000000..fa9db06 --- /dev/null +++ b/lib/widget/login_form.dart @@ -0,0 +1,88 @@ +import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import '../model/ApiAccess.dart'; + +class StatefulLoginForm extends StatefulWidget { + const StatefulLoginForm({Key? key}) : super(key: key); + + @override + State createState() => _LoginForm(); +} + +class _LoginForm extends State { + final Uri getTokenUri = Uri.parse( + "https://www.jetbrains.com/help/youtrack/incloud/integration-with-gitea.html#enable-youtrack-integration-gitea"); + final tokenController = TextEditingController(); + final instanceController = TextEditingController(); + String instance = "gitea.com"; + + @override + Widget build(BuildContext context) { + final media = MediaQuery.of(context).size; + + return SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + DropdownButton( + value: instance, + items: ['gitea.com', 'codeberg.org', 'Other'] + .map>((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (String? newValue) { + setState(() { + instance = newValue!; + }); + instance = newValue!; + print("New Value: $newValue"); + }), + if (instance == "Other") + TextField( + decoration: const InputDecoration( + labelText: "Instance URL", + ), + controller: instanceController, + ), + TextField( + decoration: const InputDecoration( + labelText: "Token", + ), + controller: tokenController, + obscureText: true, + ), + SizedBox( + width: + (media.width > 600) ? media.width * 0.25 : media.width * 0.5, + child: Container( + padding: EdgeInsetsDirectional.all(15), + child: ElevatedButton( + child: const Text("Login"), + onPressed: () => { + Navigator.pushNamed(context, "/loginstatus", + arguments: ApiAccess( + (instance == "Other") + ? instanceController.text + : instance, + tokenController.text)) + }, + ), + )), + // + TextButton( + onPressed: () => {_launchUrl(getTokenUri)}, + child: Text("Need a Token? Find out how to generate one!")) + ], + ), + ); + } +} + +void _launchUrl(Uri url) async { + if (!await launchUrl(url)) throw 'Could not launch $url'; +} diff --git a/lib/widget/login_status.dart b/lib/widget/login_status.dart new file mode 100644 index 0000000..9a1504f --- /dev/null +++ b/lib/widget/login_status.dart @@ -0,0 +1,62 @@ +import 'package:flutter/material.dart'; + +import '../model/ApiAccess.dart'; +import '../model/user.dart'; +import '../service/AuthenticationChecker.dart'; + +class StatefulLoginStatus extends StatefulWidget { + final ApiAccess apiAccess; + const StatefulLoginStatus({Key? key, required this.apiAccess}) : super(key: key); + + @override + _StatefulLoginStatus createState() => _StatefulLoginStatus(); +} + +class _StatefulLoginStatus extends State { + + + Future? userRequest; + + @override + void initState() { + userRequest = AuthenticationChecker(widget.apiAccess).getAuthenticatedUserOrError(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text("Login status"), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + FutureBuilder( + future: userRequest, + builder: (context, snapshot) { + if (snapshot.hasError){ + return Center( + child: Text( + "Hiba történt: ${snapshot.error}" + ), + ); + } else if (snapshot.hasData){ + var user = snapshot.data!; + final username = user.username; + return Text("Logged in as $username"); + + } else { + return Center( + child: CircularProgressIndicator(), + ); + } + } + ) + ], + ), + )); + } +} \ No newline at end of file