@@ -569,13 +569,13 @@ class _InputWindowState extends State<InputWindow> {
569569 });
570570 },
571571 children: const [
572- Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .scoreboard_rounded), Text ("Scoreboard" )]),
573- Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .table_rows_rounded), Text ("Gameplan" )]),
574- Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .leaderboard), Text ("Liveplan" )]),
575- Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .card_membership_rounded), Text ("Gamestart" )]),
576- Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .campaign_rounded), Text ("Ad" )]),
577- Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .podcasts_rounded), Text ("Stream Started" )]),
578- Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .replay_rounded), Text ("Replay Started" )]),
572+ Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .scoreboard_rounded), Text ("Scoreboard" , maxLines : 1 , overflow : TextOverflow .ellipsis )]),
573+ Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .table_rows_rounded), Text ("Gameplan" , maxLines : 1 , overflow : TextOverflow .ellipsis )]),
574+ Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .leaderboard), Text ("Liveplan" , maxLines : 1 , overflow : TextOverflow .ellipsis )]),
575+ Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .card_membership_rounded), Text ("Gamestart" , maxLines : 1 , overflow : TextOverflow .ellipsis )]),
576+ Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .campaign_rounded), Text ("Ad" , maxLines : 1 , overflow : TextOverflow .ellipsis )]),
577+ Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .podcasts_rounded), Text ("Stream Started" , maxLines : 1 , overflow : TextOverflow .ellipsis )]),
578+ Column (mainAxisAlignment: MainAxisAlignment .center, children: [Icon (Icons .replay_rounded), Text ("Replay Started" , maxLines : 1 , overflow : TextOverflow .ellipsis )]),
579579 ],
580580 );
581581 }));
@@ -598,19 +598,20 @@ class _InputWindowState extends State<InputWindow> {
598598 c = Colors .orange;
599599 }
600600
601- final size = error == null ? 1 : 5 ;
602- return Expanded (flex: size, child:
603- Material (color: c, child: InkWell (
601+ if (error == null )
602+ return SizedBox .fromSize (size: Size .fromHeight (10 ), child: ColoredBox (color: c));
603+
604+ return Material (color: c, child: InkWell (
604605 onTap: f as void Function ()? , child:
605- Padding (padding : const EdgeInsets . symmetric (horizontal : 4 , vertical : 2 ) , child:
606- Stack (fit : StackFit .expand, alignment : Alignment .center, children : [
607- Center (child: Text (error ?? "" ,
608- textAlign: TextAlign .center,
609- style: const TextStyle ( fontWeight: FontWeight .bold, fontSize: 18 , ),
610- )),
611- ] ),
612- ),
613- ))
606+ SizedBox (height : 30 , child:
607+ Padding (padding : const EdgeInsets . symmetric (horizontal : 4 , vertical : 2 ), child :
608+ Center (child: Text (error,
609+ textAlign: TextAlign .center,
610+ style: const TextStyle (fontWeight: FontWeight .bold, fontSize: 18 ),
611+ )),
612+ ),
613+ )
614+ )
614615 );
615616 }
616617
@@ -690,6 +691,71 @@ class _InputWindowState extends State<InputWindow> {
690691 };
691692 }
692693
694+ Widget widgets (Matchday md) {
695+ return CustomScrollView (slivers: [
696+ SliverToBoxAdapter (child:
697+ AnimatedBuilder (
698+ animation: Listenable .merge ([ws.connection, ws.client.boss, ws.server.clientsConnected]),
699+ builder: (conext, _) { return blockWSStatus (md); }),
700+ ),
701+ SliverLayoutBuilder ( builder: (context, constraints) {
702+ final double visibleHeight = constraints.remainingPaintExtent;
703+
704+ final double teamMinHeight = 120 ;
705+ final double goalsMinHeight = 120 ;
706+ final double timeMinHeight = 120 ;
707+ final double toggleButtonMinHeight = 10 ;
708+ final double widgetsMinHeight = 60 ;
709+
710+ final double allMinHeight
711+ = teamMinHeight + goalsMinHeight + timeMinHeight
712+ + toggleButtonMinHeight + widgetsMinHeight;
713+
714+ final double minRequiredHeight = _showWidgets
715+ ? allMinHeight
716+ : allMinHeight - widgetsMinHeight;
717+
718+ final double safeHeight = visibleHeight > minRequiredHeight
719+ ? visibleHeight
720+ : minRequiredHeight;
721+
722+ return SliverToBoxAdapter (child: SizedBox (height: safeHeight, child:
723+ Column (children: [
724+ Expanded (flex: 20 , child: Container (
725+ constraints: BoxConstraints (minHeight: teamMinHeight),
726+ child: blockTeams (md, recAct))),
727+ Expanded (flex: 28 , child: Container (
728+ constraints: BoxConstraints (minHeight: goalsMinHeight),
729+ child: blockGoals (md, recAct))),
730+ Expanded (flex: 35 , child: Container (
731+ constraints: BoxConstraints (minHeight: timeMinHeight),
732+ child: blockTime (md, recAct))),
733+ Expanded (flex: 5 , child: Container (
734+ constraints: BoxConstraints (minHeight: toggleButtonMinHeight, maxWidth: 40 ),
735+ child: TextButton (
736+ style: TextButton .styleFrom (
737+ padding: EdgeInsets .zero,
738+ tapTargetSize: MaterialTapTargetSize .shrinkWrap,
739+ ),
740+ onPressed: () => setState (() => _showWidgets = ! _showWidgets),
741+ child: LayoutBuilder (builder: (context, constraints) {
742+ return
743+ Icon (
744+ _showWidgets
745+ ? Icons .keyboard_arrow_down
746+ : Icons .keyboard_arrow_up,
747+ size: constraints.biggest.shortestSide);}
748+ ))
749+ )),
750+ if (_showWidgets)
751+ Expanded (flex: 12 , child: Container (
752+ constraints: BoxConstraints (minHeight: widgetsMinHeight),
753+ child: blockWidgets (md, recAct))),
754+ ])));
755+ })
756+ ]);
757+ }
758+
693759 @override
694760 Widget build (BuildContext context) {
695761 // debugPrint("Matchday: ${mdl.value}\n\n");
@@ -709,33 +775,13 @@ class _InputWindowState extends State<InputWindow> {
709775 body: ValueListenableBuilder <Matchday >(
710776 valueListenable: mdl,
711777 builder: (context, md, _) {
712- if (md.meta.game.ended) return Column ();
713- return Column (
714- children: [
715- AnimatedBuilder (
716- animation: Listenable .merge ([ws.connection, ws.client.boss, ws.server.clientsConnected]),
717- builder: (conext, _) { return blockWSStatus (md); }),
718- Expanded (flex: 18 , child: blockTeams (md, recAct)),
719- Expanded (flex: 25 , child: blockGoals (md, recAct)),
720- Expanded (flex: 35 , child: blockTime (md, recAct)),
721- Expanded (flex: 5 , child: TextButton (
722- style: TextButton .styleFrom (
723- padding: EdgeInsets .zero,
724- tapTargetSize: MaterialTapTargetSize .shrinkWrap,
725- ),
726- onPressed: () => setState (() => _showWidgets = ! _showWidgets),
727- child: LayoutBuilder (builder: (context, constraints) {
728- return
729- Icon (
730- _showWidgets
731- ? Icons .keyboard_arrow_down
732- : Icons .keyboard_arrow_up,
733- size: constraints.biggest.shortestSide);}
734- ))),
735- if (_showWidgets)
736- Expanded (flex: 10 , child: blockWidgets (md, recAct)),
737- ]
738- );
778+ if (md.meta.game.ended) {
779+ return TextButton (
780+ child: Text ("UNEND GAME" ),
781+ onPressed: () => mdl.value.setEnded (false , send: ws.sendSignal)
782+ );
783+ }
784+ return widgets (md);
739785 }
740786 )
741787 )
0 commit comments