merge pull request 'Views_implementation'
continuous-integration/drone/push Build is failing Details

auth_api_quarkus
root 2 years ago
commit b8d688219d

@ -4,7 +4,7 @@
# This file should be version controlled.
version:
revision: 18a827f3933c19f51862dde3fa472197683249d6
revision: 9944297138845a94256f1cf37beb88ff9a8e811a
channel: stable
project_type: app
@ -13,26 +13,26 @@ project_type: app
migration:
platforms:
- platform: root
create_revision: 18a827f3933c19f51862dde3fa472197683249d6
base_revision: 18a827f3933c19f51862dde3fa472197683249d6
create_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
base_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
- platform: android
create_revision: 18a827f3933c19f51862dde3fa472197683249d6
base_revision: 18a827f3933c19f51862dde3fa472197683249d6
create_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
base_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
- platform: ios
create_revision: 18a827f3933c19f51862dde3fa472197683249d6
base_revision: 18a827f3933c19f51862dde3fa472197683249d6
create_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
base_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
- platform: linux
create_revision: 18a827f3933c19f51862dde3fa472197683249d6
base_revision: 18a827f3933c19f51862dde3fa472197683249d6
create_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
base_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
- platform: macos
create_revision: 18a827f3933c19f51862dde3fa472197683249d6
base_revision: 18a827f3933c19f51862dde3fa472197683249d6
create_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
base_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
- platform: web
create_revision: 18a827f3933c19f51862dde3fa472197683249d6
base_revision: 18a827f3933c19f51862dde3fa472197683249d6
create_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
base_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
- platform: windows
create_revision: 18a827f3933c19f51862dde3fa472197683249d6
base_revision: 18a827f3933c19f51862dde3fa472197683249d6
create_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
base_revision: 9944297138845a94256f1cf37beb88ff9a8e811a
# User provided section

@ -0,0 +1,16 @@
# bowlin_project
A new Flutter project.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
For help getting started with Flutter development, view the
[online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

@ -44,9 +44,9 @@ android {
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.example.bowl_in"
applicationId "com.example.bowlin_project"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bowl_in">
package="com.example.bowlin_project">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.

@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bowl_in">
package="com.example.bowlin_project">
<application
android:label="bowl_in"
android:label="bowlin_project"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity

@ -1,5 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bowl_in">
package="com.example.bowlin_project">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.

@ -1,12 +1,12 @@
buildscript {
ext.kotlin_version = '1.6.10'
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.2'
classpath 'com.android.tools.build:gradle:7.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip

@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objectVersion = 54;
objects = {
/* Begin PBXBuildFile section */
@ -171,6 +171,7 @@
/* Begin PBXShellScriptBuildPhase section */
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@ -185,6 +186,7 @@
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
@ -294,7 +296,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.bowlIn;
PRODUCT_BUNDLE_IDENTIFIER = com.example.bowlinProject;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
@ -422,7 +424,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.bowlIn;
PRODUCT_BUNDLE_IDENTIFIER = com.example.bowlinProject;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@ -444,7 +446,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.bowlIn;
PRODUCT_BUNDLE_IDENTIFIER = com.example.bowlinProject;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 564 B

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 704 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 762 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>Bowl In</string>
<string>Bowlin Project</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
@ -13,7 +13,7 @@
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>bowl_in</string>
<string>bowlin_project</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>

@ -0,0 +1,45 @@
import 'package:flutter/cupertino.dart';
import 'package:go_router/go_router.dart';
import '../views/game_screen.dart';
import '../views/ingame_screen.dart';
import '../views/main_screen.dart';
import '../views/rank_screen.dart';
import '../views/welcome_screen.dart';
final GoRouter router = GoRouter(
routes: <RouteBase>[
GoRoute(
path: '/',
builder: (BuildContext context, GoRouterState state) {
return const MainScreen();
},
routes: <RouteBase>[
GoRoute(
path: 'games',
builder: (BuildContext context, GoRouterState state) {
return const GameScreen();
},
),
GoRoute(
path: 'ranking',
builder: (BuildContext context, GoRouterState state) {
return const RankScreen();
},
),
GoRoute(
path: 'splash',
builder: (BuildContext context, GoRouterState state) {
return const WelcomeScreen();
},
),
GoRoute(
path: 'in-game',
builder: (BuildContext context, GoRouterState state) {
return const InGameScreen();
},
),
],
),
],
);

@ -1,4 +1,12 @@
import 'package:bowl_in/views/game_screen.dart';
import 'package:bowl_in/views/ingame_screen.dart';
import 'package:bowl_in/views/main_screen.dart';
import 'package:bowl_in/views/rank_screen.dart';
import 'package:bowl_in/views/welcome_screen.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:bowl_in/config/app_router.dart';
void main() {
runApp(const MyApp());
@ -6,27 +14,18 @@ void main() {
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky);
SystemChrome.setSystemUIOverlayStyle(
const SystemUiOverlayStyle(statusBarColor: Colors.transparent));
return MaterialApp.router(
debugShowCheckedModeBanner: false,
routerConfig: router,
);
}
// This widget is the root of your application.
}
class MyHomePage extends StatefulWidget {

@ -0,0 +1,17 @@
import 'package:flutter/widgets.dart';
class BowlInFont {
BowlInFont._();
static const _kFontFam = 'BowlInFont';
static const String? _kFontPkg = null;
static const IconData stats_icon =
IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData profil_icon =
IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData home_icon =
IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData rank_icon =
IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg);
}

@ -0,0 +1,24 @@
import 'package:flutter/material.dart';
class GradientText extends StatelessWidget {
const GradientText(
this.text, {
required this.gradient,
this.style,
});
final String text;
final TextStyle? style;
final Gradient gradient;
@override
Widget build(BuildContext context) {
return ShaderMask(
blendMode: BlendMode.srcIn,
shaderCallback: (bounds) => gradient.createShader(
Rect.fromLTWH(0, 0, bounds.width, bounds.height),
),
child: Text(text, style: style),
);
}
}

@ -0,0 +1,100 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../widgets/analysis_card.dart';
import '../widgets/scores_list_widget.dart';
class AnalysisScreen extends StatefulWidget {
const AnalysisScreen({Key? key}) : super(key: key);
@override
State<AnalysisScreen> createState() => _AnalysisScreenState();
}
class _AnalysisScreenState extends State<AnalysisScreen> {
@override
Widget build(BuildContext context) {
return ScrollConfiguration(
behavior: CustomScroll(),
child: SingleChildScrollView(
child: Stack(alignment: Alignment.topCenter, children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 1.45,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff19BDE0),
Color(0xff4A17DC),
],
)),
),
Image.asset("assets/images/background_analysis.png"),
Positioned(
top: 150,
child: SizedBox(
width: MediaQuery.of(context).size.width,
height: 180,
child: Stack(
alignment: Alignment.center,
children: [
Positioned(
left: 34,
child: SpareCard(score: 12),
),
Positioned(
top: 0,
child: StrikeCard(score: 12),
),
Positioned(
right: 34,
child: GameCard(score: 12),
)
],
),
)),
Align(
alignment: AlignmentDirectional.topCenter,
child: Container(
height: 120,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_analysis.png"),
)),
child: Center(
child: Text(
"Analysis",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Color(0xff1ABAE0),
fontSize: 20),
)),
),
),
Positioned(
bottom: 100,
child: Wrap(
direction: Axis.vertical,
spacing: 10,
verticalDirection: VerticalDirection.up,
children: [
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
],
))
]),
));
}
}

