Client/lib/app.dart
2023-02-20 13:32:14 +01:00

124 lines
3.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:marianum_mobile/screen/pages/timetable/timetable.dart';
import 'package:provider/provider.dart';
import 'dataOld/incommingPackets/talkNotificationsPacket.dart';
import 'screen/pages/files/files.dart';
import 'screen/pages/more/overhang.dart';
import 'screen/pages/talk/chatList.dart';
import 'screen/settings/settings.dart';
class App extends StatefulWidget {
const App({Key? key}) : super(key: key);
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
int currentPage = 0;
@override
Widget build(BuildContext context) {
final PageController pageController = PageController();
return Scaffold(
resizeToAvoidBottomInset: false,
appBar: AppBar(
title: const Text("Marianum Fulda"),
actions: <Widget>[
IconButton(
padding: const EdgeInsets.only(right: 15),
icon: const Icon(Icons.settings),
onPressed: () {
Navigator.push(context, MaterialPageRoute(builder: (context) => const Settings()));
},
)
],
),
body: Column(
children: [
Visibility(
visible: false,
child: LinearProgressIndicator(
backgroundColor: Colors.transparent,
valueColor: AlwaysStoppedAnimation(Theme.of(context).primaryColor),
minHeight: 5,
),
),
Flexible(
child: PageView(
controller: pageController,
children: const [
Timetable(),
ChatList(),
Files(),
Overhang(),
],
onPageChanged: (page) {
setState(() {
currentPage = page;
});
},
),
)
],
),
bottomNavigationBar: BottomNavigationBar(
items: [
const BottomNavigationBarItem(icon: Icon(Icons.calendar_month), label: "Vertretung"),
BottomNavigationBarItem(icon: Stack(
children: [
const Icon(Icons.chat),
Consumer<TalkNotificationsPacket>(
builder: (context, data, child) {
return Visibility(
visible: data.amount != 0,
child: Positioned(
right: 0,
child: Container(
padding: const EdgeInsets.all(1),
decoration: BoxDecoration(
color: Colors.red,
borderRadius: BorderRadius.circular(6),
),
constraints: const BoxConstraints(
minWidth: 12,
minHeight: 12,
),
child: Text(
"${data.amount}",
style: const TextStyle(
color: Colors.black,
fontSize: 10,
),
textAlign: TextAlign.center,
),
),
),
);
},
)
],
), label: "Talk"),
const BottomNavigationBarItem(icon: Icon(Icons.folder), label: "Dateien"),
const BottomNavigationBarItem(icon: Icon(Icons.more_horiz), label: "Mehr"),
],
selectedItemColor: Theme.of(context).primaryColor,
unselectedItemColor: Colors.grey,
showUnselectedLabels: true,
showSelectedLabels: true,
currentIndex: currentPage,
onTap: (item) {
setState(() {
currentPage = item;
pageController.jumpToPage(item);
});
},
),
);
}
}