Merge remote-tracking branch 'origin/master' into Twitter_Page
# Conflicts: # lib/route_generator.dart # lib/screens/home_widget.dart
This commit is contained in:
@@ -7,10 +7,11 @@ import 'package:capstone_hungry_hippos/screens/sport.dart';
|
||||
import 'package:capstone_hungry_hippos/screens/twitter_widget.dart';
|
||||
|
||||
class RouteGenerator {
|
||||
static Route<dynamic> generateRoute(RouteSettings settings){
|
||||
final args = settings.arguments; //This is how we pass arguments and can be used in case
|
||||
static Route<dynamic> generateRoute(RouteSettings settings) {
|
||||
final args = settings
|
||||
.arguments; //This is how we pass arguments and can be used in case
|
||||
|
||||
switch (settings.name){
|
||||
switch (settings.name) {
|
||||
case '/':
|
||||
return MaterialPageRoute(builder: (_) => Home());
|
||||
case '/Sport':
|
||||
@@ -22,6 +23,8 @@ class RouteGenerator {
|
||||
return MaterialPageRoute(builder: (_) => Standing());
|
||||
case '/Chat':
|
||||
return MaterialPageRoute(builder: (_) => Chat());
|
||||
case '/Favorites':
|
||||
return MaterialPageRoute(builder: (_) => FavoritesManager());
|
||||
case '/Twitter':
|
||||
return MaterialPageRoute(builder: (_) => TwitterFeed());
|
||||
default:
|
||||
@@ -30,7 +33,7 @@ class RouteGenerator {
|
||||
}
|
||||
|
||||
static Route _errorRoute() {
|
||||
return MaterialPageRoute(builder: (_){
|
||||
return MaterialPageRoute(builder: (_) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text("Error Page"),
|
||||
|
||||
82
lib/screens/favorites_reorder.dart
Normal file
82
lib/screens/favorites_reorder.dart
Normal file
@@ -0,0 +1,82 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
class Favorites {
|
||||
Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
|
||||
|
||||
static const List<String> DEFAULT_FAVORITES = [
|
||||
'Football',
|
||||
'Basketball',
|
||||
'Baseball',
|
||||
'Soccer',
|
||||
'Tennis',
|
||||
'Volleyball'
|
||||
];
|
||||
|
||||
Future<List<String>> get_favorites() async {
|
||||
final prefs = await _prefs;
|
||||
return prefs.getStringList('favorites') ?? DEFAULT_FAVORITES;
|
||||
}
|
||||
|
||||
Future<bool> set_favorites(final List<String> favorites) async {
|
||||
final prefs = await _prefs;
|
||||
return await prefs.setStringList('favorites', favorites);
|
||||
}
|
||||
}
|
||||
|
||||
class FavoritesManager extends StatefulWidget {
|
||||
FavoritesManager({Key key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_FavoritesManagerState createState() => _FavoritesManagerState();
|
||||
}
|
||||
|
||||
class _FavoritesManagerState extends State<FavoritesManager> {
|
||||
Favorites _mgr = Favorites();
|
||||
Future<List<String>> _order;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_order = _mgr.get_favorites();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
centerTitle: false,
|
||||
title: Text('Manage Favorites'),
|
||||
backgroundColor: Colors.green,
|
||||
),
|
||||
body: FutureBuilder<List<String>>(
|
||||
future: _order,
|
||||
builder: (ctx, snap) {
|
||||
if (snap.connectionState == ConnectionState.waiting) {
|
||||
return CircularProgressIndicator();
|
||||
} else {
|
||||
var order = snap.data.toList();
|
||||
return ReorderableListView(
|
||||
onReorder: (int oldIdx, int newIdx) {
|
||||
if (newIdx > oldIdx) newIdx--;
|
||||
order.insert(newIdx, order.removeAt(oldIdx));
|
||||
|
||||
setState(() {
|
||||
_mgr.set_favorites(order);
|
||||
_order = Future.value(order);
|
||||
});
|
||||
},
|
||||
children: order.map((sport) {
|
||||
return ListTile(
|
||||
key: Key(sport),
|
||||
title: Text(sport),
|
||||
trailing: Icon(Icons.drag_handle),
|
||||
);
|
||||
}).toList(),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,31 @@
|
||||
import 'package:capstone_hungry_hippos/screens/favorites_reorder.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import '../news/feed.dart';
|
||||
|
||||
class Home extends StatelessWidget {
|
||||
class Home extends StatefulWidget {
|
||||
@override
|
||||
_HomeState createState() => _HomeState();
|
||||
}
|
||||
|
||||
class _HomeState extends State<Home> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: CustomScrollView(
|
||||
slivers: <Widget>[
|
||||
_AppBar(),
|
||||
SliverList(delegate: SliverChildListDelegate(_buildList())),
|
||||
],
|
||||
body: FutureBuilder(
|
||||
future: _buildList(),
|
||||
builder: (ctx, snap) {
|
||||
if (snap.hasData) {
|
||||
return CustomScrollView(
|
||||
slivers: <Widget>[
|
||||
_AppBar(),
|
||||
SliverList(delegate: SliverChildListDelegate(snap.data)),
|
||||
],
|
||||
);
|
||||
} else {
|
||||
return CircularProgressIndicator();
|
||||
}
|
||||
},
|
||||
),
|
||||
drawer: Drawer(
|
||||
child: ListView(
|
||||
@@ -38,6 +54,15 @@ class Home extends StatelessWidget {
|
||||
onPressed: () => Navigator.pushNamed(context, '/Twitter'),
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
title: IconButton(
|
||||
icon: Icon(Icons.settings),
|
||||
onPressed: () =>
|
||||
Navigator.pushNamed(context, '/Favorites').then((e) {
|
||||
setState(() {});
|
||||
}),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -56,15 +81,15 @@ class _AppBar extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
List _buildList() {
|
||||
Future<List<HorizontalNewsFeed>> _buildList() async {
|
||||
final feed = Feed();
|
||||
List<HorizontalNewsFeed> listItems = List();
|
||||
listItems.add(HorizontalNewsFeed(newsFeed: feed, title: Text("Football")));
|
||||
listItems.add(HorizontalNewsFeed(newsFeed: feed, title: Text("Soccer")));
|
||||
listItems.add(HorizontalNewsFeed(newsFeed: feed, title: Text("Basketball")));
|
||||
listItems.add(HorizontalNewsFeed(newsFeed: feed, title: Text("Volleyball")));
|
||||
listItems.add(HorizontalNewsFeed(newsFeed: feed, title: Text("Baseball")));
|
||||
listItems.add(HorizontalNewsFeed(newsFeed: feed, title: Text("Softball")));
|
||||
listItems.add(HorizontalNewsFeed(newsFeed: feed, title: Text("Tennis")));
|
||||
return listItems;
|
||||
final mgr = Favorites();
|
||||
final sports = await mgr.get_favorites();
|
||||
|
||||
return sports.map((sport) {
|
||||
return HorizontalNewsFeed(
|
||||
newsFeed: feed,
|
||||
title: Text(sport),
|
||||
);
|
||||
}).toList();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user