Moved widgets to separate files
This commit is contained in:
parent
ec02aaa406
commit
31874f88a7
3 changed files with 153 additions and 145 deletions
148
lib/main.dart
148
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<StatefulLoginForm> createState() => _LoginForm();
|
||||
}
|
||||
|
||||
class _LoginForm extends State<StatefulLoginForm> {
|
||||
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: <String>['gitea.com', 'codeberg.org', 'Other']
|
||||
.map<DropdownMenuItem<String>>((String value) {
|
||||
return DropdownMenuItem<String>(
|
||||
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<StatefulLoginStatus> {
|
||||
|
||||
|
||||
Future<AuthenticatedUser>? 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<AuthenticatedUser>(
|
||||
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';
|
||||
}
|
||||
}
|
88
lib/widget/login_form.dart
Normal file
88
lib/widget/login_form.dart
Normal file
|
@ -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<StatefulLoginForm> createState() => _LoginForm();
|
||||
}
|
||||
|
||||
class _LoginForm extends State<StatefulLoginForm> {
|
||||
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: <String>['gitea.com', 'codeberg.org', 'Other']
|
||||
.map<DropdownMenuItem<String>>((String value) {
|
||||
return DropdownMenuItem<String>(
|
||||
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';
|
||||
}
|
62
lib/widget/login_status.dart
Normal file
62
lib/widget/login_status.dart
Normal file
|
@ -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<StatefulLoginStatus> {
|
||||
|
||||
|
||||
Future<AuthenticatedUser>? 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<AuthenticatedUser>(
|
||||
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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
)
|
||||
],
|
||||
),
|
||||
));
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue