This commit is contained in:
ImBenji
2024-02-27 18:53:21 +00:00
parent 2d2dcdaecb
commit 2ef40e6b27
4 changed files with 183 additions and 27 deletions

View File

@@ -3,6 +3,7 @@
import 'package:bus_infotainment/pages/components/ibus_display.dart';
import 'package:bus_infotainment/singletons/live_information.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class pages_Home extends StatelessWidget {
const pages_Home({super.key});
@@ -30,7 +31,13 @@ class pages_Home extends StatelessWidget {
height: 10,
),
_QuickAnnouncements(),
_QuickAnnouncements_IBUS(),
SizedBox(
height: 10,
),
QuickAnnouncement(),
],
)
@@ -39,27 +46,27 @@ class pages_Home extends StatelessWidget {
}
}
class _QuickAnnouncements extends StatefulWidget {
class _QuickAnnouncements_IBUS extends StatefulWidget {
_QuickAnnouncements({super.key});
_QuickAnnouncements_IBUS({super.key});
@override
State<_QuickAnnouncements> createState() => _QuickAnnouncementsState();
State<_QuickAnnouncements_IBUS> createState() => _QuickAnnouncementsState_IBUS();
}
class _QuickAnnouncementsState extends State<_QuickAnnouncements> {
class _QuickAnnouncementsState_IBUS extends State<_QuickAnnouncements_IBUS> {
List<Widget> announcements = [];
int _currentIndex = 0;
_QuickAnnouncementsState() {
_QuickAnnouncementsState_IBUS() {
LiveInformation liveInformation = LiveInformation();
for (ManualAnnouncementEntry announcement in liveInformation.manualAnnouncements) {
announcements.add(
_QuickAnnouncement(announcement: announcement, index: liveInformation.manualAnnouncements.indexOf(announcement))
_QuickAnnouncement_IBUS(announcement: announcement, index: liveInformation.manualAnnouncements.indexOf(announcement))
);
}
}
@@ -322,12 +329,12 @@ int wrap(int i, int j, int length) {
return ((i - j) % length + length) % length;
}
class _QuickAnnouncement extends StatelessWidget {
class _QuickAnnouncement_IBUS extends StatelessWidget {
final ManualAnnouncementEntry announcement;
final int index;
const _QuickAnnouncement({super.key, required this.announcement, required this.index});
const _QuickAnnouncement_IBUS({super.key, required this.announcement, required this.index});
@override
Widget build(BuildContext context) {
@@ -407,4 +414,164 @@ class _QuickAnnouncement extends StatelessWidget {
);
}
}
class QuickAnnouncement extends StatelessWidget {
List<Widget> announcementButtons = [];
QuickAnnouncement({super.key}){
LiveInformation liveInformation = LiveInformation();
for (ManualAnnouncementEntry entry in liveInformation.manualAnnouncements) {
announcementButtons.add(
_QuickAnnouncement_Entry(manualAnnouncementEntry: entry)
);
}
}
int _currentIndex = 0;
@override
Widget build(BuildContext context) {
List<Widget> UsingAnnouncements = [];
for (int i = 0; i < 4; i++) {
Widget widget = announcementButtons[wrap(_currentIndex + i, 0, announcementButtons.length)];
UsingAnnouncements.add(widget);
UsingAnnouncements.add(
SizedBox(
height: 10,
)
);
}
// TODO: implement build
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(10)),
color: Colors.grey.shade900,
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.3),
blurRadius: 4,
spreadRadius: 4
)
]
),
padding: EdgeInsets.all(10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Container(
decoration: BoxDecoration(
color: Colors.grey.shade800,
borderRadius: BorderRadius.circular(5),
),
padding: EdgeInsets.all(8),
child: Text(
"Quick Announcements",
style: GoogleFonts.montserrat(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white,
height: 1
),
),
),
// Container
ElevatedButton(
onPressed: () {
_currentIndex = wrap(_currentIndex + 4, 0, announcementButtons.length);
// setState(() {});
},
child: const Icon(
Icons.arrow_back,
color: Colors.white,
)
),
ElevatedButton(
onPressed: () {
_currentIndex = wrap(_currentIndex + 4, 0, announcementButtons.length);
// setState(() {});
},
child: const Icon(
Icons.arrow_forward,
color: Colors.white,
)
)
],
),
Container(
margin: EdgeInsets.symmetric(vertical: 10),
height: 1,
color: Colors.grey.shade600,
),
...UsingAnnouncements,
],
)
);
}
}
class _QuickAnnouncement_Entry extends StatelessWidget {
final ManualAnnouncementEntry manualAnnouncementEntry;
const _QuickAnnouncement_Entry({super.key, required this.manualAnnouncementEntry});
@override
Widget build(BuildContext context) {
// TODO: implement build
return Container(
decoration: BoxDecoration(
color: Colors.grey.shade800,
borderRadius: BorderRadius.circular(5),
),
padding: EdgeInsets.all(8),
width: double.infinity,
child: Text(
manualAnnouncementEntry.shortName,
style: GoogleFonts.montserrat(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white
),
),
);
}
}