winning games pushes feed
This commit is contained in:
@@ -1,15 +1,41 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:maggs_victory_voyage/services/db_helper.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class GamesPage extends StatelessWidget {
|
import '../models/profile.dart';
|
||||||
|
import '../services/profiles_provider.dart';
|
||||||
|
|
||||||
|
class GamesPage extends StatefulWidget {
|
||||||
const GamesPage({super.key});
|
const GamesPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<GamesPage> createState() => _GamesPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _GamesPageState extends State<GamesPage> {
|
||||||
|
Profile? userProfile;
|
||||||
|
final List<Map<String, dynamic>> games = [
|
||||||
|
{
|
||||||
|
'name': 'Mario Kart',
|
||||||
|
'points': 4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Mario Party',
|
||||||
|
'points': 6,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Exploding Kittens',
|
||||||
|
'points': 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'Twister',
|
||||||
|
'points': 2,
|
||||||
|
}
|
||||||
|
];
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final games = [
|
userProfile = Provider.of<Profiles>(context, listen: true).own;
|
||||||
'Mario Kart',
|
|
||||||
'Mario Party',
|
|
||||||
'Exploding Kittens',
|
|
||||||
'Twister',
|
|
||||||
];
|
|
||||||
return Center(
|
return Center(
|
||||||
child: Column(
|
child: Column(
|
||||||
children: _getWidgets(games, context),
|
children: _getWidgets(games, context),
|
||||||
@@ -17,17 +43,18 @@ class GamesPage extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Widget> _getWidgets(List<String> list, BuildContext context) {
|
List<Widget> _getWidgets(
|
||||||
|
List<Map<String, dynamic>> games, BuildContext context) {
|
||||||
final width = MediaQuery.of(context).size.width * 0.8;
|
final width = MediaQuery.of(context).size.width * 0.8;
|
||||||
List<Widget> widgets = [];
|
List<Widget> widgets = [];
|
||||||
for (final game in list) {
|
for (final game in games) {
|
||||||
widgets.add(
|
widgets.add(
|
||||||
Expanded(
|
Expanded(
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: width,
|
width: width,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 10),
|
padding: const EdgeInsets.symmetric(vertical: 10),
|
||||||
child: _getGamesButton(() {}, game, context)),
|
child: _getGamesButton(context, game)),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -43,11 +70,17 @@ class GamesPage extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ElevatedButton _getGamesButton(
|
ElevatedButton _getGamesButton(
|
||||||
void Function()? onPressed, String title, BuildContext context) {
|
BuildContext context, Map<String, dynamic> game) {
|
||||||
return ElevatedButton(
|
return ElevatedButton(
|
||||||
style: ElevatedButton.styleFrom(shape: const BeveledRectangleBorder()),
|
style: ElevatedButton.styleFrom(shape: const BeveledRectangleBorder()),
|
||||||
onPressed: onPressed,
|
onPressed: () => _onPressed(game),
|
||||||
child: _getText(title, context),
|
child: _getText(game['name'], context),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _onPressed(Map<String, dynamic> game) {
|
||||||
|
DbHelper.pushGameWin(userProfile!.points, game['points']);
|
||||||
|
DbHelper.pushFeedEntry(
|
||||||
|
'${userProfile!.username} just won at ${game['name']}');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -90,6 +90,17 @@ class DbHelper {
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Future<void> pushFeedEntry(String text) async {
|
||||||
|
await _supabase
|
||||||
|
.from('feed')
|
||||||
|
.insert({'text': text, 'timestamp': DateTime.now().toString()});
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<void> pushGameWin(int currentPoints, int pointsWon) async {
|
||||||
|
await _supabase.from('profiles').update(
|
||||||
|
{'points': currentPoints + pointsWon}).eq('id', currentUser!.id);
|
||||||
|
}
|
||||||
|
|
||||||
static Stream<List<Map<String, dynamic>>> get feedStream =>
|
static Stream<List<Map<String, dynamic>>> get feedStream =>
|
||||||
_supabase.from('feed').stream(primaryKey: ['timestamp']);
|
_supabase.from('feed').stream(primaryKey: ['timestamp']);
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,16 @@ class Profiles extends ChangeNotifier {
|
|||||||
return _profiles;
|
return _profiles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Profile? get own {
|
||||||
|
final list =
|
||||||
|
profiles.where((element) => element.id == DbHelper.currentUser!.id);
|
||||||
|
if (list.isNotEmpty) {
|
||||||
|
return list.first;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_updateProfile(List<Map<String, dynamic>> data) {
|
_updateProfile(List<Map<String, dynamic>> data) {
|
||||||
final List<Profile> profiles = data.map((e) => Profile.fromMap(e)).toList();
|
final List<Profile> profiles = data.map((e) => Profile.fromMap(e)).toList();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user