@ -0,0 +1,76 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../widgets/button_new_party.dart';
import '../widgets/scores_list_widget.dart';
class GameScreen extends StatefulWidget {
const GameScreen({Key? key}) : super(key: key);
@override
State<GameScreen> createState() => _GameScreenState();
}
class _GameScreenState extends State<GameScreen> {
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff19BDE0),
Color(0xff4A17DC),
],
)),
),
Align(
alignment: AlignmentDirectional.topCenter,
child: Container(
height: 120,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_score.png"),
)),
child: Center(
child: Text(
"Scores",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 20),
)),
),
),
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ButtonNewParty(),
SizedBox(width: 20),
ButtonJoinParty(),
],
),
Align(
alignment: Alignment.bottomCenter,
child: Positioned(
bottom: 0,
child: Container(
height: MediaQuery.of(context).size.height - 140,
width: MediaQuery.of(context).size.width,
child: ListCardGame(),
)),
),
],
)
],
);
}
}

@ -0,0 +1,83 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../widgets/button_new_party.dart';
import '../widgets/ingame_widgets.dart';
import '../widgets/scores_list_widget.dart';
class InGameScreen extends StatefulWidget {
const InGameScreen({Key? key}) : super(key: key);
@override
State<InGameScreen> createState() => _InGameScreenState();
}
class _InGameScreenState extends State<InGameScreen> {
late Widget widgetHolder;
void initState() {
widgetHolder = InGameCardConfig();
super.initState();
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff19BDE0),
Color(0xff4A17DC),
],
)),
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120,
),
widgetHolder,
Spacer(),
ElevatedButton(
onPressed: () {
setState(() {
widgetHolder = InGameCardThrow(
numberThrow: 2,
);
});
},
child: Text(
"PLAY",
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
fontSize: 40,
color: Color(0xff1ABAE0)),
),
style: ElevatedButton.styleFrom(
side: BorderSide(
width: 7,
color: Color(0xff1ABAE0),
),
onPrimary: Colors.transparent,
primary: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(55),
),
minimumSize: Size(200, 80),
),
),
Spacer(),
],
)
],
);
}
}

@ -0,0 +1,114 @@
import 'package:bowl_in/presentation/font.dart';
import 'package:bowl_in/views/profile_screen.dart';
import 'package:bowl_in/views/rank_screen.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'analysis_screen.dart';
import 'game_screen.dart';
class MainScreen extends StatefulWidget {
const MainScreen({Key? key}) : super(key: key);
@override
State<MainScreen> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
int currentPageIndex = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
extendBody: true,
resizeToAvoidBottomInset: false,
body: [
GameScreen(),
RankScreen(),
AnalysisScreen(),
ProfileScreen()
][currentPageIndex],
bottomNavigationBar: SizedBox(
height: 75,
child: NavigationBarTheme(
data: const NavigationBarThemeData(
indicatorColor: Colors.transparent,
),
child: ConstrainedBox(
constraints: const BoxConstraints(
minHeight: 200,
maxHeight: 200,
),
child: Container(
decoration: BoxDecoration(
boxShadow: <BoxShadow>[
BoxShadow(
color: Colors.black.withOpacity(0.8),
blurRadius: 500,
),
],
),
child: NavigationBar(
animationDuration: const Duration(microseconds: 800),
selectedIndex: currentPageIndex,
labelBehavior:
NavigationDestinationLabelBehavior.alwaysHide,
height: MediaQuery.of(context).size.height * 0.1,
onDestinationSelected: (index) =>
setState(() => currentPageIndex = index),
backgroundColor: Colors.white,
destinations: const [
NavigationDestination(
icon: Icon(
BowlInFont.home_icon,
color: Colors.grey,
size: 21,
),
label: 'Profil',
selectedIcon: Icon(
BowlInFont.home_icon,
size: 21,
),
),
NavigationDestination(
icon: Icon(
BowlInFont.rank_icon,
color: Colors.grey,
size: 21,
),
label: '',
selectedIcon: Icon(
BowlInFont.rank_icon,
size: 21,
),
),
NavigationDestination(
icon: Icon(
Icons.show_chart,
color: Colors.grey,
size: 25,
),
label: '',
selectedIcon: Icon(
Icons.show_chart,
size: 25,
),
),
NavigationDestination(
icon: Icon(
BowlInFont.profil_icon,
color: Colors.grey,
size: 21,
),
label: '',
selectedIcon: Icon(
BowlInFont.profil_icon,
size: 21,
),
),
],
),
),
),
)));
}
}

@ -0,0 +1,59 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../widgets/achievements_list_widget.dart';
class ProfileScreen extends StatefulWidget {
const ProfileScreen({Key? key}) : super(key: key);
@override
State<ProfileScreen> createState() => _ProfileScreenState();
}
class _ProfileScreenState extends State<ProfileScreen> {
@override
Widget build(BuildContext context) {
return Stack(alignment: Alignment.topCenter, children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 1.45,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff19BDE0),
Color(0xff4A17DC),
]))),
Align(
alignment: AlignmentDirectional.topCenter,
child: Container(
height: 120,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_profile.png"),
)),
child: Center(
child: Text(
"Profile",
style: TextStyle(
fontWeight: FontWeight.bold, color: Colors.white, fontSize: 20),
)),
),
),
Padding(
padding: EdgeInsets.fromLTRB(0, 0, 0, 100),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
verticalDirection: VerticalDirection.up,
children: [
ListAchievementWidget(nbUnlocked: 1),
Padding(
padding: EdgeInsets.fromLTRB(40, 0, 0, 0),
child: ProfileWidget()),
],
)),
]);
}
}

@ -0,0 +1,91 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../widgets/profil_listpodium_widget.dart';
class RankScreen extends StatefulWidget {
const RankScreen({Key? key}) : super(key: key);
@override
State<RankScreen> createState() => _RankScreenState();
}
class _RankScreenState extends State<RankScreen> {
@override
Widget build(BuildContext context) {
return Stack(alignment: Alignment.center, children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff19BDE0),
Color(0xff4A17DC),
],
)),
),
Align(
alignment: AlignmentDirectional.topCenter,
child: Container(
height: 120,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_ranking.png"),
)),
child: Center(
child: Text(
"Ranking",
style: TextStyle(
fontWeight: FontWeight.bold, color: Colors.white, fontSize: 20),
)),
),
),
Positioned(
top: 70,
child: Stack(
children: [
Container(
width: MediaQuery.of(context).size.width - 60,
height: 500,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_podium(1).png"),
)),
)
],
)),
Positioned(
left: 65,
top: MediaQuery.of(context).size.height * 0.195,
child: ProfilPodiumWidget(isfirst: 0, pseudo: "Louison", score: 122)),
Positioned(
top: MediaQuery.of(context).size.height * 0.114,
child: Align(
child: ProfilPodiumWidget(isfirst: 1, pseudo: "Lucas", score: 167),
)),
Positioned(
right: 65,
top: MediaQuery.of(context).size.height * 0.219,
child: ProfilPodiumWidget(isfirst: 0, pseudo: "David", score: 102),
),
Positioned(
bottom: -40,
child: Stack(
children: [
Container(
width: MediaQuery.of(context).size.width - 40,
height: 500,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_podium.png"),
)),
child: ListPodium(),
)
],
)),
]);
}
}

@ -0,0 +1,78 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class WelcomeScreen extends StatelessWidget {
const WelcomeScreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff19BDE0),
Color(0xff4A17DC),
],
)),
),
Positioned(
bottom: 0,
child: Image(
width: MediaQuery.of(context).size.width,
image: AssetImage("assets/images/background_welcomepage.png"))),
SizedBox(
width: MediaQuery.of(context).size.width,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
height: 20,
),
Image(
width: MediaQuery.of(context).size.width - 70,
image: AssetImage("assets/images/icon_bowl_in.png")),
Spacer(),
ButtonConnexion(),
SizedBox(
height: 60,
)
],
),
),
],
);
}
}
class ButtonConnexion extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {},
child: Icon(
Icons.arrow_forward_rounded,
color: Colors.white,
size: 50.0,
),
style: ElevatedButton.styleFrom(
side: BorderSide(
width: 7,
color: Color(0xffFF419B),
),
onPrimary: Colors.white,
primary: Color(0xffF40375),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(35),
),
minimumSize: Size(90, 90),
),
);
}
}

@ -0,0 +1,238 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class AchievementWidget extends StatelessWidget {
final String imagePath;
final String imagePathUnlocked;
final int isUnlocked;
const AchievementWidget(
{Key? key,
required this.imagePath,
required this.imagePathUnlocked,
required this.isUnlocked})
: super(key: key);
@override
Widget build(BuildContext context) {
return Container(
width: 100,
height: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: this.isUnlocked == 0
? AssetImage(this.imagePath)
: AssetImage(this.imagePathUnlocked),
),
),
);
}
}
class ListAchievementWidget extends StatelessWidget {
final int nbUnlocked;
const ListAchievementWidget({Key? key, required this.nbUnlocked})
: super(key: key);
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Container(
margin: EdgeInsets.fromLTRB(20, 0, 20, 0),
width: 520,
height: 520,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_achievement_table.png"),
),
),
child: Padding(
padding: EdgeInsets.fromLTRB(0, 65, 0, 0),
child: Wrap(
alignment: WrapAlignment.center,
runSpacing: 15,
spacing: -5,
children: [
Container(
width: double.infinity,
child: Center(
child: Padding(
padding: EdgeInsets.fromLTRB(200, 0, 0, 30),
child: RotationTransition(
turns: new AlwaysStoppedAnimation(5 / 360),
child: Text(
this.nbUnlocked.toString() + "/9 unlocked",
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic,
fontSize: 13,
color: Color(0xff2461B2)),
)),
),
),
),
AchievementWidget(
imagePath: 'assets/images/achievements/5friends_locked.png',
imagePathUnlocked:
'assets/images/achievements/5friends_unlocked.png',
isUnlocked: 0,
),
AchievementWidget(
imagePath: 'assets/images/achievements/win_locked.png',
imagePathUnlocked:
'assets/images/achievements/win_unlocked.png',
isUnlocked: 1,
),
AchievementWidget(
imagePath:
'assets/images/achievements/10strikes_locked.png',
imagePathUnlocked:
'assets/images/achievements/10strikes_unlocked.png',
isUnlocked: 0,
),
AchievementWidget(
imagePath:
'assets/images/achievements/150points_locked.png',
imagePathUnlocked:
'assets/images/achievements/150points_unlocked.png',
isUnlocked: 0,
),
AchievementWidget(
imagePath:
'assets/images/achievements/2strikeinarow_locked.png',
imagePathUnlocked:
'assets/images/achievements/2strikeinarow_unlocked.png',
isUnlocked: 1,
),
AchievementWidget(
imagePath: 'assets/images/achievements/5games_locked.png',
imagePathUnlocked:
'assets/images/achievements/5games_unlocked.png',
isUnlocked: 1,
),
AchievementWidget(
imagePath: 'assets/images/achievements/10spares_locked.png',
imagePathUnlocked:
'assets/images/achievements/10spares_unlocked.png',
isUnlocked: 1,
),
AchievementWidget(
imagePath:
'assets/images/achievements/10x9spins_locked.png',
imagePathUnlocked:
'assets/images/achievements/10x9spins_unlocked.png',
isUnlocked: 0,
),
AchievementWidget(
imagePath: 'assets/images/achievements/0point_locked.png',
imagePathUnlocked:
'assets/images/achievements/0point_unlocked.png',
isUnlocked: 0,
),
],
),
)),
],
);
}
}
class ProfileWidget extends StatelessWidget {
const ProfileWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
children: [
Container(
height: 80,
width: 80,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_user_orange.png"),
fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(100)),
),
),
Padding(
padding: EdgeInsets.fromLTRB(20, 0, 0, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Lucas",
style: GoogleFonts.roboto(
color: Colors.white,
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 25),
),
Padding(
padding: EdgeInsets.fromLTRB(0, 0, 0, 5),
child: RichText(
text: TextSpan(
text: '',
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: "Highscore :",
style: GoogleFonts.roboto(
color: Colors.white.withOpacity(0.65),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
TextSpan(
text: "122 pts",
style: GoogleFonts.roboto(
color: Color(0xffF40375).withOpacity(0.75),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.w900,
fontSize: 20),
),
],
),
),
),
RichText(
text: TextSpan(
text: '',
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: "Last game ",
style: GoogleFonts.roboto(
color: Colors.white.withOpacity(0.65),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
TextSpan(
text: "23",
style: GoogleFonts.roboto(
color: Colors.white,
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
TextSpan(
text: " days(s) ago",
style: GoogleFonts.roboto(
color: Colors.white.withOpacity(0.65),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
],
),
),
],
),
)
],
);
}
}

