Commit 14f376d1 authored by Boteju W.J.M.'s avatar Boteju W.J.M.

10/14

parent 9f9f2dc8
Pipeline #1727 failed with stages
Free download fonts at http://sharefonts.net
\ No newline at end of file
import 'package:fitnessapp/constants.dart';
import 'package:fitnessapp/Screens/WalkingPatternRecognition/widgets/monthly_chart.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:fitnessapp/Screens/WalkingPatternRecognition/service.dart';
import 'dart:convert';
import 'package:fitnessapp/loading.dart';
......
This diff is collapsed.
import 'dart:convert';
import 'package:fitnessapp/Screens/DogBreedRecognition/dog_breed_identification_screen.dart';
import 'package:fitnessapp/Screens/Home/home.dart';
import 'package:fitnessapp/Screens/Login/login_screen.dart';
import 'package:fitnessapp/Screens/WalkingPatternRecognition/service.dart';
import 'package:fitnessapp/constants.dart';
import 'package:flutter/material.dart';
import 'package:fitnessapp/Screens/Login/components/background.dart';
import 'package:fitnessapp/Screens/Signup/signup_screen.dart';
import 'package:fitnessapp/components/already_have_an_account_acheck.dart';
import 'package:fitnessapp/components/rounded_button.dart';
import 'package:fitnessapp/components/rounded_input_field.dart';
import 'package:fitnessapp/components/rounded_password_field.dart';
import '../../../loading.dart';
import 'package:fitnessapp/globals.dart' as globals;
class Body extends StatefulWidget {
const Body({
......@@ -25,25 +26,50 @@ class _BodyState extends State<Body> {
String token = '';
String username = '';
String password = '';
bool enterDetails = false;
bool enterCorrectDetails = false;
login() async {
SearchService.login(username, password).then((responseBody) {
if (username == '' && password == '') {
this.enterDetails = true;
} else {
SearchService.login(username, password).then((responseBody) {
dynamic data = jsonDecode(responseBody);
setState(() {
loading = true;
globals.userId = data['user_id'];
globals.token = data['token'];
globals.email = data['email'];
this.getDogsBasedOnUser(globals.userId);
loading = false;
});
});
}
}
getDogsBasedOnUser(userId) async {
SearchService.getDogsBasedOnUser(userId).then((responseBody) {
dynamic data = jsonDecode(responseBody);
print(data);
setState(() {
loading = false;
token = data['token'];
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return DogBreedIdentification();
},
),
);
// if (token.length > 0) {
// loading = false;
// }
globals.dogId = data[0]['dog']['id'];
globals.birthday = data[0]['dog']['birthday'];
globals.dogName = data[0]['dog']['name'];
globals.dogGender = data[0]['dog']['gender'];
globals.url = data[0]['dog']['imageUrl'];
globals.dogBreed = data[0]['dog']['breed'];
if (globals.userId > 0) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return HomePage();
},
),
);
} else {
this.enterCorrectDetails = true;
}
});
});
}
......@@ -75,24 +101,31 @@ class _BodyState extends State<Body> {
},
),
ButtonTheme(
buttonColor: kPrimaryColor,
minWidth: 300,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20)),
child: RaisedButton(
buttonColor: Colors.white,
minWidth: 280,
height: 45,
child: OutlineButton(
onPressed: () {
setState(() {
loading = true;
});
this.login();
},
child: Text(
"LOGIN",
style: TextStyle(color: kPrimaryColor2),
style: TextStyle(
color: kPrimaryColor, fontWeight: FontWeight.bold),
),
borderSide: BorderSide(color: kPrimaryColor, width: 2),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30)),
),
),
SizedBox(height: size.height * 0.03),
enterDetails
? Text(
'Please Enter the Details!',
style: TextStyle(
color: Colors.red, fontWeight: FontWeight.bold),
)
: Text(''),
AlreadyHaveAnAccountCheck(
press: () {
Navigator.push(
......
import 'dart:convert';
import 'package:fitnessapp/Screens/DogBreedRecognition/dog_breed_identification_screen.dart';
import 'package:fitnessapp/Screens/WalkingPatternRecognition/service.dart';
import 'package:fitnessapp/components/rounded_input_field_email.dart';
import 'package:flutter/material.dart';
import 'package:fitnessapp/Screens/Login/login_screen.dart';
import 'package:fitnessapp/Screens/Signup/components/background.dart';
......@@ -8,6 +9,7 @@ import 'package:fitnessapp/components/already_have_an_account_acheck.dart';
import 'package:fitnessapp/components/rounded_input_field.dart';
import 'package:fitnessapp/components/rounded_password_field.dart';
import '../../../constants.dart';
import '../../../loading.dart';
class Body extends StatefulWidget {
@override
......@@ -16,17 +18,36 @@ class Body extends StatefulWidget {
class _BodyState extends State<Body> {
bool loading = false;
String token = '';
String username = '';
String password = '';
String email = '';
bool userExists = false;
login() async {
SearchService.login(username, password).then((responseBody) {
signup() async {
SearchService.register(username, password, email).then((responseBody) {
dynamic data = jsonDecode(responseBody);
print(data);
print(data['error']);
setState(() {
loading = false;
token = data['token'];
if ((data['username'] != '' || data['username'] != null) &&
data['error'] == 'No') {
userExists = false;
print("New User");
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return DogBreedIdentification();
},
),
);
}
if (data['NoUserError'] == 'error') {
print("User Exists");
this.userExists = true;
}
});
});
}
......@@ -34,86 +55,81 @@ class _BodyState extends State<Body> {
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Background(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(height: 300),
RoundedInputField(
hintText: "Your Email",
onChanged: (value) {
setState(() {
username = value;
});
},
),
RoundedInputField(
hintText: "Your Username",
onChanged: (value) {
setState(() {
username = value;
});
},
),
RoundedPasswordField(
onChanged: (value) {
setState(() {
password = value;
});
},
),
ButtonTheme(
buttonColor: kPrimaryColor,
minWidth: 300,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20)),
child: RaisedButton(
onPressed: () {
setState(() {
loading = true;
});
this.login();
},
child: Text(
"SIGN UP",
style: TextStyle(color: kPrimaryColor2),
),
),
),
SizedBox(height: size.height * 0.03),
Row(
children: [
SizedBox(
width: 100,
),
Column(
children: [
Text(
"Already have an Account?",
style: TextStyle(color: kPrimaryColor),
),
],
),
SizedBox(
width: 10,
),
Column(
children: [
Text(
"Login",
style: TextStyle(
color: kPrimaryColor,
fontWeight: FontWeight.bold,
return loading
? Loading()
: Background(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(height: 300),
RoundedEmailInputField(
hintText: "Your Email",
onChanged: (value) {
setState(() {
email = value;
});
},
),
RoundedInputField(
hintText: "Your Username",
onChanged: (value) {
setState(() {
username = value;
});
},
),
RoundedPasswordField(
onChanged: (value) {
setState(() {
password = value;
});
},
),
ButtonTheme(
buttonColor: Colors.white,
minWidth: 280,
height: 45,
child: OutlineButton(
onPressed: () {
setState(() {
loading = true;
});
this.signup();
},
child: Text(
"SIGN UP",
style: TextStyle(
color: kPrimaryColor, fontWeight: FontWeight.bold),
),
borderSide: BorderSide(color: kPrimaryColor, width: 2),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30)),
),
],
)
],
)
],
),
),
);
),
SizedBox(height: size.height * 0.03),
userExists
? Text(
'User Exists !',
style: TextStyle(
color: Colors.red, fontWeight: FontWeight.bold),
)
: Text(''),
AlreadyHaveAnAccountCheck2(
press: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return LoginScreen();
},
),
);
},
),
],
),
),
);
}
}
......@@ -3,8 +3,7 @@ import 'dart:convert';
import 'package:fitnessapp/globals.dart' as globals;
class SearchService {
static String ip = 'http://192.168.1.3:8000';
static int dog = 1;
static String ip = 'http://192.168.1.5:8000';
static String username = 'Janadi';
static String password = 'janadi2.';
static String basicAuth =
......@@ -12,6 +11,24 @@ class SearchService {
//Dog Profile
static Future<String> getDogsBasedOnUser(userId) async {
String url = '$ip/getDogsBasedOnUser';
var body = jsonEncode({
"userId": userId,
});
http.Response response = await http
.post(url,
headers: {
"Content-Type": "application/json",
'authorization': basicAuth
},
body: body)
.then((http.Response response) {
return response;
});
return response.body;
}
static Future<String> addDogProfile(
name, breed, gender, birthday, imageUrl, user) async {
String url = '$ip/addDogProfile';
......@@ -21,7 +38,7 @@ class SearchService {
"gender": gender,
"birthday": birthday,
"imageUrl": imageUrl,
"user": 1
"user": user
});
http.Response response = await http
.post(url,
......@@ -53,10 +70,28 @@ class SearchService {
});
return response.body;
}
//Sign Up
static Future<String> register(username, password, email) async {
String url = '$ip/registerUser';
var body = jsonEncode(
{"username": username, "password": password, "email": email});
http.Response response = await http
.post(url,
headers: {
"Content-Type": "application/json",
'authorization': basicAuth
},
body: body)
.then((http.Response response) {
return response;
});
return response.body;
}
//Login
static Future<String> login(username, password) async {
String url = '$ip/auth/';
String url = '$ip/auth';
var body = jsonEncode({"username": username, "password": password});
http.Response response = await http
.post(url,
......@@ -93,7 +128,7 @@ class SearchService {
String url = '$ip/getTotalMinutesPerHour';
var body = jsonEncode({
"activity": globals.activityId,
"dog": dog,
"dog": globals.dogId,
"date": day,
});
http.Response response = await http
......@@ -111,8 +146,8 @@ class SearchService {
static Future<String> getTotalMinutesPerDay(day) async {
String url = '$ip/getTotalMinutesPerDay';
var body =
jsonEncode({"activity": globals.activityId, "dog": dog, "date": day});
var body = jsonEncode(
{"activity": globals.activityId, "dog": globals.dogId, "date": day});
http.Response response = await http
.post(url,
headers: {
......@@ -126,7 +161,7 @@ class SearchService {
return response.body;
}
static Future<String> getTotalWalkingMinutesPerDay(day) async {
static Future<String> getTotalWalkingMinutesPerDay(day, dog) async {
String url = '$ip/getTotalMinutesPerDay';
var body = jsonEncode({"activity": 1, "dog": dog, "date": day});
http.Response response = await http
......@@ -142,7 +177,7 @@ class SearchService {
return response.body;
}
static Future<String> getTotalRunningMinutesPerDay(day) async {
static Future<String> getTotalRunningMinutesPerDay(day, dog) async {
String url = '$ip/getTotalMinutesPerDay';
var body = jsonEncode({"activity": 2, "dog": dog, "date": day});
http.Response response = await http
......@@ -160,8 +195,8 @@ class SearchService {
static Future<String> getHighlightsPerDay(date) async {
String url = '$ip/highlightsPerDay';
var body =
jsonEncode({"activity": globals.activityId, "dog": dog, "date": date});
var body = jsonEncode(
{"activity": globals.activityId, "dog": globals.dogId, "date": date});
http.Response response = await http
.post(url,
headers: {
......@@ -179,8 +214,11 @@ class SearchService {
static Future<String> getTotalMinutesPerWeek(formattedDate) async {
String url = '$ip/getTotalMinutesPerWeek';
var body = jsonEncode(
{"activity": globals.activityId, "dog": dog, "date": formattedDate});
var body = jsonEncode({
"activity": globals.activityId,
"dog": globals.dogId,
"date": formattedDate
});
http.Response response = await http
.post(url,
headers: {
......@@ -196,8 +234,8 @@ class SearchService {
static Future<String> getTotalMinutesPerDayInWeek(date) async {
String url = '$ip/getTotalMinutesPerDayInWeek';
var body =
jsonEncode({"activity": globals.activityId, "dog": dog, "date": date});
var body = jsonEncode(
{"activity": globals.activityId, "dog": globals.dogId, "date": date});
http.Response response = await http
.post(url,
headers: {
......@@ -214,8 +252,8 @@ class SearchService {
static Future<String> getHighlightsPerWeek(date) async {
String url = '$ip/highlightsPerWeek';
var body =
jsonEncode({"activity": globals.activityId, "dog": dog, "date": date});
var body = jsonEncode(
{"activity": globals.activityId, "dog": globals.dogId, "date": date});
http.Response response = await http
.post(url,
headers: {
......@@ -235,7 +273,7 @@ class SearchService {
String url = '$ip/getWeeklyDetailsInMonth';
var body = jsonEncode({
"activity": globals.activityId,
"dog": dog,
"dog": globals.dogId,
"year": year,
"month": month
});
......@@ -256,7 +294,7 @@ class SearchService {
static Future<String> getTotalMinutesPerMonth(month) async {
String url = '$ip/getTotalMinutesPerMonth';
var body = jsonEncode(
{"activity": globals.activityId, "dog": dog, "month": month});
{"activity": globals.activityId, "dog": globals.dogId, "month": month});
http.Response response = await http
.post(url,
headers: {
......@@ -274,7 +312,7 @@ class SearchService {
static Future<String> getHighlightsPerMonth(month) async {
String url = '$ip/highlightsPerMonth';
var body = jsonEncode(
{"activity": globals.activityId, "dog": dog, "month": month});
{"activity": globals.activityId, "dog": globals.dogId, "month": month});
http.Response response = await http
.post(url,
headers: {
......@@ -292,8 +330,8 @@ class SearchService {
static Future<String> getTotalMinutesPerYear(year) async {
String url = '$ip/getTotalMinutesPerYear';
var body =
jsonEncode({"activity": globals.activityId, "dog": dog, "year": year});
var body = jsonEncode(
{"activity": globals.activityId, "dog": globals.dogId, "year": year});
http.Response response = await http
.post(url,
headers: {
......@@ -312,7 +350,7 @@ class SearchService {
String url = '$ip/getMonthlyDetailsInYear';
var body = jsonEncode({
"activity": globals.activityId,
"dog": dog,
"dog": globals.dogId,
"year": year,
});
http.Response response = await http
......@@ -331,8 +369,8 @@ class SearchService {
static Future<String> getHighlightsPerYear(year) async {
String url = '$ip/highlightsPerYear';
var body =
jsonEncode({"activity": globals.activityId, "dog": dog, "year": year});
var body = jsonEncode(
{"activity": globals.activityId, "dog": globals.dogId, "year": year});
http.Response response = await http
.post(url,
headers: {
......
import 'package:flutter/material.dart';
class Background extends StatelessWidget {
class Background extends StatefulWidget {
final Widget child;
const Background({
Key key,
@required this.child,
}) : super(key: key);
@override
_BackgroundState createState() => _BackgroundState();
}
class _BackgroundState extends State<Background> {
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Container(
height: size.height,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/PawBackground2.png"),
fit: BoxFit.cover,
),
),
width: double.infinity,
height: size.height,
child: Stack(
alignment: Alignment.center,
children: <Widget>[
Positioned(
top: 0,
left: 0,
child: Image.asset(
"assets/images/main_top.png",
width: size.width * 0.3,
),
),
Positioned(
bottom: 0,
left: 0,
child: Image.asset(
"assets/images/main_bottom.png",
width: size.width * 0.2,
),
),
child,
widget.child,
],
),
);
......
......@@ -4,9 +4,13 @@ import 'package:fitnessapp/Screens/Signup/signup_screen.dart';
import 'package:fitnessapp/Screens/Welcome/components/background.dart';
import 'package:fitnessapp/components/rounded_button.dart';
import 'package:fitnessapp/constants.dart';
import 'package:flutter_svg/svg.dart';
class Body extends StatelessWidget {
class Body extends StatefulWidget {
@override
_BodyState createState() => _BodyState();
}
class _BodyState extends State<Body> {
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
......@@ -16,44 +20,55 @@ class Body extends StatelessWidget {
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"DOGGY APP",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 30),
),
SizedBox(height: size.height * 0.05),
SvgPicture.asset(
"assets/icons/chat.svg",
height: size.height * 0.45,
SizedBox(height: 300),
SizedBox(
height: 20,
),
SizedBox(height: size.height * 0.05),
RoundedButton(
text: "LOGIN",
press: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return LoginScreen();
},
),
);
},
ButtonTheme(
buttonColor: Colors.white,
minWidth: 320,
height: 55,
child: OutlineButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SignUpScreen()),
);
},
child: Text(
"SIGN UP",
style: TextStyle(
color: kPrimaryColor, fontWeight: FontWeight.bold),
),
borderSide: BorderSide(color: kPrimaryColor, width: 2),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30)),
),
),
RoundedButton(
text: "SIGN UP",
color: kPrimaryLightColor,
textColor: Colors.black,
press: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return SignUpScreen();
},
),
);
},
SizedBox(
height: 20,
),
ButtonTheme(
buttonColor: Colors.white,
minWidth: 320,
height: 55,
child: OutlineButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => LoginScreen()),
);
},
child: Text(
"LOGIN",
style: TextStyle(
color: kPrimaryColor, fontWeight: FontWeight.bold),
),
borderSide: BorderSide(color: kPrimaryColor, width: 2),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30)),
),
)
],
),
),
......
......@@ -33,3 +33,39 @@ class AlreadyHaveAnAccountCheck extends StatelessWidget {
);
}
}
class AlreadyHaveAnAccountCheck2 extends StatelessWidget {
final bool signup;
final Function press;
const AlreadyHaveAnAccountCheck2({
Key key,
this.signup = true,
this.press,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
signup ? "Already have an Account ?" : "Already have an Account ? ",
style: TextStyle(color: kPrimaryColor),
),
SizedBox(
width: 10,
),
GestureDetector(
onTap: press,
child: Text(
signup ? "Login" : "Sign In",
style: TextStyle(
color: kPrimaryColor,
fontWeight: FontWeight.bold,
),
),
)
],
);
}
}
import 'package:flutter/material.dart';
import 'package:fitnessapp/components/text_field_container.dart';
import 'package:fitnessapp/constants.dart';
class RoundedEmailInputField extends StatelessWidget {
final String hintText;
final IconData icon;
final ValueChanged<String> onChanged;
const RoundedEmailInputField({
Key key,
this.hintText,
this.icon = Icons.mail,
this.onChanged,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return TextFieldContainer(
child: TextField(
onChanged: onChanged,
cursorColor: kPrimaryColor,
decoration: InputDecoration(
icon: Icon(
icon,
color: kPrimaryColor,
),
hintText: hintText,
border: InputBorder.none,
),
),
);
}
}
import 'package:flutter/material.dart';
//const kPrimaryColor = Color(0xFF6F35A5);
const kPrimaryLightColor = Color(0xF8FFEC);
const kTextColor = Color(0xFF1E2432);
const kTextMediumColor = Color(0xFF53627C);
const kTextLightColor = Color(0xFFACB1C0);
const kPrimaryColor = Color(0xFF55BD8B);
const kPrimaryColor2 = Color(0xFFE3F4EC);
// const kPrimaryColor = Color(0xFF71C89E);
const kPrimaryColor3 = Color(0xFF8ED3B2);
// const kPrimaryColor = Color(0xFF388E3C);
const kBackgroundColor = Color(0xFFFCFCFC);
const kInactiveChartColor = Color(0xFFEAECEF);
const kPrimaryGreenColor = Color(0xFF388E3C);
// const kPrimaryGreenColor = Color(0xFF55BD8B);
const kRedColour = Color(0xFFD75050);
const kPinkColour = Color(0xFFE361C7);
const kPurpleColour = Color(0xFF6E6CDF);
const kOrangeColour = Color(0xFFD75050);
const kGreyColour = Color(0xFFDEDFE5);
const kPinkColour = Color(0xFFFF6D63);
const kYellowColour = Color(0xFFF7C64A);
const kBlueColour = Color(0xFF2175CE);
const kLightBlueColour = Color(0xFF4ABAFF);
const kGreenColour = Color(0xFF195D3A);
const kWhiteColour = Color(0xFFFFFFFF);
const kBlackColour = Color(0xFF000000);
library my_prj.globals;
//user
int userId;
String email = '';
String token = '';
//dog
int dogId;
int activityId;
String url = "";
String dogName = "";
String dogBreed = "";
int userId;
String dogGender = "";
String birthday = "";
import 'package:fitnessapp/Screens/DogBreedRecognition/try_again_screen.dart';
import 'package:fitnessapp/Screens/Welcome/welcome_screen.dart';
import 'package:flutter/material.dart';
import 'package:fitnessapp/Screens/Home/home.dart';
import 'package:fitnessapp/Screens/Login/login_screen.dart';
import 'Screens/DogBreedRecognition/dog_breed_identification_screen.dart';
import 'Screens/DogBreedRecognition/dog_details_screen.dart';
import 'package:fitnessapp/constants.dart';
import 'Screens/WalkingPatternRecognition/home_page.dart';
void main() => runApp(MyApp());
......@@ -22,7 +21,7 @@ class MyApp extends StatelessWidget {
// home: WalkingHomePage(),
//home: MonthlyDetailsScreen(),
//initialRoute: '/',
home: LoginScreen(),
home: WelcomeScreen(),
routes: {
'/Home': (context) => HomePage(),
'/details': (context) => DogDetails(),
......
......@@ -282,6 +282,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "3.10.2"
google_fonts:
dependency: "direct main"
description:
name: google_fonts
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
http:
dependency: "direct main"
description:
......
......@@ -36,6 +36,7 @@ dependencies:
jiffy: ^3.0.1
quiver: ^2.1.3
flutter_spinkit: ^4.1.2
google_fonts: ^1.1.0
dev_dependencies:
flutter_test:
......@@ -46,40 +47,19 @@ dev_dependencies:
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
flutter:
assets:
- assets/images/
- assets/icons/
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "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
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
fonts:
- family: Cooper
fonts:
- asset: assets/fonts/CooperItalic.ttf
style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment