Skip to content

Commit 82bee53

Browse files
committed
feat(review): added review all cards system
1 parent 323fb0d commit 82bee53

File tree

5 files changed

+32
-10
lines changed

5 files changed

+32
-10
lines changed

src/lib/common/utils/data_provider.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,11 @@ class DataProvider extends ChangeNotifier {
113113
}
114114

115115
void removeReview(String deckTitle) {
116-
_reviews.remove(deckTitle);
116+
if (deckTitle == 'Review All') {
117+
_reviews = {};
118+
} else {
119+
_reviews.remove(deckTitle);
120+
}
117121
notifyListeners();
118122
}
119123
}

src/lib/common/utils/routes.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ Route<dynamic> generateRoute(RouteSettings settings) {
1616
} else if (settings.name!.contains("review")) {
1717
final args = settings.arguments as Map<String, dynamic>;
1818
return MaterialPageRoute(
19-
builder: (_) => Review(cards: args['cards']), settings: settings);
19+
builder: (_) => Review(title: args['title'], cards: args['cards']),
20+
settings: settings);
2021
} else {
2122
return MaterialPageRoute(
2223
builder: (_) => const PageManager(), settings: settings);

src/lib/features/review/review_details_page.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import '../../common/utils/data_provider.dart';
66
import '../flashcard/flashcard.dart';
77

88
class Review extends StatefulWidget {
9-
const Review({super.key, required this.cards});
9+
const Review({super.key, required this.title, required this.cards});
10+
final String title;
1011
final List<ReviewModel> cards;
1112

1213
@override
@@ -24,7 +25,7 @@ class _ReviewState extends State<Review> {
2425
},
2526
child: Scaffold(
2627
appBar: AppBar(
27-
title: Text(widget.cards[0].deckTitle),
28+
title: Text(widget.title),
2829
),
2930
body: Column(
3031
children: [
@@ -39,7 +40,7 @@ class _ReviewState extends State<Review> {
3940
void _handleIndex() => setState(() {
4041
bool isCompleted = _currentCardIndex == widget.cards.length - 1;
4142
if (isCompleted) {
42-
context.read<DataProvider>().removeReview(widget.cards[0].deckTitle);
43+
context.read<DataProvider>().removeReview(widget.title);
4344
Navigator.pop(context);
4445
} else {
4546
_currentCardIndex++;

src/lib/features/review/review_model.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,9 @@ class ReviewModel {
2323
deckTitle: data['deckTitle'],
2424
deckId: data['deckId'],
2525
);
26+
27+
@override
28+
String toString() {
29+
return 'ReviewModel(deckId: $deckId, deckTitle: $deckTitle, cardId: $cardId, cardTitle: $cardTitle, cardInstructions: $cardInstructions, cardImage: $cardImage)';
30+
}
2631
}

src/lib/features/review/reviews_list_page.dart

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,21 @@ class _ReviewPageState extends State<ReviewPage> {
2727
return const Center(child: Text('Nothing left to review! Good work!'));
2828
}
2929

30-
// TODO "All Cards" review page
31-
32-
return ListView.builder(
33-
itemCount: _decks.length,
34-
itemBuilder: (context, index) => _buildListItem(index));
30+
final allCards = _decks.values.expand((element) => element).toList();
31+
return Column(
32+
children: [
33+
Card(
34+
child: ListTile(
35+
title: const Text('Review All'),
36+
trailing: Text('${allCards.length}'),
37+
onTap: () => _navigateToReview('Review All', allCards))),
38+
Expanded(
39+
child: ListView.builder(
40+
itemCount: _decks.length,
41+
itemBuilder: (context, index) => _buildListItem(index)),
42+
)
43+
],
44+
);
3545
}
3646

3747
Widget _buildListItem(index) {
@@ -53,6 +63,7 @@ class _ReviewPageState extends State<ReviewPage> {
5363
context,
5464
url,
5565
arguments: {
66+
'title': deckTitle,
5667
'cards': cards,
5768
},
5869
);

0 commit comments

Comments
 (0)