Added a lot

This commit is contained in:
2022-11-20 06:33:51 +02:00
parent 4769f37b8a
commit 474eb13cfa
6 changed files with 650 additions and 74 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

+510 -73
View File
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:spannable_grid/spannable_grid.dart';
import 'package:percent_indicator/percent_indicator.dart';
void main() {
runApp(const MyApp());
@@ -12,8 +13,13 @@ class MyApp extends StatelessWidget {
return MaterialApp(
title: 'Fitness Homie',
theme: ThemeData(
primarySwatch: Colors.blue,
),
primarySwatch: Colors.blue,
appBarTheme: AppBarTheme(
backgroundColor: Colors.transparent,
elevation: 0.0,
centerTitle: true,
titleTextStyle: TextStyle(color: Colors.black, fontSize: 20),
)),
home: const MyHomePage(title: 'Fitness Homie'),
);
}
@@ -28,65 +34,476 @@ class MyHomePage extends StatefulWidget {
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
int _selectedIndex = 0;
int itemount = 0;
int _selectedIndex = 1;
int counter = 0;
bool _value = false;
int _completed_tasks = 10;
List<Widget> tasks = [];
final tasks_progress = [];
int _total_tasks = 15;
final screens = [
Center(child: Text('Targets')),
SpannableGrid(
cells: [
SpannableGridCellData(
id: 1,
column: 1,
row: 1,
columnSpan: 2,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1)),
final screens = [];
void set_total_tasks() {
_total_tasks = tasks.length;
}
void onChanged(value) {
setState(() {
_value = value;
if (value) {
_completed_tasks += 1;
} else {
_completed_tasks -= 1;
}
});
}
void add_task(task_name, {goal = Null}) {
setState(() {
;
Row task = Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
task_name,
style: TextStyle(color: Colors.black, fontSize: 20),
)
],
);
if (goal == Null) {
tasks_progress.add(false);
task.children.add(Checkbox(value: this._value, onChanged: onChanged));
} else {
tasks_progress.add(0);
task.children.add(CircularPercentIndicator(
radius: 60.0,
lineWidth: 5.0,
percent: 1.0,
center: new Text("${tasks_progress[tasks_progress.length]}"),
progressColor: Colors.green,
));
// task.children.add();
}
Container t = Container(
margin: EdgeInsets.fromLTRB(20, 20, 20, 0),
padding: EdgeInsets.all(5),
decoration: BoxDecoration(
color: Color.fromRGBO(235, 235, 235, 1),
borderRadius: BorderRadius.circular(8)),
child: task,
);
tasks.add(task);
});
}
void onPressed() {
setState(() {
_total_tasks += 1;
add_task("Name");
});
}
void create_profile_page() {
setState(() {
screens.add(
Stack(
children: [
Column(
children: [
Expanded(
flex: 5,
child: Container(
width: double.infinity,
height: 10,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Colors.deepPurple, Colors.deepPurpleAccent],
),
),
child: Column(children: [
SizedBox(
height: 80.0,
),
CircleAvatar(
radius: 65.0,
foregroundImage: AssetImage("blank-profile.jpg"),
backgroundColor: Colors.grey,
),
SizedBox(
height: 10.0,
),
Text('Dumitrana Mihnea',
style: TextStyle(
color: Colors.white,
fontSize: 20.0,
)),
Text(
'Boss',
style: TextStyle(
color: Colors.white,
fontSize: 15.0,
),
)
]),
),
),
Expanded(
flex: 5,
child: Container(
color: Colors.grey[200],
child: Center(
child: Card(
margin: EdgeInsets.fromLTRB(0.0, 45.0, 0.0, 10.0),
child: Container(
width: 310.0,
height: 290.0,
child: Padding(
padding: EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
SizedBox(
height: 60,
),
Text(
"Information",
style: TextStyle(
fontSize: 17.0,
fontWeight: FontWeight.w800,
),
),
Divider(
color: Colors.grey[300],
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
SizedBox(
height: 20,
),
Icon(
Icons.fitness_center,
color: Colors.blueAccent[400],
size: 35,
),
SizedBox(
width: 20.0,
),
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
"Body Type",
style: TextStyle(
fontSize: 15.0,
),
),
Text(
"Burly",
style: TextStyle(
fontSize: 12.0,
color: Colors.grey[400],
),
)
],
)
],
),
SizedBox(
height: 20.0,
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Icon(
Icons.accessibility_new,
color: Colors.yellowAccent[400],
size: 35,
),
SizedBox(
width: 20.0,
),
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
"Heigth",
style: TextStyle(
fontSize: 15.0,
),
),
Text(
"1.86 meters",
style: TextStyle(
fontSize: 12.0,
color: Colors.grey[400],
),
)
],
)
],
),
SizedBox(
height: 20.0,
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Icon(
Icons.favorite,
color: Colors.pinkAccent[400],
size: 35,
),
SizedBox(
width: 20.0,
),
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
"Vitals",
style: TextStyle(
fontSize: 15.0,
),
),
Text(
"Cats, Basketball, Guitar",
style: TextStyle(
fontSize: 12.0,
color: Colors.grey[400],
),
)
],
)
],
),
SizedBox(
height: 10.0,
),
],
)))),
),
),
)
],
),
Positioned(
top: MediaQuery.of(context).size.height * 0.45,
left: 20.0,
right: 20.0,
child: Card(
child: Padding(
padding: EdgeInsets.all(16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(
child: Column(
children: [
Text(
'Achievements',
style: TextStyle(
color: Colors.grey[400], fontSize: 14.0),
),
SizedBox(
height: 5.0,
),
Text(
"$counter",
style: TextStyle(
fontSize: 15.0,
),
)
],
)),
Container(
child: Column(children: [
Text(
'Birthday',
style: TextStyle(
color: Colors.grey[400], fontSize: 14.0),
),
SizedBox(
height: 5.0,
),
Text(
'April 7th',
style: TextStyle(
fontSize: 15.0,
),
)
]),
),
Container(
child: Column(
children: [
Text(
'Age',
style: TextStyle(
color: Colors.grey[400], fontSize: 14.0),
),
SizedBox(
height: 5.0,
),
Text(
'19 yrs',
style: TextStyle(
fontSize: 15.0,
),
)
],
)),
],
),
)))
],
),
SpannableGridCellData(
id: 2,
column: 1,
row: 2,
columnSpan: 2,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1))),
SpannableGridCellData(
id: 3,
column: 1,
row: 3,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1)),
);
});
}
void create_targets_page() {
setState(() {
screens.add(
SpannableGrid(
gridSize: SpannableGridSize.parent,
cells: [
SpannableGridCellData(
id: 1,
column: 1,
row: 1,
child: Container(
margin: EdgeInsets.fromLTRB(20, 20, 20, 0),
padding: EdgeInsets.all(5),
decoration: BoxDecoration(
color: Color.fromRGBO(235, 235, 235, 1),
borderRadius: BorderRadius.circular(8)),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
"Daily Tasks Completed $_completed_tasks/$_total_tasks",
style: TextStyle(color: Colors.black, fontSize: 20),
),
],
))),
SpannableGridCellData(
id: 2,
column: 1,
row: 2,
child: Container(
margin: EdgeInsets.fromLTRB(10, 0, 20, 10),
decoration:
BoxDecoration(borderRadius: BorderRadius.circular(16)),
child: LinearPercentIndicator(
alignment: MainAxisAlignment.center,
width: MediaQuery.of(context).size.width * 0.8,
lineHeight: 20.0,
animation: true,
animationDuration: 2500,
percent: _completed_tasks / _total_tasks,
backgroundColor: Color.fromRGBO(235, 235, 235, 1),
progressColor: Colors.deepPurpleAccent,
barRadius: Radius.circular(16),
),
),
),
SpannableGridCellData(
id: 3,
column: 1,
row: 3,
rowSpan: 7,
child: ListView(
children: tasks,
)),
SpannableGridCellData(
id: 4,
column: 1,
row: 10,
child: Container(
margin: EdgeInsets.all(10),
child: FloatingActionButton(
onPressed: onPressed,
child: Icon(Icons.add),
foregroundColor: Colors.black,
backgroundColor: Colors.white,
)))
],
rows: 10,
columns: 1,
),
SpannableGridCellData(
id: 4,
column: 1,
row: 4,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1)),
);
});
}
void create_home_page() {
setState(() {
screens.add(
SpannableGrid(
cells: [
SpannableGridCellData(
id: 1,
column: 1,
row: 1,
columnSpan: 2,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1)),
),
SpannableGridCellData(
id: 2,
column: 1,
row: 2,
columnSpan: 2,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1))),
SpannableGridCellData(
id: 3,
column: 1,
row: 3,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1)),
),
SpannableGridCellData(
id: 4,
column: 1,
row: 4,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1)),
),
SpannableGridCellData(
id: 5,
column: 2,
row: 3,
rowSpan: 2,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1)),
),
],
columns: 2,
rows: 4,
style: SpannableGridStyle(
spacing: 10,
),
),
SpannableGridCellData(
id: 5,
column: 2,
row: 3,
rowSpan: 2,
child: Container(
child: Center(child: Text("Text 1")),
color: Color.fromRGBO(255, 255, 0, 1)),
),
],
columns: 2,
rows: 4,
style: SpannableGridStyle(
spacing: 10,
),
),
Center(child: Text('Profile')),
];
);
});
}
void _onItemTapped(int index) {
setState(() {
@@ -96,21 +513,41 @@ class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: screens[_selectedIndex],
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
label: "Targets", icon: Icon(Icons.track_changes)),
BottomNavigationBarItem(label: "Home", icon: Icon(Icons.home)),
BottomNavigationBarItem(label: "Profile", icon: Icon(Icons.person))
],
currentIndex: _selectedIndex,
onTap: _onItemTapped,
),
);
create_targets_page();
create_home_page();
create_profile_page();
return Container(
child: Scaffold(
backgroundColor: Colors.transparent,
appBar: AppBar(
title: Text(widget.title),
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Colors.deepPurple, Colors.deepPurpleAccent],
),
),
),
),
body: Center(
child: screens[_selectedIndex],
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
label: "Targets", icon: Icon(Icons.track_changes)),
BottomNavigationBarItem(label: "Home", icon: Icon(Icons.home)),
BottomNavigationBarItem(
label: "Profile", icon: Icon(Icons.person))
],
currentIndex: _selectedIndex,
onTap: _onItemTapped,
),
),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Colors.deepPurple, Colors.deepPurpleAccent],
),
));
}
}
+27
View File
@@ -0,0 +1,27 @@
import 'dart:math';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
final _localNotificationsPlugin = FlutterLocalNotificationsPlugin();
final r = Random(4);
Future<void> setup() async {
const androidSetting = AndroidInitializationSettings('@mipmap/ic_launcher');
const initSettings = InitializationSettings(android: androidSetting);
await _localNotificationsPlugin.initialize(initSettings).then((value) => {});
}
Future<void> addNotification(title, body) async {
const androidDetail =
AndroidNotificationDetails("0", "Notifications", groupKey: "Key");
final id = r.nextInt(100000);
final noticeDetail = const NotificationDetails(android: androidDetail);
await _localNotificationsPlugin.show(
id,
title,
body,
noticeDetail,
);
}
@@ -5,6 +5,8 @@
import FlutterMacOS
import Foundation
import flutter_local_notifications
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin"))
}
+106
View File
@@ -1,6 +1,13 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "2.3.1"
async:
dependency: transitive
description:
@@ -43,6 +50,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
dbus:
dependency: transitive
description:
name: dbus
url: "https://pub.dartlang.org"
source: hosted
version: "0.7.8"
fake_async:
dependency: transitive
description:
@@ -50,6 +64,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.4"
flutter:
dependency: "direct main"
description: flutter
@@ -62,6 +90,27 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.1"
flutter_local_notifications:
dependency: "direct main"
description:
name: flutter_local_notifications
url: "https://pub.dartlang.org"
source: hosted
version: "12.0.3+1"
flutter_local_notifications_linux:
dependency: transitive
description:
name: flutter_local_notifications_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
flutter_local_notifications_platform_interface:
dependency: transitive
description:
name: flutter_local_notifications_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.0"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -102,6 +151,41 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.2"
percent_indicator:
dependency: "direct main"
description:
name: percent_indicator
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.2"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "5.1.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.4"
sky_engine:
dependency: transitive
description: flutter
@@ -156,6 +240,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.12"
timezone:
dependency: transitive
description:
name: timezone
url: "https://pub.dartlang.org"
source: hosted
version: "0.9.0"
vector_math:
dependency: transitive
description:
@@ -163,5 +254,20 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+2"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.0"
sdks:
dart: ">=2.18.4 <3.0.0"
flutter: ">=2.12.0"
+5 -1
View File
@@ -21,6 +21,7 @@ version: 1.0.0+1
environment:
sdk: '>=2.18.4 <3.0.0'
# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
@@ -37,6 +38,8 @@ 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
flutter_local_notifications: ^12.0.3+1
percent_indicator: ^4.2.2
dev_dependencies:
flutter_test:
@@ -54,7 +57,8 @@ dev_dependencies:
# The following section is specific to Flutter packages.
flutter:
assets:
- blank-profile.jpg
# 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.