import 'package:denikprogramatora/okna/app.dart'; import 'package:denikprogramatora/okna/signin_page.dart'; import 'package:denikprogramatora/utils/devicecontainer.dart'; import 'package:denikprogramatora/utils/loading_widget.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:responsive_sizer/responsive_sizer.dart'; import 'package:url_launcher/url_launcher_string.dart'; import '../utils/my_container.dart'; import '../utils/new_record_dialog.dart'; import '../utils/vzhled.dart'; import 'all_records.dart'; /* Copyright (C) 2022 Matyáš Caras a Richard Pavlikán This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ class NastaveniOkno extends StatefulWidget { const NastaveniOkno({super.key}); @override State createState() => _NastaveniOknoState(); } class _NastaveniOknoState extends State { var _loading = true; var name = "error"; @override void initState() { super.initState(); if (FirebaseAuth.instance.currentUser == null) { Navigator.pushAndRemoveUntil( context, MaterialPageRoute(builder: (c) => const SignInPage()), (route) => false); return; } name = FirebaseAuth.instance.currentUser!.displayName!; setState(() { _loading = false; }); } @override Widget build(BuildContext context) { return Scaffold( body: SingleChildScrollView( child: Center( child: SizedBox( width: 90.w, height: 100.h, child: (_loading) ? const LoadingWidget() : Column(children: [ DeviceContainer( mainAxisAlignmentDesktop: MainAxisAlignment.spaceBetween, children: [ MyContainer( width: (Device.screenType == ScreenType.mobile) ? 90.w : 35.w, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ if (name != "error") Text("Ahoj $name"), TextButton( onPressed: () => showAboutDialog( context: context, applicationName: "Kodelog", applicationVersion: "1.1.0", applicationLegalese: "©️ 2023 Matyáš Caras a Richard Pavlikán,\n vydáno pod licencí AGPLv3", children: [ TextButton( child: const Text("Zdrojový kód"), onPressed: () => launchUrlString( "https://github.com/Royal-Buccaneers/kodelog"), ) ]), child: const Text( "Licence", style: Vzhled.textBtn, ), ), TextButton( onPressed: () async { await FirebaseAuth.instance.signOut(); if (!mounted) return; Navigator.pushAndRemoveUntil( context, MaterialPageRoute( builder: (c) => const SignInPage()), (route) => false); }, child: const Text( "Odhlásit se", style: Vzhled.textBtn, ), ) ], ), ), MyContainer( width: (Device.screenType == ScreenType.mobile) ? 90.w : 40.w, child: DeviceContainer( mainAxisAlignmentDesktop: MainAxisAlignment.spaceBetween, children: [ TextButton( onPressed: () => Navigator.of(context) .pushReplacement(MaterialPageRoute( builder: (context) => const HlavniOkno())), child: const Text( "Denní přehled", style: TextStyle(color: Vzhled.textColor), ), ), const SizedBox(height: 5), TextButton( onPressed: () { Navigator.pushReplacement( context, MaterialPageRoute( builder: (context) => const AllRecordsPage())); }, child: const Text( "Všechny\nzáznamy", style: TextStyle(color: Vzhled.textColor), ), ), const SizedBox(height: 5), TextButton( onPressed: () {}, child: const Text( "Nastavení", style: TextStyle( color: Vzhled.textColor, fontWeight: FontWeight.bold, ), ), ), const SizedBox(height: 5), OutlinedButton( onPressed: () => showCreateItemDialog(context), style: Vzhled.orangeCudlik, child: const Text( "Přidat záznam", ), ) ], ), ), ], ), const SizedBox(height: 5), Expanded( child: MyContainer( width: 90.w, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( decoration: const BoxDecoration( borderRadius: BorderRadius.all( Radius.circular( 10, ), ), color: Vzhled.purple, ), width: 400, child: InkWell( onTap: () => showProgrammersDialog(context, jenMenit: true), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: const [ Text( "Upravit programátory", style: Vzhled.nadpis, ) ], ), ), ), ), const SizedBox( height: 15, ), Container( decoration: const BoxDecoration( borderRadius: BorderRadius.all( Radius.circular( 10, ), ), color: Vzhled.purple), width: 400, child: InkWell( onTap: () => showCategoriesDialog(context, [], jenMenit: true), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: const [ Text( "Upravit kategorie", style: Vzhled.nadpis, ) ], ), ), ), ), const SizedBox( height: 15, ), Container( decoration: const BoxDecoration( borderRadius: BorderRadius.all( Radius.circular( 10, ), ), color: Vzhled.purple), width: 400, child: InkWell( onTap: () => showEditJazyk(), child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: const [ Text( "Oblíbený jazyk", style: Vzhled.nadpis, ) ], ), ), ), ), ]), )) ]), ), )), ); } showEditJazyk() { showDialog( context: context, builder: (_) => AlertDialog( title: const Text("Oblíbený jazyk", style: Vzhled.velkyText), scrollable: true, content: SizedBox( width: 20.w, child: StreamBuilder( stream: ref.snapshots(), builder: (context, snapshot) { if (snapshot.hasData) { return DropdownButton( value: snapshot.data!.data()!["favourite"], dropdownColor: Vzhled.backgroundColor, items: jazyky .map( (e) => DropdownMenuItem( value: e["jazyk"], child: SizedBox( width: 17.w, child: Text(e["jazyk"])), ), ) .toList(), onChanged: (value) { ref.update({"favourite": value!}); }); } return const LoadingWidget(); }), ), )); } }