import 'package:flutter/material.dart'; import 'package:gitea_client/model/user.dart'; import 'package:gitea_client/widget/login_form.dart'; import 'package:gitea_client/widget/login_status.dart'; import 'package:gitea_client/widget/repo_list_page.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'model/ApiAccess.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Gitea Client', theme: ThemeData( primarySwatch: Colors.lightGreen, ), home: MyHomePage(), routes: { }, onGenerateRoute: (route) { switch (route.name) { // <- here case "/loginstatus": return MaterialPageRoute( settings: const RouteSettings(name: "/parameterpage"), builder: (context) => StatefulLoginStatus( apiAccess: route.arguments as ApiAccess, ), ); case "/repolist": return MaterialPageRoute( settings: const RouteSettings(name: "/repolist"), builder: (context) => RepoListPage(savedUser: route.arguments as SavedUser), ); } return null; }, ); } } class MyHomePage extends StatefulWidget { @override _MyHomePage createState() => _MyHomePage(); } class _MyHomePage extends State { late SharedPreferences prefs; ApiAccess? _apiAccess; var loggedIn = false; void _autoLogin() async { prefs = await SharedPreferences.getInstance(); final token = prefs.getString("token"); final instance = prefs.getString("instance"); if(token != null && instance != null) { await prefs.setBool("autoLogin", true); setState(() { loggedIn = true; _apiAccess = ApiAccess(instance, token); }); print("Auto login"); } } @override void initState() { super.initState(); _autoLogin(); } @override Widget build(BuildContext context) { return (loggedIn) ? StatefulLoginStatus(apiAccess: _apiAccess!) : const LoginPage(title: "Login to Gitea"); } } class LoginPage extends StatelessWidget { const LoginPage({Key? key, required this.title}) : super(key: key); final String title; @override Widget build(BuildContext context) { final media = MediaQuery.of(context).size; return Scaffold( appBar: AppBar( title: Text(title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text("Login to Gitea", style: Theme.of(context).textTheme.headline4), SizedBox( width: (media.width > 600) ? media.width * 0.5 : media.width * 0.9, child: const StatefulLoginForm(), ) ], ), )); } }