@ -0,0 +1,150 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class SpareCard extends StatelessWidget {
final int score;
const SpareCard({Key? key, required this.score}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
alignment: Alignment.center,
children: [
Container(
width: 100,
height: 150,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_spare_card.png"),
),
)),
Padding(
padding: EdgeInsets.fromLTRB(0, 70, 0, 0),
child: Text(
this.score.toString(),
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
color: Color(0xffF40375),
fontSize: 28),
),
)
],
);
}
}
class StrikeCard extends StatelessWidget {
final int score;
const StrikeCard({Key? key, required this.score}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
alignment: Alignment.center,
children: [
Container(
height: 150,
width: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_strike_card.png"),
),
)),
Padding(
padding: EdgeInsets.fromLTRB(0, 70, 0, 0),
child: Text(
this.score.toString(),
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
color: Color(0xffF40375),
fontSize: 28),
),
)
],
);
}
}
class GameCard extends StatelessWidget {
final int score;
const GameCard({Key? key, required this.score}) : super(key: key);
@override
Widget build(BuildContext context) {
return Stack(
alignment: Alignment.center,
children: [
Container(
height: 150,
width: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_game_card.png"),
),
)),
Padding(
padding: EdgeInsets.fromLTRB(0, 60, 0, 0),
child: Text(
this.score.toString(),
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
color: Color(0xffF40375),
fontSize: 28),
),
)
],
);
}
}
class StatsCard extends StatelessWidget {
final String title;
final int val;
const StatsCard({Key? key, required this.title, required this.val})
: super(key: key);
@override
Widget build(BuildContext context) {
return Container(
height: 50,
width: MediaQuery.of(context).size.width - 70,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12)),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.2),
spreadRadius: 1,
blurRadius: 8,
offset: Offset(0, 0), // changes position of shadow
),
],
),
child: Padding(
padding: EdgeInsets.fromLTRB(20, 0, 20, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
this.title,
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
fontStyle: FontStyle.italic,
color: Color(0xff241E40),
fontSize: 18),
),
Spacer(),
Text(
this.val.toString(),
style: GoogleFonts.roboto(
fontWeight: FontWeight.w900,
fontSize: 28,
color: Color(0xffF40375)),
),
],
),
));
}
}

@ -0,0 +1,168 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:google_fonts/google_fonts.dart';
class ButtonNewParty extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {},
child: Text("+ New game"),
style: ElevatedButton.styleFrom(
side: BorderSide(
width: 4,
color: Color(0xffFF419B),
),
onPrimary: Colors.white,
primary: Color(0xffF40375),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(35),
),
minimumSize: Size(130, 37),
),
);
}
}
class NewGameModal extends StatelessWidget {
const NewGameModal({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Dialog(
child: Stack(
alignment: Alignment.topCenter,
children: [
Transform.scale(
scale: 1.14,
child: Image.asset("assets/images/image_newgame_modal(1).png")),
SizedBox(
height: 245,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.fromLTRB(0, 10, 0, 0),
child: Text("Join game",
style: GoogleFonts.roboto(
fontWeight: FontWeight.w900, fontSize: 18)),
),
SizedBox(
height: 40,
),
Image.asset(
"assets/images/sentence_joingame.png",
width: 240,
),
Spacer(),
Padding(
padding: EdgeInsets.fromLTRB(8, 8, 0, 8),
child: Stack(
alignment: Alignment.centerLeft,
children: [
Container(
width: 290,
height: 50,
decoration: BoxDecoration(
color: Color(0xffF8F8F8),
borderRadius: BorderRadius.circular(10),
boxShadow: [
const BoxShadow(
color: Colors.grey,
),
const BoxShadow(
color: Colors.black,
spreadRadius: -20.0,
blurRadius: 12.0,
),
],
),
),
Padding(
padding: EdgeInsets.fromLTRB(15, 0, 0, 0),
child: TextField(
maxLength: 6,
decoration: new InputDecoration(
hintText: 'Party code...',
counterStyle: TextStyle(
height: double.minPositive,
),
counterText: "",
border: InputBorder.none,
),
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
color: Color(0xff989898)),
),
)
],
)),
Stack(
children: [
Padding(
padding: EdgeInsets.fromLTRB(0, 3, 0, 0),
child: Container(
height: 50,
width: 290,
decoration: BoxDecoration(
color: Color(0xffB70056),
borderRadius: BorderRadius.circular(10),
),
),
),
ElevatedButton(
onPressed: () => Navigator.pop(context),
child: Text(
"CONFIRM",
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold, fontSize: 18),
),
style: ElevatedButton.styleFrom(
onPrimary: Colors.white,
primary: Color(0xffF40375),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
minimumSize: Size(290, 45),
),
),
],
)
],
),
)
],
),
);
}
}
class ButtonJoinParty extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
showDialog(
context: context,
builder: (BuildContext context) {
return NewGameModal();
});
},
child: Text("Join game"),
style: ElevatedButton.styleFrom(
side: BorderSide(
width: 4,
color: Color(0xff6B6588),
),
onPrimary: Colors.white,
primary: Color(0xff45405D),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(35),
),
minimumSize: Size(130, 37),
),
);
}
}

@ -0,0 +1,717 @@
import 'dart:ui';
import 'package:bowl_in/widgets/profil_listpodium_widget.dart';
import 'package:bowl_in/widgets/scores_list_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class FinalScoreBoard extends StatefulWidget {
const FinalScoreBoard({Key? key}) : super(key: key);
@override
State<FinalScoreBoard> createState() => _FinalScoreBoardState();
}
class _FinalScoreBoardState extends State<FinalScoreBoard> {
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.fromLTRB(30, 0, 30, 35),
width: double.infinity,
height: 470,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/ingame_cardgame.png"),
fit: BoxFit.fill),
boxShadow: [
BoxShadow(
color: CupertinoColors.black.withOpacity(0.15),
blurRadius: 10.0,
spreadRadius: 5.0,
),
]),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: EdgeInsets.fromLTRB(15, 5, 15, 50),
child: RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: 'GAME OVER',
style: GoogleFonts.roboto(
fontSize: 15,
color: CupertinoColors.black,
fontWeight: FontWeight.w900,
decoration: TextDecoration.none)),
],
),
)),
Expanded(
child: Stack(
alignment: Alignment.topCenter,
children: [
Positioned(
child: PodiumGameOverWidget(
isfirst: 2,
pseudo: 'Lucas',
score: 123,
),
top: 70,
left: 30,
),
Positioned(
child: PodiumGameOverWidget(
isfirst: 1,
pseudo: 'Momo',
score: 160,
),
top: 10,
),
Positioned(
child: PodiumGameOverWidget(
isfirst: 3,
pseudo: 'popo',
score: 110,
),
top: 70,
right: 30,
)
],
)),
Container(
width: double.infinity,
height: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/congrats_background.png"),
fit: BoxFit.cover),
),
),
Padding(
padding: EdgeInsets.fromLTRB(0, 0, 0, 10),
child: Align(
child: Text(
"Play again",
style: GoogleFonts.roboto(
decoration: TextDecoration.none,
color: Colors.grey,
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
)
]));
}
}
class PodiumGameOverWidget extends StatelessWidget {
final int isfirst;
final String pseudo;
final int score;
const PodiumGameOverWidget(
{Key? key,
required this.isfirst,
required this.pseudo,
required this.score})
: super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
Stack(
clipBehavior: Clip.none,
children: [
Container(
width: this.isfirst == 1 ? 65 : 50,
height: this.isfirst == 1 ? 65 : 50,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_user_red.png"),
fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(70)),
),
),
if (isfirst == 1)
Positioned(
bottom: -5,
right: -30,
child: Image.asset(
'assets/images/image_trophee.png',
height: 60,
width: 60,
),
),
],
),
Padding(
padding: EdgeInsets.fromLTRB(0, 3, 0, 0),
child: Text(
this.pseudo,
style: GoogleFonts.roboto(
color: Colors.black,
fontWeight: FontWeight.bold,
decoration: TextDecoration.none,
fontSize: 20),
),
),
Text(
this.score.toString(),
style: GoogleFonts.roboto(
color: Colors.pink,
fontStyle: FontStyle.italic,
fontWeight: FontWeight.w900,
fontSize: this.isfirst == 1 ? 60 : 40,
decoration: TextDecoration.none),
),
],
);
}
}
class InGameCardConfig extends StatefulWidget {
const InGameCardConfig({Key? key}) : super(key: key);
@override
State<InGameCardConfig> createState() => _InGameCardConfigState();
}
class _InGameCardConfigState extends State<InGameCardConfig> {
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.fromLTRB(30, 0, 30, 35),
width: MediaQuery.of(context).size.width,
height: 470,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/ingame_cardgame.png"),
fit: BoxFit.fill),
boxShadow: [
BoxShadow(
color: CupertinoColors.black.withOpacity(0.15),
blurRadius: 10.0,
spreadRadius: 5.0,
),
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Padding(
padding: EdgeInsets.fromLTRB(0, 5, 15, 0),
child: RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: 'Party code : ',
style: GoogleFonts.roboto(
fontSize: 15,
color: CupertinoColors.black,
fontWeight: FontWeight.w400,
decoration: TextDecoration.none)),
TextSpan(
text: '#172 520',
style: GoogleFonts.roboto(
fontSize: 18,
color: Color(0xffF40375),
fontWeight: FontWeight.bold,
decoration: TextDecoration.none)),
],
),
)),
ListUserInGame(),
Spacer(),
Image(
image: AssetImage("assets/images/start_sentence.png"),
),
Spacer(),
Padding(
padding: EdgeInsets.fromLTRB(15, 0, 15, 15),
child: ElevatedButton(
onPressed: () {},
child: Text(
"+ Add a player",
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
fontSize: 18,
color: Colors.white),
),
style: ElevatedButton.styleFrom(
elevation: 5,
shadowColor: Color(0xffB70056),
primary: Color(0xffF40375),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
minimumSize: Size(double.infinity, 50),
),
)),
],
),
);
}
}
class ListUserInGame extends StatefulWidget {
const ListUserInGame({Key? key}) : super(key: key);
@override
State<ListUserInGame> createState() => _ListUserInGameState();
}
class _ListUserInGameState extends State<ListUserInGame> {
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.fromLTRB(20, 25, 20, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
ConstrainedBox(
constraints: new BoxConstraints(
maxHeight: 170,
),
child: ListView(children: [
UserInGame(),
UserInGame(),
UserInGame(),
UserInGame(),
UserInGame(),
])),
Text(
"3 player(s)",
style: GoogleFonts.roboto(
fontWeight: FontWeight.w500,
fontSize: 15,
color: CupertinoColors.black,
decoration: TextDecoration.none),
)
],
));
}
}
class UserInGame extends StatefulWidget {
const UserInGame({Key? key}) : super(key: key);
@override
State<UserInGame> createState() => _UserInGameState();
}
class _UserInGameState extends State<UserInGame> {
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
margin: EdgeInsets.fromLTRB(0, 0, 0, 5),
height: 45,
width: double.infinity,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(10),
),
color: Color(0xffF2F2F2),
),
child: Row(
children: [
Container(
width: 30,
height: 30,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(70)),
image: DecorationImage(
image: AssetImage("assets/images/image_user_cyan.png"),
fit: BoxFit.cover),
),
),
SizedBox(
width: 10,
),
Text(
"Emre",
style: GoogleFonts.roboto(
fontSize: 18,
decoration: TextDecoration.none,
color: Color(0xff241E40)),
),
Spacer(),
],
),
);
}
}
class InGameCardThrow extends StatefulWidget {
final int numberThrow;
const InGameCardThrow({Key? key, required this.numberThrow})
: super(key: key);
@override
State<InGameCardThrow> createState() => _InGameCardThrowState();
}
class _InGameCardThrowState extends State<InGameCardThrow> {
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.fromLTRB(30, 0, 30, 35),
width: MediaQuery.of(context).size.width,
height: 470,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/ingame_cardgame.png"),
fit: BoxFit.fill),
boxShadow: [
BoxShadow(
color: CupertinoColors.black.withOpacity(0.15),
blurRadius: 10.0,
spreadRadius: 5.0,
),
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.fromLTRB(15, 5, 0, 0),
child: RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: 'Round ',
style: GoogleFonts.roboto(
fontSize: 15,
color: CupertinoColors.black,
fontWeight: FontWeight.w400,
decoration: TextDecoration.none)),
TextSpan(
text: '1 - 1st',
style: GoogleFonts.roboto(
fontSize: 18,
color: CupertinoColors.black,
fontWeight: FontWeight.bold,
decoration: TextDecoration.none)),
TextSpan(
text: ' Throw',
style: GoogleFonts.roboto(
fontSize: 15,
color: CupertinoColors.black,
fontWeight: FontWeight.w400,
decoration: TextDecoration.none)),
],
),
)),
Padding(
padding: EdgeInsets.fromLTRB(0, 20, 0, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Round_picture(
pseudo: "Lucas",
image: "assets/images/image_user_red.png"),
],
)),
NumberPad(
numberThrow: widget.numberThrow,
),
],
),
);
}
}
class Round_picture extends StatelessWidget {
final String pseudo;
final String image;
const Round_picture({Key? key, required this.pseudo, required this.image})
: super(key: key);
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
width: 70,
height: 70,
decoration: BoxDecoration(
image: DecorationImage(image: AssetImage(image), fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(70)),
),
),
Text(
pseudo,
style: GoogleFonts.roboto(
color: CupertinoColors.black,
decoration: TextDecoration.none,
fontSize: 30),
),
],
);
}
}
class StrikeButton extends StatelessWidget {
final int currentSelected;
final IntCallback onSonChanged;
const StrikeButton(
{Key? key, required this.onSonChanged, required this.currentSelected})
: super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
onSonChanged(10);
},
child: Container(
width: double.infinity,
height: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/Strike_background.png"),
)),
child: Center(
child: Text(
"STRIKE !",
style: GoogleFonts.roboto(
color:
currentSelected == 10 ? Colors.pink : CupertinoColors.black,
decoration: TextDecoration.none,
fontWeight: FontWeight.w900,
fontStyle: FontStyle.italic,
fontSize: 40),
)),
),
);
}
}
class SpareButton extends StatelessWidget {
final int currentSelected;
final IntCallback onSonChanged;
const SpareButton(
{Key? key, required this.onSonChanged, required this.currentSelected})
: super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
onSonChanged(10);
},
child: Container(
width: double.infinity,
height: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/Spare_background.png"),
)),
child: Center(
child: Text(
"SPARE !",
style: GoogleFonts.roboto(
color:
currentSelected == 10 ? Colors.pink : CupertinoColors.black,
decoration: TextDecoration.none,
fontWeight: FontWeight.w900,
fontStyle: FontStyle.italic,
fontSize: 40),
)),
),
);
}
}
class NumberPad extends StatefulWidget {
final int numberThrow;
const NumberPad({Key? key, required this.numberThrow}) : super(key: key);
@override
State<NumberPad> createState() => _NumberPadState();
}
class _NumberPadState extends State<NumberPad> {
int NumSelected = 100;
void updateId(int newNum) {
print(newNum);
setState(() {
NumSelected = newNum;
});
}
void initState() {
NumSelected = 100;
super.initState();
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.fromLTRB(50, 0, 50, 0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Number(
currentSelected: NumSelected,
num: 1,
isSelectable: 1,
onSonChanged: (int newId) {
updateId(newId);
},
),
Number(
currentSelected: NumSelected,
num: 2,
isSelectable: 1,
onSonChanged: (int newId) {
updateId(newId);
},
),
Number(
currentSelected: NumSelected,
num: 3,
isSelectable: 1,
onSonChanged: (int newId) {
updateId(newId);
},
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Number(
currentSelected: NumSelected,
num: 4,
isSelectable: 1,
onSonChanged: (int newId) {
updateId(newId);
},
),
Number(
currentSelected: NumSelected,
num: 5,
isSelectable: 1,
onSonChanged: (int newId) {
updateId(newId);
},
),
Number(
currentSelected: NumSelected,
num: 6,
isSelectable: 1,
onSonChanged: (int newId) {
updateId(newId);
},
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Number(
currentSelected: NumSelected,
num: 7,
isSelectable: 1,
onSonChanged: (int newId) {
updateId(newId);
},
),
Number(
currentSelected: NumSelected,
num: 8,
isSelectable: 0,
onSonChanged: (int newId) {
updateId(newId);
},
),
Number(
currentSelected: NumSelected,
num: 9,
isSelectable: 0,
onSonChanged: (int newId) {
updateId(newId);
},
),
],
),
],
),
),
widget.numberThrow == 1
? StrikeButton(
currentSelected: NumSelected,
onSonChanged: (int newId) {
updateId(newId);
},
)
: SpareButton(
currentSelected: NumSelected,
onSonChanged: (int newId) {
updateId(newId);
},
)
],
);
}
}
typedef void IntCallback(int id);
class Number extends StatefulWidget {
final int num;
final int currentSelected;
final int isSelectable;
final IntCallback onSonChanged;
const Number(
{Key? key,
required this.num,
required this.isSelectable,
required this.onSonChanged,
required this.currentSelected})
: super(key: key);
@override
State<Number> createState() => _NumberState();
}
class _NumberState extends State<Number> {
@override
Widget build(BuildContext context) {
return widget.isSelectable == 1
? GestureDetector(
onTap: () {
widget.onSonChanged(widget.num);
},
child: Text(
widget.num.toString(),
style: GoogleFonts.roboto(
color: widget.currentSelected == widget.num
? Colors.pink
: Colors.black,
decoration: TextDecoration.none,
fontWeight: FontWeight.w300,
fontSize: 50),
),
)
: Text(
widget.num.toString(),
style: GoogleFonts.roboto(
color: Colors.grey,
decoration: TextDecoration.none,
fontWeight: FontWeight.w300,
fontSize: 50),
);
}
}

@ -0,0 +1,207 @@
import 'package:bowl_in/widgets/scores_list_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
class ProfilPodiumWidget extends StatelessWidget {
final int isfirst;
final String pseudo;
final int score;
const ProfilPodiumWidget(
{Key? key,
required this.isfirst,
required this.pseudo,
required this.score})
: super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
Stack(
clipBehavior: Clip.none,
children: [
Container(
width: this.isfirst == 1 ? 65 : 50,
height: this.isfirst == 1 ? 65 : 50,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_user_red.png"),
fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(70)),
),
),
if (isfirst == 1)
Positioned(
bottom: -5,
right: -15,
child: Image.asset(
'assets/images/image_trophee.png',
height: 40,
width: 40,
),
),
],
),
Padding(
padding: EdgeInsets.fromLTRB(0, 3, 0, 3),
child: Text(
this.pseudo,
style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
),
),
Container(
width: 70,
height: 25,
decoration: BoxDecoration(
color: Color(0xff3618A0),
borderRadius: BorderRadius.all(Radius.circular(70)),
),
child: Center(
child: Text(
this.score.toString() + " pts",
style: GoogleFonts.roboto(
color: Colors.white,
fontStyle: FontStyle.italic,
fontWeight: FontWeight.w600,
fontSize: 16),
),
)),
],
);
}
}
class ProfilListWidget extends StatelessWidget {
final int position;
final String pseudo;
final int score;
const ProfilListWidget(
{Key? key,
required this.position,
required this.pseudo,
required this.score})
: super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.fromLTRB(0, 0, 0, 9),
child: Container(
width: 300,
height: 65,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(17)),
color: Colors.white,
),
child: Row(
children: [
Padding(
padding: EdgeInsets.fromLTRB(18, 0, 18, 0),
child: Text(
this.position.toString(),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 14,
color: Color(0xffBABABA),
),
),
),
Container(
width: 40,
height: 40,
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(70)),
image: DecorationImage(
image: AssetImage("assets/images/image_user_cyan.png"),
fit: BoxFit.cover),
),
),
Padding(
padding: EdgeInsets.fromLTRB(10, 0, 0, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
this.pseudo,
style: TextStyle(
fontWeight: FontWeight.bold, color: Color(0xff585858)),
),
Text(
this.score.toString() + " points",
style: TextStyle(
fontWeight: FontWeight.bold, color: Color(0xffBABABA)),
),
],
),
),
],
),
),
);
}
}
class ListPodium extends StatelessWidget {
const ListPodium({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.fromLTRB(20, 80, 20, 0),
child: SizedBox(
height: 500,
child: ScrollConfiguration(
behavior: CustomScroll(),
child: ListView(
children: [
ProfilListWidget(
position: 4,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 5,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 6,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 7,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 8,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 9,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 10,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 11,
pseudo: 'Emre',
score: 35,
),
SizedBox(
height: 50,
),
],
),
)));
}
}

@ -0,0 +1,211 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:simple_gradient_text/simple_gradient_text.dart';
class CardGame extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.fromLTRB(41, 0, 41, 10),
child: GestureDetector(
child: Stack(
alignment: AlignmentDirectional.centerEnd,
children: [
Container(
margin: EdgeInsets.fromLTRB(10, 0, 10, 0),
height: 100,
width: 300,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
bottomRight: Radius.circular(15),
bottomLeft: Radius.circular(15)),
image: DecorationImage(
image: AssetImage("assets/images/card_game.png"),
),
),
child: Padding(
padding: EdgeInsets.fromLTRB(130, 3, 0, 0),
child: ClipRect(
clipBehavior: Clip.hardEdge,
child: Opacity(
opacity: 0.1,
child: Stack(
children: [
GradientText(
"125",
style: GoogleFonts.karla(
fontSize: 105.0,
fontWeight: FontWeight.w900,
fontStyle: FontStyle.italic,
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 1
..color = Color(0xff6100FF),
),
gradientType: GradientType.linear,
gradientDirection: GradientDirection.rtl,
radius: 2.5,
colors: [
Color(0xff5500E0),
Color(0xff2C2C2C).withOpacity(0),
],
),
GradientText(
"125",
style: GoogleFonts.karla(
fontSize: 105.0,
fontWeight: FontWeight.w900,
fontStyle: FontStyle.italic,
),
gradientType: GradientType.linear,
gradientDirection: GradientDirection.rtl,
radius: 2.5,
colors: [
Color(0xff5500E0),
Color(0xff2C2C2C).withOpacity(0),
],
),
],
))),
)),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Toast(),
Toast(),
],
),
Stack(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: EdgeInsets.fromLTRB(25, 15, 0, 0),
child: SizedBox(
width: 130,
child: Wrap(
spacing: 5,
runSpacing: 5,
children: [
ProfilPicture(),
ProfilPicture(),
ProfilPicture(),
ProfilPicture(),
ProfilPicture(),
ProfilPicture(),
],
),
)),
Spacer(),
Padding(
padding: EdgeInsets.fromLTRB(0, 30, 15, 0),
child: GradientText(
"125",
style: TextStyle(
fontSize: 40.0,
fontWeight: FontWeight.w900,
fontStyle: FontStyle.italic,
),
gradientType: GradientType.linear,
gradientDirection: GradientDirection.ttb,
radius: 2.5,
colors: [
Color(0xff181818),
Color(0xff626262),
],
)),
],
),
],
),
],
),
],
),
onTap: () => context.go('/in-game'),
));
}
}
class CustomScroll extends ScrollBehavior {
@override
Widget buildViewportChrome(
BuildContext context, Widget child, AxisDirection axisDirection) {
return child;
}
}
class ListCardGame extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ScrollConfiguration(
behavior: CustomScroll(),
child: ListView(
shrinkWrap: false,
children: <Widget>[
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
],
));
}
}
class ProfilPicture extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
height: 25,
width: 25,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_user_green.png"),
fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
);
}
}
class Toast extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.fromLTRB(0, 3, 10, 0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(20)),
color: Color(0xff735CDD),
),
child: Padding(
padding: EdgeInsets.fromLTRB(11.0, 3, 11.0, 3),
child: Text(
"12 janv.",
style: TextStyle(
fontSize: 10,
color: Colors.white,
),
),
)));
}
}

