From f71bd6ad2179ca28c2625df5be9f46a1aeb775e3 Mon Sep 17 00:00:00 2001 From: Carlos Lopez-Rosario Date: Thu, 30 Apr 2020 21:19:23 -0400 Subject: [PATCH 1/6] logic for game card --- lib/models/game_cards.dart | 181 +++++++++++++++++++++++++++++++++++++ lib/monthly_calendar.dart | 177 ++++++++++++++---------------------- lib/screens/sport.dart | 8 +- 3 files changed, 253 insertions(+), 113 deletions(-) create mode 100644 lib/models/game_cards.dart diff --git a/lib/models/game_cards.dart b/lib/models/game_cards.dart new file mode 100644 index 0000000..1cde687 --- /dev/null +++ b/lib/models/game_cards.dart @@ -0,0 +1,181 @@ +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import '../screens/sport_schedule.dart'; +import 'dart:convert'; + +class GameCard extends StatefulWidget { + final int sportID; + + GameCard(this.sportID); + + @override + _SportsCard createState() => _SportsCard(sportID); +} + +//List _selectedEvents; //original that makes events work +List + _selectedEvents; //Removing the allows it to still work. Proceed with caution +DateTime selectedDay; +Map> _events; + +class _SportsCard extends State with TickerProviderStateMixin { + int sportID; + + _SportsCard(this.sportID); + + AnimationController _animationController; + + static final sportUrl = + 'https://charlotte49ers.com/services/adaptive_components.ashx?type=scoreboard&start=0&count=80'; + + Future> getEvents() async { + var url = '$sportUrl&sport_id=$sportID&name=&extra=%7B%7D'; + + http.Response response = await http.get(url); + Iterable games = json.decode(response.body); + + return games + .map((json) => sport_schedule.fromJson(json)) + .toList(); + //return games.map((e) => sport_schedule.fromJson(e)).toList(); + } + + Future>> getGames() async { + Map> mapGrab = {}; + + List eventInfo = await getEvents(); + + for (int i = 0; i < eventInfo.length; i++) { + var sportEvent = DateTime(eventInfo[i].date.year, eventInfo[i].date.month, + eventInfo[i].date.day); + var original = mapGrab[sportEvent]; + + if (original == null) { + //print("null"); + mapGrab[sportEvent] = [eventInfo[i]]; + } else { + //print(eventInfo[i].date); + mapGrab[sportEvent] = List.from(original)..addAll([eventInfo[i]]); + } + } + return mapGrab; + } + + @override + void initState() { + //final _selectedDay = DateTime.now(); + + //_selectedEvents = _events[_selectedDay] ?? []; + _selectedEvents = []; + _animationController = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 400), + ); + + _animationController.forward(); + + WidgetsBinding.instance.addPostFrameCallback((_) { + getGames().then((val) => setState(() { + _events = val; + })); + }); + + super.initState(); + } + + @override + void dispose() { + _animationController.dispose(); + super.dispose(); + } + + //----- Builds event Lister ----- + @override + Widget build(BuildContext context) { + return Center( + child: Container( + child: Expanded(child: _eventLister()), + ), + ); + } + + //----- Creates event display ----- + + Text _pastGameScore( + String homeAway, String winLoss, String uncc, String opponent) { + if (homeAway == "H" || homeAway == "T") { + return (Text('$uncc - $opponent')); + } else { + return (Text('$opponent - $uncc')); + } + } + + Image _homeAwayImageOrder(String h, String opposingTeam, bool l) { + if ((h == "H") == l) { + return (Image( + image: AssetImage('assets/school_logos/uncc.png'), + width: 50, + )); + } else { + return (Image.network( + 'https://charlotte49ers.com' + opposingTeam, + width: 50.0, + )); + } + } + + Widget _eventLister() { + var _months = {1:'JAN', 2:'FEB', 3:'MAR', 4:'APR', 5:'MAY', 6:'JUN', + 7:'JUL', 8:'AUG', 9:'SEP', 10:'OCT', 11:'NOV', 12:'DEC'}; + return SizedBox( + height: 62, + child: Column( + children: _selectedEvents + .map((event) => Container( + decoration: BoxDecoration( + border: Border.all( + color: Color.fromRGBO(0, 112, 60, 1), //UNCC Green + width: 0.8, + ), + borderRadius: BorderRadius.circular(12.0), + ), + height: 70.0, + margin: + const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), + child: ListTile( + leading: _homeAwayImageOrder( + event.location_indicator.toString(), + event.image.toString(), true), + title: Wrap( + children: [ + if (event.status.toString() == "null") // no game yet + Text( + '${_months[event.date.month]} ${event.date.day.toString()}') + else + _pastGameScore( + event.location_indicator.toString(), + event.status.toString(), + event.team_score.toString(), + event.opponent_score.toString()), + ], + ), + + //Type of sport - Location + subtitle: Wrap(children: [ + //Should be either live time or time game will be, nothing for past games + ]), + + trailing: _homeAwayImageOrder( + event.location_indicator.toString(), + event.image.toString(), false), + onTap: () => + print('${event.date}'), //When event display is clicked + ), + )) + .toList(), + ), + ); + } +} + + diff --git a/lib/monthly_calendar.dart b/lib/monthly_calendar.dart index 57ca1b1..78ed940 100644 --- a/lib/monthly_calendar.dart +++ b/lib/monthly_calendar.dart @@ -115,8 +115,7 @@ class _Calendar extends State with TickerProviderStateMixin { child: Column( children: [ _buildCalendar(), - const SizedBox(height: 8.0), - Expanded(child: _eventLister()), + _eventLister(), ], ), ); @@ -272,119 +271,79 @@ class _Calendar extends State with TickerProviderStateMixin { } //----- Creates event display ----- + Text _pastGameScore( + String homeAway, String winLoss, String uncc, String opponent) { + if (homeAway == "H" || homeAway == "T") { + return (Text('$uncc - $opponent')); + } else { + return (Text('$opponent - $uncc')); + } + } + + Image _homeAwayImageOrder(String h, String opposingTeam, bool l) { + if ((h == "H") == l) { + return (Image( + image: AssetImage('assets/school_logos/uncc.png'), + width: 50, + )); + } else { + return (Image.network( + 'https://charlotte49ers.com' + opposingTeam, + width: 50.0, + )); + } + } + Widget _eventLister() { - return ListView( - children: _selectedEvents.map((event) => Container( - decoration: BoxDecoration( - border: Border.all( - color: Color.fromRGBO(0, 112, 60, 1), //UNCC Green - width: 0.8, - ), - - borderRadius: BorderRadius.circular(12.0), - ), - - height: 70.0, - margin: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), - - child: ListTile( - leading: Image.network( - 'https://charlotte49ers.com' + event.image.toString(), - width: 50.0, - ), - title: Wrap( - children: [ - if (event.location_indicator.toString() == "H") - Text( - 'vs. ', - style: TextStyle( //home game - fontSize: 11.6, - ), - ) - else - Text( - 'at ', - style: TextStyle( //away game - fontSize: 11.6, - ), - ), - - Text( - event.opponentTitle.toString(), - style: TextStyle( - fontSize: 11.6, - ), - ) //opponent name - ], - ), - - //Type of sport - Location - subtitle: Text( - event.sportTitle.toString() + " - " + event.location.toString(), - style: TextStyle( - fontSize: 10.3, + var _months = {1:'JAN', 2:'FEB', 3:'MAR', 4:'APR', 5:'MAY', 6:'JUN', + 7:'JUL', 8:'AUG', 9:'SEP', 10:'OCT', 11:'NOV', 12:'DEC'}; + return SizedBox( + height: 78, + child: Column( + children: _selectedEvents + .map((event) => Container( + decoration: BoxDecoration( + border: Border.all( + color: Color.fromRGBO(0, 112, 60, 1), //UNCC Green + width: 0.8, ), + borderRadius: BorderRadius.circular(12.0), ), + height: 70.0, + margin: + const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), + child: ListTile( + leading: _homeAwayImageOrder( + event.location_indicator.toString(), + event.image.toString(), true), + title: Wrap( + children: [ + if (event.status.toString() == "null") // no game yet + Text( + '${_months[event.date.month]} ${event.date.day.toString()}') + else + _pastGameScore( + event.location_indicator.toString(), + event.status.toString(), + event.team_score.toString(), + event.opponent_score.toString()), + ], + ), - trailing: Wrap( - //mainAxisSize: MainAxisSize.min, + //Type of sport - Location + subtitle: Wrap(children: [ + //Should be either live time or time game will be, nothing for past games + ]), - children: [ - //---Score--- - //Game hasn't occured - if (event.status.toString() == "null") - Text("TBD"), - - //---Scores--- - if (event.status.toString() == "W" || event.status.toString() == "L" || event.status.toString() == "T") //Finished games - Text(event.team_score.toString() + " - " + event.opponent_score.toString() + " ") - - else if (event.status.toString() == "N" && event.team_score.toString() != "null" && event.opponent_score.toString() != "null") //Games that don't count - Text(event.team_score.toString() + " - " + event.opponent_score.toString() + " "), - - //---Game Status--- - if (event.status.toString() == "W") //Win - Text( - (" " + event.status.toString() + " "), - style: TextStyle( - color: Colors.white, - backgroundColor: Color.fromRGBO(0, 112, 60, 1), - ) - ), - - if (event.status.toString() == "L" || event.status.toString() == "T") //Lose-Tie - Text( - (" " + event.status.toString() + " "), - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.black, - backgroundColor: Colors.grey, - ) - ), - - if (event.status.toString() == "N" && event.postscore.toString() != "Canceled") //N - Text( - (" " + event.status.toString() + " "), - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.black, - backgroundColor: Colors.grey, - ) - ) - else if (event.team_score.toString() == "null" && event.opponent_score.toString() == "null" - && event.status.toString() == "N") //Game was canceled - Text( - "Canceled", - style: TextStyle( - color: Colors.red, - ) - ), - - ], + trailing: _homeAwayImageOrder( + event.location_indicator.toString(), + event.image.toString(), false), + onTap: () => + print('${event.date}'), //When event display is clicked ), - onTap: () => print('$event tapped!'), //When event display is clicked - ), - )).toList(), + )) + .toList(), + ), ); } } \ No newline at end of file diff --git a/lib/screens/sport.dart b/lib/screens/sport.dart index 6411d02..3710833 100644 --- a/lib/screens/sport.dart +++ b/lib/screens/sport.dart @@ -69,10 +69,10 @@ class Sport extends StatelessWidget { ), body: ListView( children: [ - HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name)), - HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name)), - HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name)), - HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name)), + HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name), sportFilter: _curSport.name,), + HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name), sportFilter: _curSport.name), + HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name), sportFilter: _curSport.name), + HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name), sportFilter: _curSport.name), ], ), drawer: Drawer( From a2950f699796ca619cc1d247c65c502c9dd00763 Mon Sep 17 00:00:00 2001 From: Carlos Lopez-Rosario Date: Fri, 1 May 2020 02:45:54 -0400 Subject: [PATCH 2/6] logic for game card --- assets/school_logos/UNC-Charlotte (1).png | Bin 0 -> 9154 bytes lib/models/game_cards.dart | 257 ++++++++++------------ lib/route_generator.dart | 3 + lib/screens/sport_schedule.dart | 114 ++++++++++ 4 files changed, 228 insertions(+), 146 deletions(-) create mode 100644 assets/school_logos/UNC-Charlotte (1).png diff --git a/assets/school_logos/UNC-Charlotte (1).png b/assets/school_logos/UNC-Charlotte (1).png new file mode 100644 index 0000000000000000000000000000000000000000..bd01193eb3bb39468132962e092f44b489599135 GIT binary patch literal 9154 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 M07*qoM6N<$f?=_U%m4rY literal 0 HcmV?d00001 diff --git a/lib/models/game_cards.dart b/lib/models/game_cards.dart index 1cde687..cee780a 100644 --- a/lib/models/game_cards.dart +++ b/lib/models/game_cards.dart @@ -1,49 +1,27 @@ import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; +import 'package:table_calendar/table_calendar.dart'; + import '../screens/sport_schedule.dart'; import 'dart:convert'; -class GameCard extends StatefulWidget { - final int sportID; - - GameCard(this.sportID); - - @override - _SportsCard createState() => _SportsCard(sportID); -} - -//List _selectedEvents; //original that makes events work -List - _selectedEvents; //Removing the allows it to still work. Proceed with caution -DateTime selectedDay; -Map> _events; - -class _SportsCard extends State with TickerProviderStateMixin { - int sportID; - - _SportsCard(this.sportID); - - AnimationController _animationController; +class GameCardFeed{ static final sportUrl = 'https://charlotte49ers.com/services/adaptive_components.ashx?type=scoreboard&start=0&count=80'; - - Future> getEvents() async { + Future> getEvents(int sportID) async { var url = '$sportUrl&sport_id=$sportID&name=&extra=%7B%7D'; - http.Response response = await http.get(url); Iterable games = json.decode(response.body); - return games .map((json) => sport_schedule.fromJson(json)) .toList(); //return games.map((e) => sport_schedule.fromJson(e)).toList(); } - - Future>> getGames() async { + Future> getGames(int sportID) async { Map> mapGrab = {}; - List eventInfo = await getEvents(); + List eventInfo = await getEvents(sportID); for (int i = 0; i < eventInfo.length; i++) { var sportEvent = DateTime(eventInfo[i].date.year, eventInfo[i].date.month, @@ -55,127 +33,114 @@ class _SportsCard extends State with TickerProviderStateMixin { mapGrab[sportEvent] = [eventInfo[i]]; } else { //print(eventInfo[i].date); - mapGrab[sportEvent] = List.from(original)..addAll([eventInfo[i]]); + mapGrab[sportEvent] = List.from(original) + ..addAll([eventInfo[i]]); } } - return mapGrab; - } - - @override - void initState() { - //final _selectedDay = DateTime.now(); - - //_selectedEvents = _events[_selectedDay] ?? []; - _selectedEvents = []; - _animationController = AnimationController( - vsync: this, - duration: const Duration(milliseconds: 400), - ); - - _animationController.forward(); - - WidgetsBinding.instance.addPostFrameCallback((_) { - getGames().then((val) => setState(() { - _events = val; - })); - }); - - super.initState(); - } - - @override - void dispose() { - _animationController.dispose(); - super.dispose(); - } - - //----- Builds event Lister ----- - @override - Widget build(BuildContext context) { - return Center( - child: Container( - child: Expanded(child: _eventLister()), - ), - ); - } - - //----- Creates event display ----- - - Text _pastGameScore( - String homeAway, String winLoss, String uncc, String opponent) { - if (homeAway == "H" || homeAway == "T") { - return (Text('$uncc - $opponent')); - } else { - return (Text('$opponent - $uncc')); - } - } - - Image _homeAwayImageOrder(String h, String opposingTeam, bool l) { - if ((h == "H") == l) { - return (Image( - image: AssetImage('assets/school_logos/uncc.png'), - width: 50, - )); - } else { - return (Image.network( - 'https://charlotte49ers.com' + opposingTeam, - width: 50.0, - )); - } - } - - Widget _eventLister() { - var _months = {1:'JAN', 2:'FEB', 3:'MAR', 4:'APR', 5:'MAY', 6:'JUN', - 7:'JUL', 8:'AUG', 9:'SEP', 10:'OCT', 11:'NOV', 12:'DEC'}; - return SizedBox( - height: 62, - child: Column( - children: _selectedEvents - .map((event) => Container( - decoration: BoxDecoration( - border: Border.all( - color: Color.fromRGBO(0, 112, 60, 1), //UNCC Green - width: 0.8, - ), - borderRadius: BorderRadius.circular(12.0), - ), - height: 70.0, - margin: - const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), - child: ListTile( - leading: _homeAwayImageOrder( - event.location_indicator.toString(), - event.image.toString(), true), - title: Wrap( - children: [ - if (event.status.toString() == "null") // no game yet - Text( - '${_months[event.date.month]} ${event.date.day.toString()}') - else - _pastGameScore( - event.location_indicator.toString(), - event.status.toString(), - event.team_score.toString(), - event.opponent_score.toString()), - ], - ), - - //Type of sport - Location - subtitle: Wrap(children: [ - //Should be either live time or time game will be, nothing for past games - ]), - - trailing: _homeAwayImageOrder( - event.location_indicator.toString(), - event.image.toString(), false), - onTap: () => - print('${event.date}'), //When event display is clicked - ), - )) - .toList(), - ), - ); + List list = []; + mapGrab.forEach((k, v) => list.add(ScheduleObject(k, v))); + return list; } } +class HorizontalGameCards extends StatelessWidget { + final GameCardFeed gameCard; + final double numCards; + final int sportID; + const HorizontalGameCards({ + Key key, + @required this.gameCard, + this.numCards = 8, + this.sportID, + }) : super(key: key); + + double heightIn(BuildContext context) { + return MediaQuery.of(context).size.height / numCards; + } + + @override + Widget build(BuildContext context) { + var card = gameCard.getGames(sportID); + var events = []; + return SizedBox( + height: heightIn(context),//heightIn(context), + child: FutureBuilder( + future: card, + // ignore: missing_return + builder: (ctx, snapshot) { + print(snapshot); + if (!snapshot.hasData) { + return Center(child: CircularProgressIndicator()); + } else { + events = snapshot.data; + + return ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: events.length, + itemBuilder: (context, index) { + return GameCard( + gameCard: events[index].sportSched[0], + ); + }, + ); + } + }, + ), + ); + } + } + +class ScheduleObject { + DateTime d; + List sportSched; + ScheduleObject(this.d, this.sportSched); +} + + + + + + +class GameCardTest extends StatelessWidget{ + final int sportID; + GameCardTest(this.sportID); + + @override + Widget build(BuildContext context) { + final feed = GameCardFeed(); + return StatefulBuilder( + builder: (context, StateSetter setState) => Scaffold( + appBar: AppBar( + centerTitle: false, + title: Text("49ers"), + backgroundColor: Colors.green, + ), + body: HorizontalGameCards(gameCard: feed, sportID: sportID,), + drawer: Drawer( + child: ListView( + children: [ + DrawerHeader( + child: Text( + 'Drawer Header', + style: TextStyle( + color: Colors.white, + fontSize: 24, + ), + ), + decoration: BoxDecoration( + color: Colors.green, + ), + ), + ListTile( + title: IconButton( + icon: Icon(Icons.home), + onPressed: () => Navigator.pushNamed(context, '/'), + ), + ), + ], + ), + ) + )); + } +} \ No newline at end of file diff --git a/lib/route_generator.dart b/lib/route_generator.dart index 3af16f5..d0d2c0b 100644 --- a/lib/route_generator.dart +++ b/lib/route_generator.dart @@ -1,3 +1,4 @@ +import 'package:capstone_hungry_hippos/models/game_cards.dart'; import 'package:capstone_hungry_hippos/screens/chat.dart'; import 'package:capstone_hungry_hippos/screens/schedule.dart'; import 'package:capstone_hungry_hippos/screens/standing.dart'; @@ -31,6 +32,8 @@ class RouteGenerator { return MaterialPageRoute(builder: (_) => FavoritesManager()); case '/Twitter': return MaterialPageRoute(builder: (_) => TwitterFeed()); + case '/gamecardtest': + return MaterialPageRoute(builder: (_) => GameCardTest(args)); default: return _errorRoute(); } diff --git a/lib/screens/sport_schedule.dart b/lib/screens/sport_schedule.dart index 5dcb470..a7684b4 100644 --- a/lib/screens/sport_schedule.dart +++ b/lib/screens/sport_schedule.dart @@ -62,3 +62,117 @@ class sport_schedule { ); } } + +class GameCard extends StatelessWidget { + const GameCard({ + Key key, + @required this.gameCard, + this.numCards = 1.75, + }) : super(key: key); + + final sport_schedule gameCard; + final double numCards; + + double widthIn(BuildContext context) { + return MediaQuery.of(context).size.width / numCards; + } + + Text _pastGameScore( + String homeAway, String winLoss, String uncc, String opponent) { + if (homeAway == "H" || homeAway == "T") { + return (Text('$uncc - $opponent')); + } else { + return (Text('$opponent - $uncc')); + } + } + + Image _homeAwayImageOrder(String h, String opposingTeam, bool l, BuildContext ctx) { + if ((h == "H") == l) { + return (Image.network( + 'https://fiusports.com/images/logos/UNC-Charlotte.png?width=80&height=80&mode=max' + )); + } else { + return (Image.network( + 'https://charlotte49ers.com' + opposingTeam, + )); + } + } + + @override + Widget build(BuildContext ctx) { + var _months = { + 1: 'JAN', + 2: 'FEB', + 3: 'MAR', + 4: 'APR', + 5: 'MAY', + 6: 'JUN', + 7: 'JUL', + 8: 'AUG', + 9: 'SEP', + 10: 'OCT', + 11: 'NOV', + 12: 'DEC' + }; + var decoration = BoxDecoration( + border: Border.all( + color: Color.fromRGBO(0, 112, 60, 1), //UNCC Green + width: .5, + ), + borderRadius: BorderRadius.circular(12.0), + ); + + var body = Column( + verticalDirection: VerticalDirection.up, + children: [ + Container( + color: Colors.white, + child: ListTile( + leading: SizedBox( + //width: widthIn(ctx)/3 - 5, + child: Container(decoration: decoration,child: _homeAwayImageOrder( + gameCard.location_indicator, + gameCard.image, + true, ctx))), + title: SizedBox( + //width: widthIn(ctx)/3 - 5, + child: Container(decoration: decoration,child: Wrap( + children: [ + if (gameCard.status == "null") // no game yet + Text( + '${_months[gameCard.date.month]} ${gameCard.date.day}') + else + _pastGameScore( + gameCard.location_indicator, + gameCard.status, + gameCard.team_score, + gameCard.opponent_score,), + ], + )) + ), + trailing: SizedBox( + //width: widthIn(ctx)/3 - 5, + child: Container(decoration: decoration,child: _homeAwayImageOrder( + gameCard.location_indicator, + gameCard.image, + false, ctx))), + onTap: () => print('${gameCard.date}'), + ), + ), + ], + ); + + + return SizedBox( + width: widthIn(ctx), + child: Card( + semanticContainer: true, + clipBehavior: Clip.antiAliasWithSaveLayer, + child: Container( + decoration: decoration, + child: body, + ), + ), + ); + } +} From 465eb96f4bb14fd7ce507ab82127aea5205c20c7 Mon Sep 17 00:00:00 2001 From: Carlos Lopez-Rosario Date: Fri, 1 May 2020 11:19:17 -0400 Subject: [PATCH 3/6] logic for game card --- lib/models/game_cards.dart | 49 ---------------------------- lib/route_generator.dart | 3 -- lib/screens/sport.dart | 13 +++++--- lib/screens/sport_schedule.dart | 58 +++++++++++++++++++++++---------- 4 files changed, 48 insertions(+), 75 deletions(-) diff --git a/lib/models/game_cards.dart b/lib/models/game_cards.dart index cee780a..156d767 100644 --- a/lib/models/game_cards.dart +++ b/lib/models/game_cards.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; -import 'package:table_calendar/table_calendar.dart'; import '../screens/sport_schedule.dart'; import 'dart:convert'; @@ -95,52 +94,4 @@ class ScheduleObject { DateTime d; List sportSched; ScheduleObject(this.d, this.sportSched); -} - - - - - - -class GameCardTest extends StatelessWidget{ - final int sportID; - GameCardTest(this.sportID); - - @override - Widget build(BuildContext context) { - final feed = GameCardFeed(); - return StatefulBuilder( - builder: (context, StateSetter setState) => Scaffold( - appBar: AppBar( - centerTitle: false, - title: Text("49ers"), - backgroundColor: Colors.green, - ), - body: HorizontalGameCards(gameCard: feed, sportID: sportID,), - drawer: Drawer( - child: ListView( - children: [ - DrawerHeader( - child: Text( - 'Drawer Header', - style: TextStyle( - color: Colors.white, - fontSize: 24, - ), - ), - decoration: BoxDecoration( - color: Colors.green, - ), - ), - ListTile( - title: IconButton( - icon: Icon(Icons.home), - onPressed: () => Navigator.pushNamed(context, '/'), - ), - ), - ], - ), - ) - )); - } } \ No newline at end of file diff --git a/lib/route_generator.dart b/lib/route_generator.dart index 4ffc765..e0caca6 100644 --- a/lib/route_generator.dart +++ b/lib/route_generator.dart @@ -1,4 +1,3 @@ -import 'package:capstone_hungry_hippos/models/game_cards.dart'; import 'package:capstone_hungry_hippos/screens/chat.dart'; import 'package:capstone_hungry_hippos/screens/schedule.dart'; import 'package:capstone_hungry_hippos/screens/standing.dart'; @@ -32,8 +31,6 @@ class RouteGenerator { return MaterialPageRoute(builder: (_) => FavoritesManager()); case '/Twitter': return MaterialPageRoute(builder: (_) => TwitterFeed()); - case '/gamecardtest': - return MaterialPageRoute(builder: (_) => GameCardTest(args)); default: return _errorRoute(); } diff --git a/lib/screens/sport.dart b/lib/screens/sport.dart index 25a15e3..201374b 100644 --- a/lib/screens/sport.dart +++ b/lib/screens/sport.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import '../news/feed.dart'; +import '../models/game_cards.dart'; class Sport extends StatelessWidget { static final List colorList = [ @@ -13,6 +14,7 @@ class Sport extends StatelessWidget { ]; final feed = Feed(); // was var not final + final gameCard = GameCardFeed(); final String imageMale = 'images/male.png'; final String imageFemale = 'images/female.png'; @@ -43,9 +45,9 @@ class Sport extends StatelessWidget { return StatefulBuilder( builder: (context, StateSetter setState) => Scaffold( appBar: AppBar( - centerTitle: false, - title: buildDropdownButton(selectedSport, setState), - backgroundColor: _curSport.color, + centerTitle: false, + title: buildDropdownButton(selectedSport, setState), + backgroundColor: _curSport.color, //--Gender Switch-- Need to make condition to determine gender actions: [ @@ -54,8 +56,8 @@ class Sport extends StatelessWidget { value: genderSport, onChanged: (value) { setState(() { - genderSport = value; - _genderSwitcherCheck(); + genderSport = value; + _genderSwitcherCheck(); }); }, inactiveThumbColor: Colors.lightBlue, @@ -68,6 +70,7 @@ class Sport extends StatelessWidget { ), body: ListView( children: [ + HorizontalGameCards(gameCard: gameCard, sportID: sport_ID,), HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name), sportFilter: _curSport.name,), ], ), diff --git a/lib/screens/sport_schedule.dart b/lib/screens/sport_schedule.dart index a7684b4..47e5308 100644 --- a/lib/screens/sport_schedule.dart +++ b/lib/screens/sport_schedule.dart @@ -67,7 +67,7 @@ class GameCard extends StatelessWidget { const GameCard({ Key key, @required this.gameCard, - this.numCards = 1.75, + this.numCards = 2.25, }) : super(key: key); final sport_schedule gameCard; @@ -89,7 +89,7 @@ class GameCard extends StatelessWidget { Image _homeAwayImageOrder(String h, String opposingTeam, bool l, BuildContext ctx) { if ((h == "H") == l) { return (Image.network( - 'https://fiusports.com/images/logos/UNC-Charlotte.png?width=80&height=80&mode=max' + 'https://fiusports.com/images/logos/UNC-Charlotte.png?width=80&height=80&mode=max', )); } else { return (Image.network( @@ -97,6 +97,16 @@ class GameCard extends StatelessWidget { )); } } + + Color winLoss(String wl){ + if (wl == "W") { + return Colors.green; + } else if (wl == "L") { + return Colors.red; + } else { + return Colors.grey; + } + } @override Widget build(BuildContext ctx) { @@ -116,12 +126,12 @@ class GameCard extends StatelessWidget { }; var decoration = BoxDecoration( border: Border.all( - color: Color.fromRGBO(0, 112, 60, 1), //UNCC Green - width: .5, + color: winLoss(gameCard.status), //UNCC Green + width: 1.2, ), - borderRadius: BorderRadius.circular(12.0), + borderRadius: BorderRadius.circular(2), ); - + var logoWidth = 4.5; var body = Column( verticalDirection: VerticalDirection.up, children: [ @@ -129,18 +139,19 @@ class GameCard extends StatelessWidget { color: Colors.white, child: ListTile( leading: SizedBox( - //width: widthIn(ctx)/3 - 5, - child: Container(decoration: decoration,child: _homeAwayImageOrder( + width: widthIn(ctx)/logoWidth, + child: _homeAwayImageOrder( gameCard.location_indicator, gameCard.image, - true, ctx))), - title: SizedBox( - //width: widthIn(ctx)/3 - 5, - child: Container(decoration: decoration,child: Wrap( + true, ctx)), + title: FittedBox( + fit: BoxFit.contain, + child: Wrap( children: [ if (gameCard.status == "null") // no game yet Text( - '${_months[gameCard.date.month]} ${gameCard.date.day}') + '${_months[gameCard.date.month]} ${gameCard.date.day}' + ) else _pastGameScore( gameCard.location_indicator, @@ -148,15 +159,26 @@ class GameCard extends StatelessWidget { gameCard.team_score, gameCard.opponent_score,), ], - )) + ) + ), + subtitle: FittedBox( + fit: BoxFit.contain, + child: Wrap( + children: [ + if (gameCard.status != "null") // no game yet + Text( + '${_months[gameCard.date.month]} ${gameCard.date.day}', textAlign: TextAlign.center, + ), + ], + ) ), trailing: SizedBox( - //width: widthIn(ctx)/3 - 5, - child: Container(decoration: decoration,child: _homeAwayImageOrder( + width: widthIn(ctx)/logoWidth, + child: _homeAwayImageOrder( gameCard.location_indicator, gameCard.image, - false, ctx))), - onTap: () => print('${gameCard.date}'), + false, ctx)), + onTap: () => print('${gameCard.status}'), ), ), ], From 0c1158c27ba4ba04d16eb2f6302f364d28b5736d Mon Sep 17 00:00:00 2001 From: Carlos Lopez-Rosario Date: Fri, 1 May 2020 11:22:55 -0400 Subject: [PATCH 4/6] All green --- lib/screens/sport.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/screens/sport.dart b/lib/screens/sport.dart index 201374b..5a1c3ec 100644 --- a/lib/screens/sport.dart +++ b/lib/screens/sport.dart @@ -5,12 +5,12 @@ import '../models/game_cards.dart'; class Sport extends StatelessWidget { static final List colorList = [ const Item('Football', Colors.green,[3]), - const Item("Basketball", Colors.red,[5,13]), - const Item("Soccer", Colors.pinkAccent,[9,17]), - const Item('Baseball', Colors.orange,[1]), - const Item('Softball', Colors.yellow,[12]), - const Item('Volleyball', Colors.blue,[20]), - const Item('Tennis', Colors.yellowAccent,[10,18]), + const Item("Basketball", Colors.green,[5,13]), + const Item("Soccer", Colors.green,[9,17]), + const Item('Baseball', Colors.green,[1]), + const Item('Softball', Colors.green,[12]), + const Item('Volleyball', Colors.green,[20]), + const Item('Tennis', Colors.green,[10,18]), ]; final feed = Feed(); // was var not final From 0d95b669603b3bae0ec25c9037fc2f20a3a9cbff Mon Sep 17 00:00:00 2001 From: Carlos Lopez-Rosario Date: Fri, 1 May 2020 13:25:45 -0400 Subject: [PATCH 5/6] Vertical Articles for sport Page --- lib/models/game_cards.dart | 4 +-- lib/news/article.dart | 56 +++++++++++++++++++++++++++++++++ lib/news/feed.dart | 40 +++++++++++++++++++++++ lib/screens/sport.dart | 7 +++-- lib/screens/sport_schedule.dart | 10 +++--- pubspec.lock | 24 +++++++------- 6 files changed, 120 insertions(+), 21 deletions(-) diff --git a/lib/models/game_cards.dart b/lib/models/game_cards.dart index 156d767..f36156d 100644 --- a/lib/models/game_cards.dart +++ b/lib/models/game_cards.dart @@ -63,12 +63,12 @@ class HorizontalGameCards extends StatelessWidget { var card = gameCard.getGames(sportID); var events = []; return SizedBox( - height: heightIn(context),//heightIn(context), + height: heightIn(context), child: FutureBuilder( future: card, // ignore: missing_return builder: (ctx, snapshot) { - print(snapshot); + //print(snapshot); if (!snapshot.hasData) { return Center(child: CircularProgressIndicator()); } else { diff --git a/lib/news/article.dart b/lib/news/article.dart index 033f85b..9019538 100644 --- a/lib/news/article.dart +++ b/lib/news/article.dart @@ -90,3 +90,59 @@ class ArticleCard extends StatelessWidget { ); } } + +class ArticleCardVert extends StatelessWidget { + const ArticleCardVert({ + Key key, + @required this.article, + this.numCards = 2.1, + }) : super(key: key); + + final Article article; + final double numCards; + + double heightIn(BuildContext context) { + return (MediaQuery.of(context).size.height * 7/8) / numCards; + } + + @override + Widget build(BuildContext context) { + var decoration = BoxDecoration( + image: DecorationImage( + image: NetworkImage( + article.thumbUrl, + ), + fit: BoxFit.cover, + ), + ); + + var body = Column( + verticalDirection: VerticalDirection.up, + children: [ + Container( + color: Colors.white, + child: ListTile( + title: Text( + article.mediumHeadline, + overflow: TextOverflow.ellipsis, + maxLines: 2, + ), + ), + ), + ], + ); + + + return SizedBox( + height: heightIn(context), + child: Card( + semanticContainer: true, + clipBehavior: Clip.antiAliasWithSaveLayer, + child: Container( + decoration: decoration, + child: body, + ), + ), + ); + } +} diff --git a/lib/news/feed.dart b/lib/news/feed.dart index 62aaea5..d4a27db 100644 --- a/lib/news/feed.dart +++ b/lib/news/feed.dart @@ -82,3 +82,43 @@ class HorizontalNewsFeed extends StatelessWidget { ); } } + + +class VerticalNewsFeed extends StatelessWidget { + final Feed newsFeed; + final String sportFilter; + + const VerticalNewsFeed({ + Key key, + @required this.newsFeed, + @required this.sportFilter, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + var page = newsFeed.getPage(1, size: 100).then((page) => page.where((article) => article.sport.toLowerCase().contains(sportFilter.toLowerCase())).toList()); + var size = MediaQuery.of(context).size; + return SizedBox( + height: size.height * (7/8), + child: FutureBuilder( + future: page, + builder: (ctx, snapshot) { + if (!snapshot.hasData) { + return Center(child: CircularProgressIndicator()); + } else { + List
articles = snapshot.data; + return ListView.builder( + //shrinkWrap: true, + scrollDirection: Axis.vertical, + itemCount: articles.length, + itemBuilder: (ctx, idx) { + return ArticleCardVert( + article: articles[idx], + ); + }, + ); + } + }, + )); + } +} diff --git a/lib/screens/sport.dart b/lib/screens/sport.dart index 5a1c3ec..c53c82a 100644 --- a/lib/screens/sport.dart +++ b/lib/screens/sport.dart @@ -69,9 +69,10 @@ class Sport extends StatelessWidget { ] ), body: ListView( + physics: const NeverScrollableScrollPhysics(), children: [ HorizontalGameCards(gameCard: gameCard, sportID: sport_ID,), - HorizontalNewsFeed(newsFeed: feed, title: Text(_curSport.name), sportFilter: _curSport.name,), + VerticalNewsFeed(newsFeed: feed, sportFilter: _curSport.name), ], ), drawer: Drawer( @@ -131,7 +132,7 @@ class Sport extends StatelessWidget { setState(() { _curSport = value; _genderSwitcherCheck(); - print(sport_ID); + //print(sport_ID); }); }, items: colorList.map>((Item item) { @@ -155,7 +156,7 @@ class Sport extends StatelessWidget { genderSportSwitch = false; sport_ID = _curSport.sportID[0]; } - print(sport_ID); + //print(sport_ID); } } diff --git a/lib/screens/sport_schedule.dart b/lib/screens/sport_schedule.dart index 47e5308..71a93a5 100644 --- a/lib/screens/sport_schedule.dart +++ b/lib/screens/sport_schedule.dart @@ -148,7 +148,7 @@ class GameCard extends StatelessWidget { fit: BoxFit.contain, child: Wrap( children: [ - if (gameCard.status == "null") // no game yet + if (gameCard.status == null) // no game yet Text( '${_months[gameCard.date.month]} ${gameCard.date.day}' ) @@ -165,10 +165,12 @@ class GameCard extends StatelessWidget { fit: BoxFit.contain, child: Wrap( children: [ - if (gameCard.status != "null") // no game yet + if (gameCard.status != null) // no game yet Text( '${_months[gameCard.date.month]} ${gameCard.date.day}', textAlign: TextAlign.center, - ), + ) + else + Text('${gameCard.date.hour}:${gameCard.date.minute} PM'), ], ) ), @@ -178,7 +180,7 @@ class GameCard extends StatelessWidget { gameCard.location_indicator, gameCard.image, false, ctx)), - onTap: () => print('${gameCard.status}'), + onTap: () => print('${gameCard.date} ${gameCard.status}'), ), ), ], diff --git a/pubspec.lock b/pubspec.lock index b39c496..76f0d96 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,21 +7,21 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.13" args: dependency: transitive description: name: args url: "https://pub.dartlang.org" source: hosted - version: "1.5.2" + version: "1.6.0" async: dependency: transitive description: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.1" bloc: dependency: transitive description: @@ -35,21 +35,21 @@ packages: name: boolean_selector url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "2.0.0" charcode: dependency: transitive description: name: charcode url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.1.3" collection: dependency: transitive description: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.11" + version: "1.14.12" convert: dependency: transitive description: @@ -63,7 +63,7 @@ packages: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4" cupertino_icons: dependency: "direct main" description: @@ -113,7 +113,7 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "2.1.12" intl: dependency: transitive description: @@ -176,7 +176,7 @@ packages: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.1.3" rxdart: dependency: transitive description: @@ -230,7 +230,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.5.5" + version: "1.7.0" stack_trace: dependency: transitive description: @@ -279,7 +279,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.11" + version: "0.2.15" typed_data: dependency: transitive description: @@ -300,7 +300,7 @@ packages: name: xml url: "https://pub.dartlang.org" source: hosted - version: "3.5.0" + version: "3.6.1" sdks: dart: ">=2.6.0 <3.0.0" flutter: ">=1.12.13+hotfix.4 <2.0.0" From c2d376b2b551730ec5f98453a717a3244f886d2d Mon Sep 17 00:00:00 2001 From: Carlos Lopez-Rosario Date: Fri, 1 May 2020 13:59:06 -0400 Subject: [PATCH 6/6] GREEN --- lib/screens/sport.dart | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/screens/sport.dart b/lib/screens/sport.dart index c53c82a..cc28258 100644 --- a/lib/screens/sport.dart +++ b/lib/screens/sport.dart @@ -4,13 +4,13 @@ import '../models/game_cards.dart'; class Sport extends StatelessWidget { static final List colorList = [ - const Item('Football', Colors.green,[3]), - const Item("Basketball", Colors.green,[5,13]), - const Item("Soccer", Colors.green,[9,17]), - const Item('Baseball', Colors.green,[1]), - const Item('Softball', Colors.green,[12]), - const Item('Volleyball', Colors.green,[20]), - const Item('Tennis', Colors.green,[10,18]), + const Item('Football',[3]), + const Item("Basketball",[5,13]), + const Item("Soccer",[9,17]), + const Item('Baseball',[1]), + const Item('Softball',[12]), + const Item('Volleyball',[20]), + const Item('Tennis',[10,18]), ]; final feed = Feed(); // was var not final @@ -47,7 +47,7 @@ class Sport extends StatelessWidget { appBar: AppBar( centerTitle: false, title: buildDropdownButton(selectedSport, setState), - backgroundColor: _curSport.color, + backgroundColor: Colors.green, //--Gender Switch-- Need to make condition to determine gender actions: [ @@ -161,9 +161,7 @@ class Sport extends StatelessWidget { } class Item { - const Item(this.name, this.color, this.sportID); - + const Item(this.name, this.sportID); final String name; - final Color color; final List sportID; } \ No newline at end of file