import 'package:flutter/material.dart'; import 'package:gitea_client/model/repouser.dart'; import 'package:gitea_client/model/user.dart'; import 'package:gitea_client/widget/code_page.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:gitea_client/widget/repo_overview.dart'; import 'package:gitea_client/widget/search_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) => MainPage(savedUser: route.arguments as SavedUser), ); case "/search": return MaterialPageRoute( settings: const RouteSettings(name: "/search"), builder: (context) => SearchPage(user: route.arguments as SavedUser), ); case "/repopage": final repouser = route.arguments as RepoUser; return MaterialPageRoute( settings: const RouteSettings(name: "/repopage"), builder: (context) => RepoPage(repo: repouser.repository, user: repouser.user)); case "/fileview": final data = route.arguments as CodePageData; return MaterialPageRoute( settings: const RouteSettings(name: "/fileview"), builder: (context) => CodePage(filePath: data.filePath, repo: data.repo, owner: data.owner, user: data.user)); } 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(), ) ], ), )); } }