@ -1,65 +1,145 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
archive:
dependency: transitive
description:
name: archive
sha256: ed7cc591a948744994714375caf9a2ce89e1d82e8243997c8a2994d57181c212
url: "https://pub.dev"
source: hosted
version: "3.3.5"
args:
dependency: transitive
description:
name: args
sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
url: "https://pub.dev"
source: hosted
version: "2.9.0"
version: "2.10.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.1"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
url: "https://pub.dev"
source: hosted
version: "1.2.1"
checked_yaml:
dependency: transitive
description:
name: checked_yaml
sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
cli_util:
dependency: transitive
description:
name: cli_util
sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c"
url: "https://pub.dev"
source: hosted
version: "0.3.5"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted
version: "1.1.1"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
url: "https://pub.dev"
source: hosted
version: "1.17.0"
convert:
dependency: transitive
description:
name: convert
sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592"
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "3.1.1"
crypto:
dependency: transitive
description:
name: crypto
sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67
url: "https://pub.dev"
source: hosted
version: "3.0.2"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be
url: "https://pub.dev"
source: hosted
version: "1.0.5"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
ffi:
dependency: transitive
description:
name: ffi
sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978
url: "https://pub.dev"
source: hosted
version: "2.0.1"
file:
dependency: transitive
description:
name: file
sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d"
url: "https://pub.dev"
source: hosted
version: "6.1.4"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_launcher_icons:
dependency: "direct dev"
description:
name: flutter_launcher_icons
sha256: ce0e501cfc258907842238e4ca605e74b7fd1cdf04b3b43e86c43f3e40a1592c
url: "https://pub.dev"
source: hosted
version: "0.11.0"
flutter_lints:
dependency: "direct dev"
description:
name: flutter_lints
url: "https://pub.dartlang.org"
sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c
url: "https://pub.dev"
source: hosted
version: "2.0.1"
flutter_test:
@ -67,41 +147,211 @@ packages:
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
go_router:
dependency: "direct main"
description:
name: go_router
sha256: f611d4396469c46db1c61e934a86e2a590ce02de2a6050d01f677879ce151f4a
url: "https://pub.dev"
source: hosted
version: "6.0.1"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
sha256: "8f099045e2f2a30e4d4d0a35f40c6bc941a8f2ca0e10ad9d214ee9edd3f37483"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
http:
dependency: transitive
description:
name: http
sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
url: "https://pub.dev"
source: hosted
version: "0.13.5"
http_parser:
dependency: transitive
description:
name: http_parser
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
image:
dependency: transitive
description:
name: image
sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6"
url: "https://pub.dev"
source: hosted
version: "3.3.0"
js:
dependency: transitive
description:
name: js
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
url: "https://pub.dev"
source: hosted
version: "0.6.5"
json_annotation:
dependency: transitive
description:
name: json_annotation
sha256: c33da08e136c3df0190bd5bbe51ae1df4a7d96e7954d1d7249fea2968a72d317
url: "https://pub.dev"
source: hosted
version: "4.8.0"
lints:
dependency: transitive
description:
name: lints
url: "https://pub.dartlang.org"
sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
url: "https://pub.dev"
source: hosted
version: "2.0.1"
logging:
dependency: transitive
description:
name: logging
sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946
url: "https://pub.dev"
source: hosted
version: "1.1.0"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
url: "https://pub.dev"
source: hosted
version: "0.12.12"
version: "0.12.13"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
url: "https://pub.dev"
source: hosted
version: "0.1.5"
version: "0.2.0"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
url: "https://pub.dev"
source: hosted
version: "1.8.0"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
url: "https://pub.dev"
source: hosted
version: "1.8.2"
path_provider:
dependency: transitive
description:
name: path_provider
sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95
url: "https://pub.dev"
source: hosted
version: "2.0.12"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e
url: "https://pub.dev"
source: hosted
version: "2.0.22"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "6637955e38a5f1851c023482c25a60c93972ea06c8608e2f25ad0064c46c0939"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379
url: "https://pub.dev"
source: hosted
version: "2.1.7"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76
url: "https://pub.dev"
source: hosted
version: "2.0.5"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c
url: "https://pub.dev"
source: hosted
version: "2.1.3"
petitparser:
dependency: transitive
description:
name: petitparser
sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4"
url: "https://pub.dev"
source: hosted
version: "5.1.0"
platform:
dependency: transitive
description:
name: platform
sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a
url: "https://pub.dev"
source: hosted
version: "2.1.3"
pointycastle:
dependency: transitive
description:
name: pointycastle
sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346
url: "https://pub.dev"
source: hosted
version: "3.6.2"
process:
dependency: transitive
description:
name: process
sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09"
url: "https://pub.dev"
source: hosted
version: "4.2.4"
simple_gradient_text:
dependency: "direct main"
description:
name: simple_gradient_text
sha256: "075a2cbabac021d3713d0d199b2d1b0d40f6293e1e9d37b25e84936ae43c90fa"
url: "https://pub.dev"
source: hosted
version: "1.2.4"
sky_engine:
dependency: transitive
description: flutter
@ -111,50 +361,98 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
url: "https://pub.dev"
source: hosted
version: "1.9.0"
version: "1.9.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "1.11.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.1"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
url: "https://pub.dev"
source: hosted
version: "0.4.16"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
url: "https://pub.dev"
source: hosted
version: "0.4.12"
version: "1.3.1"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
win32:
dependency: transitive
description:
name: win32
sha256: c9ebe7ee4ab0c2194e65d3a07d8c54c5d00bb001b76081c4a04cdb8448b59e46
url: "https://pub.dev"
source: hosted
version: "3.1.3"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86
url: "https://pub.dev"
source: hosted
version: "0.2.0+3"
xml:
dependency: transitive
description:
name: xml
sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb
url: "https://pub.dev"
source: hosted
version: "6.1.0"
yaml:
dependency: transitive
description:
name: yaml
sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "3.1.1"
sdks:
dart: ">=2.18.2 <3.0.0"
flutter: ">=3.3.0"

@ -36,17 +36,27 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
simple_gradient_text: ^1.2.4
google_fonts: ^3.0.1
go_router: ^6.0.1
dev_dependencies:
flutter_test:
sdk: flutter
flutter_launcher_icons: ^0.11.0
# The "flutter_lints" package below contains a set of recommended lints to
# encourage good coding practices. The lint set provided by the package is
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^2.0.0
flutter_icons:
android: true
ios: true
image_path: "assets/images/icon.png"
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
@ -60,9 +70,10 @@ flutter:
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
assets:
- assets/images/
- assets/fonts/
- assets/images/achievements/
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware
@ -75,17 +86,9 @@ flutter:
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
fonts:
- family: BowlInFont
fonts:
- asset: assets/fonts/BowlInFont.ttf
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Loading…
Cancel
Save