Moved widgets to separate files
This commit is contained in:
parent
ec02aaa406
commit
31874f88a7
3 changed files with 153 additions and 145 deletions
146
lib/main.dart
146
lib/main.dart
|
@ -1,7 +1,6 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gitea_client/model/user.dart';
|
import 'package:gitea_client/widget/login_form.dart';
|
||||||
import 'package:gitea_client/service/AuthenticationChecker.dart';
|
import 'package:gitea_client/widget/login_status.dart';
|
||||||
import 'package:url_launcher/url_launcher.dart';
|
|
||||||
|
|
||||||
import 'model/ApiAccess.dart';
|
import 'model/ApiAccess.dart';
|
||||||
|
|
||||||
|
@ -71,144 +70,3 @@ 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