diff --git a/student/assets/images/Ac8_function2.svg b/Dashboard/assets/images/Ac7_function1.svg
similarity index 94%
copy from student/assets/images/Ac8_function2.svg
copy to Dashboard/assets/images/Ac7_function1.svg
index 565e084..6e15a67 100644
--- a/student/assets/images/Ac8_function2.svg
+++ b/Dashboard/assets/images/Ac7_function1.svg
@@ -1,205 +1,205 @@
diff --git a/Dashboard/assets/images/Ac7_function2.svg b/Dashboard/assets/images/Ac7_function2.svg
new file mode 100644
index 0000000..8ff326b
--- /dev/null
+++ b/Dashboard/assets/images/Ac7_function2.svg
@@ -0,0 +1,99 @@
+
+
diff --git a/student/assets/images/Ac8_function2.svg b/Dashboard/assets/images/Ac7_function3.svg
similarity index 75%
copy from student/assets/images/Ac8_function2.svg
copy to Dashboard/assets/images/Ac7_function3.svg
index 565e084..b3475da 100644
--- a/student/assets/images/Ac8_function2.svg
+++ b/Dashboard/assets/images/Ac7_function3.svg
@@ -1,205 +1,205 @@
diff --git a/student/assets/images/Ac8_function2.svg b/Dashboard/assets/images/Ac8_function1.svg
similarity index 74%
copy from student/assets/images/Ac8_function2.svg
copy to Dashboard/assets/images/Ac8_function1.svg
index 565e084..c973d43 100644
--- a/student/assets/images/Ac8_function2.svg
+++ b/Dashboard/assets/images/Ac8_function1.svg
@@ -1,205 +1,205 @@
diff --git a/student/assets/images/Ac8_function2.svg b/Dashboard/assets/images/Ac8_function2.svg
similarity index 100%
copy from student/assets/images/Ac8_function2.svg
copy to Dashboard/assets/images/Ac8_function2.svg
diff --git a/student/assets/images/Ac8_function2.svg b/Dashboard/assets/images/Ac8_function3.svg
similarity index 96%
copy from student/assets/images/Ac8_function2.svg
copy to Dashboard/assets/images/Ac8_function3.svg
index 565e084..642b6ac 100644
--- a/student/assets/images/Ac8_function2.svg
+++ b/Dashboard/assets/images/Ac8_function3.svg
@@ -1,205 +1,205 @@
diff --git a/student/assets/images/Grid.svg b/Dashboard/assets/images/Grid.svg
similarity index 94%
copy from student/assets/images/Grid.svg
copy to Dashboard/assets/images/Grid.svg
index 599bc5f..9a09b1e 100644
--- a/student/assets/images/Grid.svg
+++ b/Dashboard/assets/images/Grid.svg
@@ -1,1658 +1,1658 @@
diff --git a/Dashboard/lib/model/Class.dart b/Dashboard/lib/model/Class.dart
index 68484cb..92fc630 100644
--- a/Dashboard/lib/model/Class.dart
+++ b/Dashboard/lib/model/Class.dart
@@ -1,187 +1,194 @@
import 'package:firebase_database/firebase_database.dart';
import 'package:Teacher_Dashboard/model/Group.dart';
import 'package:flutter/widgets.dart';
import 'package:Teacher_Dashboard/model/Group.dart';
import 'package:Teacher_Dashboard/model/activities/activity.Dart';
import 'dart:async';
import 'dart:convert';
Classroom thisClass = new Classroom("1");
class Classroom extends ChangeNotifier {
int inactivity;
String sessionID = 'SPIA';
String teacherName;
int numGroups = 0;
List groups = new List();
List groupIDs = new List();
Classroom(this.sessionID);
final FirebaseDatabase _database = FirebaseDatabase.instance;
StreamSubscription _ongroupAddedSubscription;
StreamSubscription _ongroupChangedSubscription;
StreamSubscription _onattemptAddedSubscription;
StreamSubscription _oninactivityAddedSubscription;
StreamSubscription _onrobotpositionAddedSubscription;
void toAggregate() {}
void setupDatabse() {
_ongroupAddedSubscription = _database
.reference()
.child(thisClass.sessionID)
.child("groups")
.onChildAdded
.listen(onGroupAdded);
_ongroupChangedSubscription = _database
.reference()
.child(thisClass.sessionID)
.child("groups")
.onChildChanged
.listen(onGroupChanged);
_onattemptAddedSubscription = _database
.reference()
.child(thisClass.sessionID)
.child("attempts")
.onChildAdded
.listen(onAttemptAdded);
_oninactivityAddedSubscription = _database
.reference()
.child(thisClass.sessionID)
.child("celluloPosition")
.onChildAdded
.listen(oncelluloPositionAdded);
//Query _todoQuery;
}
onGroupAdded(Event event) {
Group newgroup = new Group(event.snapshot.value['id']);
newgroup.member1name = event.snapshot.value['member1name'];
newgroup.member2name = event.snapshot.value['member2name'];
newgroup.member3name = event.snapshot.value['member3name'];
thisClass.groups.add(newgroup);
thisClass.groupIDs.add(event.snapshot.value['id']);
notifyListeners();
}
onGroupChanged(Event event) {
//thisClass.groups.add(Group.fromSnapshot(event.snapshot));
int currentGroup = thisClass.groupIDs.indexOf(event.snapshot.key);
// print("group" + currentGroup.toString().toString());
thisClass.groups[currentGroup].currentActivity =
(event.snapshot.value)['currentActivity'].toString();
thisClass.groups[currentGroup].tabletStatus =
(event.snapshot.value)['tabletStatus'].toString();
// setState(() {});
notifyListeners();
//print(thisClass.groups[currentGroup].currentActivity.toString());
}
onAttemptAdded(Event event) {
// print(jsonDecode(event.snapshot.value)['acID'].toString());
int currentGroup =
thisClass.groupIDs.indexOf(jsonDecode(event.snapshot.value)['groupID']);
int currentActivity =
acList.indexOf(jsonDecode(event.snapshot.value)['acID'].toString());
+ thisClass.groups[currentGroup].currentActivity = acList[currentActivity];
int currentTurn = (jsonDecode(event.snapshot.value)['currentTurn']);
thisClass
.groups[currentGroup]
.activities[currentActivity]
.turns[currentTurn - 1]
.numAttempts = jsonDecode(event.snapshot.value)['numAttempts'];
thisClass.groups[currentGroup].activities[currentActivity].elapsedTime =
jsonDecode(event.snapshot.value)['elpasedTime'];
thisClass
.groups[currentGroup]
.activities[currentActivity]
.turns[currentTurn - 1]
.elapsedTime = jsonDecode(event.snapshot.value)['elpasedTime'];
- print(jsonDecode(event.snapshot.value)['elpasedTime']);
+ //print(jsonDecode(event.snapshot.value)['elpasedTime']);
var progressmsg = jsonDecode((event.snapshot.value))['progress'];
thisClass.groups[currentGroup].activities[currentActivity].progress[0] =
progressmsg['turn1'];
thisClass.groups[currentGroup].activities[currentActivity].progress[1] =
progressmsg['turn2'];
thisClass.groups[currentGroup].activities[currentActivity].progress[2] =
progressmsg['turn3'];
var mistakemsg = jsonDecode(event.snapshot.value)['mistakes'];
var mistakemsgturn1 = (mistakemsg['turn1']);
var mistakemsgturn2 = (mistakemsg['turn2']);
var mistakemsgturn3 = (mistakemsg['turn3']);
thisClass.groups[currentGroup].activities[currentActivity].mistakes['slope']
[0] = mistakemsgturn1['slope'];
thisClass.groups[currentGroup].activities[currentActivity]
.mistakes['initialPoint'][0] = mistakemsgturn1['initialPoint'];
thisClass.groups[currentGroup].activities[currentActivity].mistakes['slope']
[1] = mistakemsgturn2['slope'];
thisClass.groups[currentGroup].activities[currentActivity]
.mistakes['initialPoint'][1] = mistakemsgturn2['initialPoint'];
thisClass.groups[currentGroup].activities[currentActivity].mistakes['slope']
[2] = mistakemsgturn3['slope'];
thisClass.groups[currentGroup].activities[currentActivity]
.mistakes['initialPoint'][2] = mistakemsgturn3['initialPoint'];
thisClass.groups[currentGroup].activities[currentActivity].turns[0]
.mistakes['slope'] = mistakemsgturn1['slope'];
thisClass.groups[currentGroup].activities[currentActivity].turns[0]
.mistakes['initialPoint'] = mistakemsgturn1['initialPoint'];
+ thisClass.groups[currentGroup].activities[currentActivity].turns[0]
+ .mistakes['intercept'] = mistakemsgturn1['intercept'];
thisClass.groups[currentGroup].activities[currentActivity].turns[1]
.mistakes['slope'] = mistakemsgturn2['slope'];
thisClass.groups[currentGroup].activities[currentActivity].turns[1]
.mistakes['initialPoint'] = mistakemsgturn2['initialPoint'];
+ thisClass.groups[currentGroup].activities[currentActivity].turns[1]
+ .mistakes['intercept'] = mistakemsgturn2['intercept'];
thisClass.groups[currentGroup].activities[currentActivity].turns[2]
.mistakes['slope'] = mistakemsgturn3['slope'];
thisClass.groups[currentGroup].activities[currentActivity].turns[2]
.mistakes['initialPoint'] = mistakemsgturn3['initialPoint'];
+ thisClass.groups[currentGroup].activities[currentActivity].turns[2]
+ .mistakes['intercept'] = mistakemsgturn3['intercept'];
notifyListeners();
}
onInactivityAdded(Event event) {
// print(jsonDecode(event.snapshot.value)['acID'].toString());
- int currentGroup =
- thisClass.groupIDs.indexOf(jsonDecode(event.snapshot.value)['groupID']);
+ // int currentGroup =
+ // thisClass.groupIDs.indexOf(jsonDecode(event.snapshot.value)['groupID']);
// int currentActivity =
// acList.indexOf(jsonDecode(event.snapshot.value)['acID'].toString());
//thisClass.groups[currentGroup].inactivity[currentstepActivation] =
// (jsonDecode(event.snapshot.value)['inactivity']);
//print(thisClass.groups[currentGroup].inactivity);
//currentstepActivation = currentstepActivation + 1;
notifyListeners();
}
oncelluloPositionAdded(Event event) {
int currentGroup =
thisClass.groupIDs.indexOf(jsonDecode(event.snapshot.value)['groupID']);
int currentActivity =
acList.indexOf(jsonDecode(event.snapshot.value)['acID'].toString());
int currentTurn = 0;
- print(currentGroup.toString());
+ // print(currentGroup.toString());
if (jsonDecode(event.snapshot.value)['turn'].toString() == '1')
currentTurn = 1;
if (jsonDecode(event.snapshot.value)['turn'].toString() == '2')
currentTurn = 2;
if (jsonDecode(event.snapshot.value)['turn'].toString() == '3')
currentTurn = 3;
// print(currentTurn);
// int currentActivity =
// acList.indexOf(jsonDecode(event.snapshot.value)['acID'].toString());
// print((jsonDecode(event.snapshot.value)['x']));
thisClass.groups[currentGroup].activities[currentActivity]
.turns[currentTurn - 1].cellulox.x
.add((jsonDecode(event.snapshot.value)['x'] * 90 / 860));
// print((jsonDecode(event.snapshot.value)['y']));
thisClass.groups[currentGroup].activities[currentActivity]
.turns[currentTurn - 1].celluloy.y
.add((jsonDecode(event.snapshot.value)['y'] * 90 / 860));
// thisClass.groups[currentGroup].celluloy.y
// .add((jsonDecode(event.snapshot.value)['y'] / 40))
// setState(() {});
notifyListeners();
}
}
diff --git a/Dashboard/lib/model/Group.dart b/Dashboard/lib/model/Group.dart
index 48c557b..308d103 100644
--- a/Dashboard/lib/model/Group.dart
+++ b/Dashboard/lib/model/Group.dart
@@ -1,56 +1,56 @@
import 'package:Teacher_Dashboard/model/cellulo.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/rendering.dart';
import 'package:Teacher_Dashboard/model/activities/activity.Dart';
Group group = new Group("1");
class Group {
String id = "1";
var skills = {
"slope": [0, 0, 0],
"initialPoint": [0, 0, 0],
};
// String _title;
// String _description;
int curinactivity;
Cellulo cellulox = new Cellulo();
Cellulo celluloy = new Cellulo();
List inactivity = new List.generate(50, (index) => -1);
String member1name = '';
String member2name = '';
String member3name = '';
String robot1code;
String robot2code;
String tabletStatus;
String robotStatus;
bool ispaused;
bool canChangeActivity = false;
int numAttempts;
List progress = [-2, -2, -2];
- String currentActivity = '';
+ String currentActivity = 'Ac7';
List activities = [new Activity("Ac7"), new Activity("Ac8")];
Group(this.id);
toJson() {
return {
"userId": member1name,
"subject": member1name,
"completed": member1name,
};
}
Group.fromSnapshot(DataSnapshot snapshot) {
// _id = snapshot.key;
member1name = snapshot.value['member1name'];
member2name = snapshot.value['member2name'];
member3name = snapshot.value['member3name'];
id = snapshot.value['id'];
// numCurrentActivity = snapshot.value['numCurrentActivity'];
numAttempts = snapshot.value['numAttempts'];
// member3name = snapshot.value['inactivity'];
}
}
diff --git a/Dashboard/lib/screens/Debriefing.dart b/Dashboard/lib/screens/Debriefing.dart
index b52e899..eba6fc9 100644
--- a/Dashboard/lib/screens/Debriefing.dart
+++ b/Dashboard/lib/screens/Debriefing.dart
@@ -1,337 +1,359 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:Teacher_Dashboard/widgets/custom_app_bar.dart';
import 'dart:convert';
import 'package:Teacher_Dashboard/config/palette.dart';
import 'package:Teacher_Dashboard/config/styles.dart';
import 'dart:async';
import './screens.dart';
import 'package:Teacher_Dashboard/model/Class.dart';
import 'package:Teacher_Dashboard/model/Group.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:Teacher_Dashboard/model/activities/activity.Dart';
import 'package:step_progress_indicator/step_progress_indicator.dart';
import 'package:Teacher_Dashboard/widgets/hexagonPainter.Dart';
import 'package:Teacher_Dashboard/widgets/celluloMap.Dart';
import 'package:provider/provider.dart';
//import 'package:Teacher_Dashboard/model/core/models/productModel.dart';
//import 'package:Teacher_Dashboard/model/core/viewmodels/CRUDModel.dart';
//import 'package:provider/provider.dart';
class Debriefing extends StatefulWidget {
@override
DebriefingState createState() => DebriefingState();
}
class DebriefingState extends State {
bool mistakesSwitch = false;
bool rankingSwitch = false;
bool robotPatternSwitch = false;
int numofgroups = thisClass.groups.length;
+
int currentstepActivation = 0;
String pauseButtonText = 'Pause All';
+
final FirebaseDatabase _database = FirebaseDatabase.instance;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
// final productProvider = Provider.of(context);
return Scaffold(
backgroundColor: Colors.white,
appBar: CustomAppBar(),
body: Column(children: [
SizedBox(
height: 720,
child: Consumer(
builder: (context, model, child) => Container(
child: ListView.builder(
itemCount: thisClass.groups.length,
itemBuilder: (context, int position) {
return Card(
child: ListTile(
onLongPress: () {
+ print(thisClass
+ .groups[position]
+ .activities[acList.indexOf(
+ thisClass.groups[position].currentActivity)]
+ .progress
+ .toString());
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
GroupDashboard(currentgroupID: position)));
},
title: Column(children: [
Row(children: [
Container(
width: 100,
height: 100,
child: Stack(children: [
CustomPaint(
painter: HexagonPainter(
Offset(50, 50),
50,
thisClass.groups[position].tabletStatus ==
'YES'
? Colors.green
: Colors.red),
),
CustomPaint(
painter: HexagonPainter(
Offset(50, 50), 40, Colors.white),
),
Center(
child: Text(
thisClass.groups[position].id,
style: TextStyle(
fontWeight: FontWeight.bold, fontSize: 13),
)),
]),
),
SizedBox(width: 17),
Stack(children: [
CircularStepProgressIndicator(
totalSteps: 3,
// currentStep:
// thisClass.groups[position].activities[0].progress,
width: 100,
- customColor: (index) => thisClass.groups[position]
- .activities[0].progress[index] >
+ customColor: (index) => thisClass
+ .groups[position]
+ .activities[acList.indexOf(thisClass
+ .groups[position]
+ .currentActivity)]
+ .progress[index] >
-2
- ? (thisClass.groups[position].activities[0]
+ ? (thisClass
+ .groups[position]
+ .activities[acList.indexOf(
+ thisClass.groups[position]
+ .currentActivity)]
.progress[index] >
-1
? (thisClass
.groups[position]
- .activities[0]
+ .activities[acList.indexOf(thisClass.groups[position].currentActivity)]
.progress[index] >
0
? Colors.green
: Colors.blue)
: Colors.red)
: Colors.grey,
),
Positioned(
bottom: 45,
right: 18,
child: Text(
thisClass.groups[position].currentActivity,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 15),
)),
]),
SizedBox(width: 25),
minituare(position, 1, mistakesSwitch, rankingSwitch,
robotPatternSwitch),
SizedBox(
width: 25,
),
minituare(position, 2, mistakesSwitch, rankingSwitch,
robotPatternSwitch),
SizedBox(
width: 25,
),
minituare(position, 3, mistakesSwitch, rankingSwitch,
robotPatternSwitch),
]),
SizedBox(height: 20),
]),
trailing: Icon(Icons.more_vert),
));
},
)),
)),
Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'Show Students Mistakes',
style: TextStyle(
fontSize: 15.0,
// color: Colors.white,
fontWeight: FontWeight.bold),
),
SizedBox(width: 5),
Checkbox(
//title: const Text('Animate Slowly'),
value: mistakesSwitch,
onChanged: (bool value) {
setState(() {
mistakesSwitch = value;
});
},
// secondary: const Icon(Icons.hourglass_empty),
),
SizedBox(width: 300),
Text(
'Show Students robot pattern',
style: TextStyle(
fontSize: 15.0,
// color: Colors.white,
fontWeight: FontWeight.bold),
),
SizedBox(width: 5),
Checkbox(
value: robotPatternSwitch,
onChanged: (bool value) {
setState(() {
robotPatternSwitch = value;
});
},
// secondary: const Icon(Icons.hourglass_empty),
),
]),
Row(
// mainAxisSize: MainAxisSize.min,
children: [
Expanded(
child: MaterialButton(
color: Colors.red,
elevation: 0,
onPressed: () {
setState(() {
if (pauseButtonText == 'Pause All')
pauseButtonText = 'Resume All';
else
pauseButtonText = 'Pause All';
});
for (int groupID = 0;
groupID < thisClass.groups.length;
groupID++) {
if (pauseButtonText == 'Pause All')
_database
.reference()
.child(thisClass.sessionID)
.child('groups')
.child(thisClass.groupIDs[groupID])
.child('isPaused')
.set(false);
if (pauseButtonText == 'Resume All')
_database
.reference()
.child(thisClass.sessionID)
.child('groups')
.child(thisClass.groupIDs[groupID])
.child('isPaused')
.set(true);
}
},
child: Container(
padding: EdgeInsets.all(15.0),
child: Text(
pauseButtonText,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
color: Colors.white,
fontWeight: FontWeight.w500),
),
),
),
),
Expanded(
child: MaterialButton(
color: Colors.blue,
elevation: 0,
onPressed: () {
for (int groupID = 0;
groupID < thisClass.groups.length;
groupID++) {
_database
.reference()
.child(thisClass.sessionID)
.child('groups')
.child(thisClass.groupIDs[groupID])
.child('currentActivity')
.set('Ac8');
}
},
child: Container(
padding: EdgeInsets.all(15.0),
child: Text(
"Next Activity",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
color: Colors.white,
fontWeight: FontWeight.w500),
),
),
),
),
],
),
]));
}
}
Widget minituare(int position, int turn, bool mistakesSwitch,
bool rankingSwitch, bool robotpatternSwitch) {
var colors = [Colors.grey, Colors.red, Colors.blue, Colors.green];
+ List gridAcsPath = [
+ 'assets/images/GridOnlyPositive.svg',
+ 'assets/images/Grid.svg'
+ ];
return Container(
width: 130,
height: 180,
decoration: BoxDecoration(
border: Border.all(
width: 0.5,
color: colors[
thisClass.groups[position].activities[0].progress[turn - 1] +
2])),
child: Stack(children: [
Positioned(
bottom: 65,
right: 30,
width: 90,
height: 90,
child: celluloMap(
+ gridAcsPath[
+ acList.indexOf(thisClass.groups[position].currentActivity)],
turn,
robotpatternSwitch,
thisClass
.groups[position].activities[0].turns[turn - 1].cellulox.x,
thisClass.groups[position].activities[0].turns[turn - 1]
.celluloy.y)),
Positioned(
bottom: 155,
right: 27,
child: Text(
((turn > 1) ? ((turn > 2) ? 'Third ' : 'Second ') : 'First ') +
"Turn ",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 14),
)),
Positioned(bottom: 4, right: 50, child: Text(rankingSwitch ? "" : "")),
Positioned(
bottom: 25,
right: 6,
child: Text(
mistakesSwitch
? (thisClass.groups[position].activities[0].progress[turn - 1] > -2
? (thisClass.groups[position].activities[0].mistakes['slope'][turn - 1] == 0 &&
thisClass.groups[position].activities[0].mistakes['initialPoint'][turn - 1] ==
0
? 'No Mistakes'
: (thisClass.groups[position].activities[0].mistakes['slope'][turn - 1] > 0 &&
thisClass.groups[position].activities[0]
.mistakes['initialPoint'][turn - 1] >
0
? 'Mistakes in finding\n Slope and\n Initial Points'
: (thisClass.groups[position].activities[0].mistakes['slope'][turn - 1] > 0 &&
thisClass.groups[position].activities[0]
.mistakes['initialPoint'][turn - 1] ==
0
? 'Mistakes in finding\n slope'
: 'Mistakes in finding\n initial points')))
: '')
: '',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 14),
),
)
]));
}
diff --git a/Dashboard/lib/screens/groupDashboard.Dart b/Dashboard/lib/screens/groupDashboard.Dart
index 7d28f20..764cced 100644
--- a/Dashboard/lib/screens/groupDashboard.Dart
+++ b/Dashboard/lib/screens/groupDashboard.Dart
@@ -1,551 +1,574 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:Teacher_Dashboard/widgets/custom_app_bar.dart';
import 'package:Teacher_Dashboard/widgets/celluloMap.Dart';
import 'dart:convert';
import 'package:Teacher_Dashboard/config/palette.dart';
import 'dart:async';
import 'package:Teacher_Dashboard/model/Class.dart';
import 'package:Teacher_Dashboard/model/Group.dart';
import 'package:Teacher_Dashboard/model/activities/activity.Dart';
import 'package:Teacher_Dashboard/config/palette.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:step_progress_indicator/step_progress_indicator.dart';
//import 'package:Teacher_Dashboard/model/core/models/productModel.dart';
//import 'package:Teacher_Dashboard/model/core/viewmodels/CRUDModel.dart';
import 'package:provider/provider.dart';
class GroupDashboard extends StatefulWidget {
final int currentgroupID;
GroupDashboard({Key key, this.currentgroupID}) : super(key: key);
@override
GroupDashboardState createState() => GroupDashboardState();
}
class GroupDashboardState extends State {
final TextStyle whiteText = TextStyle(color: Colors.white, fontSize: 20);
Timer timer;
final FirebaseDatabase _database = FirebaseDatabase.instance;
var progress;
int groupID = 0;
int studentListIndex = 0;
int activityID = 0;
int activityListIndex = 0;
int turnID = 0;
+ List gridAcsPath = [
+ "assets/images/GridOnlyPositive.svg",
+ "assets/images/Grid.svg",
+ ];
double _currentSliderValue = 0;
String pauseButtonText = 'Pause';
@override
void initState() {
super.initState();
if (widget.currentgroupID != null) groupID = widget.currentgroupID;
}
//@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: CustomAppBar(),
body: SingleChildScrollView(
// padding: const EdgeInsets.all(10.0),
child: Consumer(
builder: (context, model, child) => Row(children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: 200,
decoration: BoxDecoration(
color: Palette.primaryColor,
border: Border.all(color: Colors.purple),
// borderRadius: new BorderRadius.circular(25.0),
),
child: Text(
'Groups',
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18),
)),
Container(
height: 480,
width: 200,
// margin: const EdgeInsets.all(15.0),
// padding: const EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: Palette.primaryColor,
border: Border.all(color: Colors.purple),
// borderRadius: new BorderRadius.circular(25.0),
),
child: ListView.builder(
itemCount: thisClass.groups.length,
itemBuilder: (context, int position) {
return ListTile(
leading: Icon(
Icons.person,
color: Colors.white,
),
onTap: () {
setState(() {
studentListIndex = position;
groupID = position;
});
},
title: Text(
thisClass.groups[position].id,
style: TextStyle(
color: (studentListIndex == position)
? Colors.blue
: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18),
),
);
})),
Container(
width: 200,
decoration: BoxDecoration(
color: Palette.primaryColor,
border: Border.all(color: Colors.purple),
// borderRadius: new BorderRadius.circular(25.0),
),
child: Text(
'Activities',
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18),
)),
Container(
height: 350,
width: 200,
// margin: const EdgeInsets.all(15.0),
// padding: const EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: Palette.primaryColor,
border: Border.all(color: Colors.purple),
// borderRadius: new BorderRadius.circular(25.0),
),
child: ListView.builder(
itemCount: acList.length,
itemBuilder: (context, int position) {
return ListTile(
leading: Icon(
Icons.description,
color: Colors.white,
),
onTap: () {
setState(() {
activityListIndex = position;
activityID = position;
});
},
title: Text(
acList[position],
style: TextStyle(
color: (activityListIndex == position)
? Colors.blue
: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18),
),
);
}))
]),
SizedBox(width: 20),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 1,
),
Row(
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Stack(children: [
CircularStepProgressIndicator(
totalSteps: 3,
// currentStep:
// thisClass.groups[position].activities[0].progress,
width: 100,
customColor: (index) => thisClass
.groups[groupID]
.activities[activityID]
.progress[index] >
-2
? (thisClass
.groups[groupID]
.activities[activityID]
.progress[index] >
-1
? (thisClass
.groups[groupID]
.activities[activityID]
.progress[index] >
0
? Colors.green
: Colors.blue)
: Colors.red)
: Colors.grey,
),
Positioned(
bottom: 45,
right: 18,
child: Text(
'',
style: TextStyle(
fontWeight: FontWeight.bold, fontSize: 15),
)),
]),
SizedBox(width: 10),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Icon(Icons.group),
Text(
' ' + thisClass.groups[groupID].id,
style: TextStyle(
fontSize: 30.0,
color: Colors.black,
fontWeight: FontWeight.w500),
),
],
),
SizedBox(height: 25),
Row(
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(children: [
Icon(Icons.person),
Text(
thisClass.groups[groupID].member1name,
style: TextStyle(
fontSize: 20.0,
color: Colors.black,
fontWeight: FontWeight.w500),
),
]),
SizedBox(width: 20),
Row(children: [
Icon(Icons.person),
Text(
thisClass.groups[groupID].member2name,
style: TextStyle(
fontSize: 20.0,
color: Colors.black,
fontWeight: FontWeight.w500),
),
]),
SizedBox(width: 20),
Row(children: [
Icon(Icons.person),
Text(
thisClass.groups[groupID].member3name,
style: TextStyle(
fontSize: 20.0,
color: Colors.black,
fontWeight: FontWeight.w500),
),
])
]),
]),
]),
SizedBox(
height: 20,
),
Container(
width: 500,
child: StepProgressIndicator(
totalSteps: 50,
// currentStep: thisClass.groups[position].inactivity.length,
size: 10,
padding: 0,
customColor: (index) => Palette.primaryColor)),
SizedBox(
height: 20,
),
Row(
// mainAxisSize: MainAxisSize.min,
children: [
infoTile(
thisClass.groups[groupID].activities[activityID]
.turns[turnID].numAttempts
.toString(),
'Attempts',
Colors.blue),
infoTileTime(
'Performed in',
thisClass.groups[groupID].activities[activityID]
.turns[turnID].elapsedTime,
Colors.blue),
]),
Row(
// mainAxisSize: MainAxisSize.min,
children: [
Column(
// mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 400,
height: 400,
child: celluloMap(
+ gridAcsPath[activityID],
turnID + 1,
true,
- thisClass.groups[groupID].activities[0]
- .turns[turnID].cellulox.x,
- thisClass.groups[groupID].activities[0]
- .turns[turnID].celluloy.y)),
+ thisClass
+ .groups[groupID]
+ .activities[activityID]
+ .turns[turnID]
+ .cellulox
+ .x,
+ thisClass
+ .groups[groupID]
+ .activities[activityID]
+ .turns[turnID]
+ .celluloy
+ .y)),
Text(
((turnID + 1 > 1)
? ((turnID + 1 > 2)
? 'Third '
: 'Second ')
: 'First ') +
"Turn ",
style: TextStyle(
fontWeight: FontWeight.bold, fontSize: 20),
),
Slider(
activeColor: Colors.purple,
value: _currentSliderValue,
min: 0,
max: 200,
// divisions: 5,
// label: _currentSliderValue.round().toString(),
onChanged: (double value) {
setState(() {
_currentSliderValue = value;
});
}),
]),
Column(
// mainAxisSize: MainAxisSize.min,
children: [
infoTile(
thisClass
.groups[groupID]
.activities[activityID]
.turns[turnID]
.mistakes['slope']
.toString(),
'Mistakes in finding slope',
Colors.blue),
- infoTile(
- thisClass
- .groups[groupID]
- .activities[activityID]
- .turns[turnID]
- .mistakes['initialPoint']
- .toString(),
- 'Mistakes in finding initial Point',
- Colors.blue),
+ (activityID == 0)
+ ? infoTile(
+ thisClass
+ .groups[groupID]
+ .activities[activityID]
+ .turns[turnID]
+ .mistakes['initialPoint']
+ .toString(),
+ 'Mistakes in finding initial Point',
+ Colors.blue)
+ : infoTile(
+ thisClass
+ .groups[groupID]
+ .activities[activityID]
+ .turns[turnID]
+ .mistakes['intercept']
+ .toString(),
+ 'Mistakes in finding intercept',
+ Colors.blue),
])
]),
Row(
// mainAxisSize: MainAxisSize.min,
children: [
SizedBox(width: 140),
FloatingActionButton(
heroTag: "prevButton",
tooltip: 'Previous Turn',
onPressed: () {
if (turnID > 0) {
print(thisClass
.groups[groupID]
.activities[activityID]
.turns[turnID]
.elapsedTime
.toString());
setState(() {
turnID = turnID - 1;
});
}
},
child: Icon(Icons.skip_previous),
backgroundColor: Palette.primaryColor,
),
SizedBox(width: 10),
FloatingActionButton(
heroTag: "nextButtton",
tooltip: 'Next Turn',
onPressed: () {
if (turnID < 2)
setState(() {
turnID = turnID + 1;
});
},
child: Icon(Icons.skip_next),
backgroundColor: Palette.primaryColor,
),
]),
SizedBox(height: 10),
Row(
// mainAxisSize: MainAxisSize.min,
children: [
SizedBox(width: 125),
Container(
width: 200,
child: MaterialButton(
color: Colors.red,
elevation: 0,
onPressed: () {
if (pauseButtonText == 'Pause') {
pauseButtonText = 'Resume';
} else {
pauseButtonText = 'Pause';
// dbRef.child("1").child("isPaused").set(true);
}
if (pauseButtonText == 'Pause')
_database
.reference()
.child(thisClass.sessionID)
.child('groups')
.child(thisClass.groupIDs[groupID])
.child('isPaused')
.set(false);
if (pauseButtonText == 'Resume')
_database
.reference()
.child(thisClass.sessionID)
.child('groups')
.child(thisClass.groupIDs[groupID])
.child('isPaused')
.set(true);
},
child: Container(
padding: EdgeInsets.all(15.0),
child: Text(
pauseButtonText,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
color: Colors.white,
fontWeight: FontWeight.w500),
),
),
),
),
SizedBox(width: 20),
Container(
width: 200,
child: MaterialButton(
color: Colors.blue,
elevation: 0,
onPressed: () {
_database
.reference()
.child(thisClass.sessionID)
.child('groups')
.child(thisClass.groupIDs[groupID])
.child('currentActivity')
.set('Ac8');
},
child: Container(
padding: EdgeInsets.all(15.0),
child: Text(
"Next Activity",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
color: Colors.white,
fontWeight: FontWeight.w500),
),
),
),
),
],
)
],
),
]),
// _progressBar(),
),
));
}
Container infoTile(String title, String count, MaterialColor color) {
return Container(
width: 120,
// margin: const EdgeInsets.all(8.0),
padding: const EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular(10.0),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: const TextStyle(
color: Colors.white,
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
),
Text(
count,
style: const TextStyle(
color: Colors.white,
fontSize: 15.0,
fontWeight: FontWeight.w600,
),
),
],
),
);
}
Container infoTileTime(String title, int count, MaterialColor color) {
return Container(
width: 220,
// margin: const EdgeInsets.all(8.0),
padding: const EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: color,
// borderRadius: BorderRadius.circular(10.0),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: const TextStyle(
color: Colors.white,
fontSize: 15.0,
fontWeight: FontWeight.bold,
),
),
Text(
((count > 60000)
? ((count / 60000).round().toString() + ' miutes')
: '') +
' ' +
((count % 60000) / 1000).round().toString() +
' Seconds',
style: const TextStyle(
color: Colors.white,
fontSize: 20.0,
fontWeight: FontWeight.w600,
),
),
],
),
);
}
}
diff --git a/Dashboard/lib/screens/home_screen.dart b/Dashboard/lib/screens/home_screen.dart
index 938e30a..2bb85de 100644
--- a/Dashboard/lib/screens/home_screen.dart
+++ b/Dashboard/lib/screens/home_screen.dart
@@ -1,416 +1,416 @@
import 'package:Teacher_Dashboard/model/Class.dart';
import 'package:flutter/material.dart';
import 'package:Teacher_Dashboard/model/activities/activity.Dart';
import 'package:Teacher_Dashboard/model/core/services/api.dart';
import 'package:Teacher_Dashboard/config/palette.dart';
import 'package:Teacher_Dashboard/config/styles.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:Teacher_Dashboard/widgets/widgets.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'dart:convert';
import 'package:provider/provider.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:flutter_svg/flutter_svg.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State
with SingleTickerProviderStateMixin {
var isallgroupsconnected = false;
Animation animation;
AnimationController _controller;
String numConnectedGroups = '0';
- String dropdownValue;
+ String startAcdropdownValue;
final FirebaseDatabase _database = FirebaseDatabase.instance;
// List products;
@override
void initState() {
super.initState();
}
Widget _title() {
return RichText(
textAlign: TextAlign.center,
text: TextSpan(
text: 'C',
style: GoogleFonts.portLligatSans(
textStyle: Theme.of(context).textTheme.display1,
fontSize: 30,
fontWeight: FontWeight.w700,
color: Colors.white,
),
children: [
TextSpan(
text: 'ell',
style: TextStyle(color: Colors.black, fontSize: 30),
),
TextSpan(
text: 'ulo',
style: TextStyle(color: Colors.white, fontSize: 30),
),
]),
);
}
@override
Widget build(BuildContext context) {
// final productProvider = Provider.of(context);
final screenHeight = MediaQuery.of(context).size.height;
TextEditingController controllerSessionID = TextEditingController();
return Scaffold(
appBar: CustomAppBar(),
body: CustomScrollView(
physics: ClampingScrollPhysics(),
slivers: [
_overalClass(screenHeight),
SliverToBoxAdapter(
child: Column(children: [
SizedBox(
height: 50,
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 32),
child: Material(
elevation: 2.0,
borderRadius: BorderRadius.all(Radius.circular(30)),
child: TextField(
controller: controllerSessionID,
onChanged: (String value) {},
cursorColor: Colors.deepOrange,
decoration: InputDecoration(
hintText: "Session ID",
prefixIcon: Material(
elevation: 0,
borderRadius: BorderRadius.all(Radius.circular(30)),
child: Icon(
Icons.lock,
color: Palette.primaryColor,
),
),
border: InputBorder.none,
contentPadding:
EdgeInsets.symmetric(horizontal: 25, vertical: 13)),
),
),
),
SizedBox(
height: 25,
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 32),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(100)),
color: Palette.primaryColor),
child: FlatButton(
child: Text(
"Join",
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w700,
fontSize: 18),
),
onPressed: () {
thisClass.sessionID = controllerSessionID.text;
thisClass.groups.clear();
// locator.registerLazySingleton(() => Api(Firestore.instance.collection('sessions').doc(controllerSessionID.text) thisClass.sessionID));
thisClass.setupDatabse();
},
),
)),
SizedBox(
height: 50,
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 32),
child: Container(
width: 500,
child: DropdownButton(
hint:
Text('Students start the session with activity: '),
- value: dropdownValue,
+ value: startAcdropdownValue,
icon: Icon(Icons.arrow_downward),
iconSize: 24,
elevation: 16,
style: TextStyle(color: Colors.deepPurple),
onChanged: (String newValue) {
setState(() {
- dropdownValue = newValue;
+ startAcdropdownValue = newValue;
});
},
items: acList
.map>((String value) {
return DropdownMenuItem(
value: value,
child: Text(value),
);
}).toList(),
))),
SizedBox(
height: 25,
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 32),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(100)),
color: Palette.primaryColor),
child: FlatButton(
child: Text(
"Start the session",
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w700,
fontSize: 18),
),
onPressed: () {
for (int i = 0; i < thisClass.groups.length; i++) {
_database
.reference()
.child(thisClass.sessionID)
.child('groups')
.child(thisClass.groupIDs[i])
.child('currentActivity')
- .set('Ac7');
+ .set(startAcdropdownValue);
}
},
),
)),
]),
),
// _controlClass(screenHeight),
// _recentAc(screenHeight),
// _alarms(screenHeight),
],
),
);
}
SliverToBoxAdapter _controlClass(double screenHeight) {
Color color1 = Color(0xffFC5CF0);
Color color2 = Color(0xffFE8852);
return SliverToBoxAdapter(
child: Container(
child: Stack(
children: [
Container(
padding:
const EdgeInsets.symmetric(vertical: 5.0, horizontal: 16.0),
margin: const EdgeInsets.only(
top: 30, left: 20.0, right: 20.0, bottom: 20.0),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [color1, color2],
),
borderRadius: BorderRadius.circular(30.0)),
child: Row(
children: [
Spacer(),
],
),
),
Center(
child: IconButton(
color: Colors.white,
icon: Icon(FontAwesomeIcons.pause),
onPressed: () {},
tooltip: "Pause the student",
)),
],
),
));
}
SliverToBoxAdapter _overalClass(double screenHeight) {
return SliverToBoxAdapter(
child: Container(
padding: const EdgeInsets.all(20.0),
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xFFAD9FE4), Palette.primaryColor],
),
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(40.0),
bottomRight: Radius.circular(40.0),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Center(child: Image.asset('assets/images/googleclass.png')),
const SizedBox(height: 20.0),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
children: [
Consumer(
builder: (context, model, child) => Text(
thisClass.groups.length.toString(),
style: const TextStyle(
color: Colors.white,
fontSize: 60.0,
fontWeight: FontWeight.w500,
),
textAlign: TextAlign.center,
)),
SizedBox(height: screenHeight * 0.015),
Row(
children: [
Icon(Icons.group, color: Colors.white),
Text(
" Connected Groups",
style: const TextStyle(
color: Colors.white,
fontSize: 16.0,
fontWeight: FontWeight.w500,
),
textAlign: TextAlign.center,
)
],
)
],
),
Column(
children: [
Text(
'0',
style: const TextStyle(
color: Colors.white,
fontSize: 60.0,
fontWeight: FontWeight.w500,
),
textAlign: TextAlign.center,
),
SizedBox(height: screenHeight * 0.015),
Row(
children: [
SvgPicture.asset("assets/images/celluloWhite.svg",
height: 30, width: 30),
Text(
" Connected Robots",
style: const TextStyle(
fontSize: 16.0,
color: Colors.white,
fontWeight: FontWeight.w500,
),
textAlign: TextAlign.center,
)
],
),
],
),
].toList(),
),
],
),
),
);
}
SliverToBoxAdapter _recentAc(double screenHeight) {
return SliverToBoxAdapter(
child: Container(
margin: const EdgeInsets.symmetric(
vertical: 10.0,
horizontal: 20.0,
),
padding: const EdgeInsets.all(10.0),
height: screenHeight * 0.15,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xFFAD9FE4), Palette.primaryColor],
),
borderRadius: BorderRadius.circular(20.0),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Image.asset('assets/images/cellulo.png'),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Do you want to see how many robots are working?',
style: const TextStyle(
color: Colors.white,
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: screenHeight * 0.03),
Text(
'Click on the button below',
style: const TextStyle(
color: Colors.white,
fontSize: 16.0,
),
maxLines: 2,
),
],
)
],
),
),
);
}
SliverToBoxAdapter _alarms(double screenHeight) {
return SliverToBoxAdapter(
child: Container(
margin: const EdgeInsets.symmetric(
vertical: 10.0,
horizontal: 20.0,
),
padding: const EdgeInsets.all(10.0),
height: screenHeight * 0.15,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xFFAD9FE4), Palette.primaryColor],
),
borderRadius: BorderRadius.circular(20.0),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Icon(
Icons.alarm,
color: Colors.red,
size: 94.0,
semanticLabel: 'Text to announce in accessibility modes',
),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'One group has problem with robot',
style: const TextStyle(
color: Colors.white,
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: screenHeight * 0.03),
Text(
'One group is not progressing..For details press here',
style: const TextStyle(
color: Colors.white,
fontSize: 16.0,
),
maxLines: 2,
),
],
)
],
),
),
);
}
}
diff --git a/Dashboard/lib/widgets/celluloMap.Dart b/Dashboard/lib/widgets/celluloMap.Dart
index ded98bc..19279a9 100644
--- a/Dashboard/lib/widgets/celluloMap.Dart
+++ b/Dashboard/lib/widgets/celluloMap.Dart
@@ -1,33 +1,34 @@
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:Teacher_Dashboard/widgets/linePainter.Dart';
Widget celluloMap(
+ String gridPath,
int turn,
bool robotpatternSwitch,
List celluloxPositiontopaint,
List celluloyPositiontopaint) {
var imagespath = [
'assets/images/function1.svg',
'assets/images/function2.svg',
'assets/images/function3.svg',
'assets/images/GridOnlyPositive.svg',
];
final double mapSizeWidth = 860;
final double mapSizeHeight = 860;
final double mapSizeScreenWidth = 90;
final double mapSizeScreenHeight = 90;
final double scaleWidth = mapSizeScreenWidth / mapSizeWidth;
final double scaleHeight = mapSizeScreenHeight / mapSizeHeight;
return Stack(children: [
SvgPicture.asset(imagespath[turn - 1]),
- SvgPicture.asset("assets/images/GridOnlyPositive.svg"),
+ SvgPicture.asset(gridPath),
robotpatternSwitch
? CustomPaint(
size: Size(mapSizeScreenWidth, mapSizeScreenHeight),
painter:
LinePainter2(celluloxPositiontopaint, celluloyPositiontopaint),
)
: Text(''),
]);
}
diff --git a/student/assets/images/Ac8_function2.svg b/student/assets/images/Ac8_function2.svg
index 565e084..1cc6ef9 100644
--- a/student/assets/images/Ac8_function2.svg
+++ b/student/assets/images/Ac8_function2.svg
@@ -1,205 +1,205 @@
diff --git a/student/assets/images/Grid.svg b/student/assets/images/Grid.svg
index 599bc5f..cbe84c1 100644
--- a/student/assets/images/Grid.svg
+++ b/student/assets/images/Grid.svg
@@ -1,1658 +1,1658 @@
diff --git a/student/lib/Activities/Ac7.Dart b/student/lib/Activities/Ac7.Dart
index 9eca692..976ddd3 100644
--- a/student/lib/Activities/Ac7.Dart
+++ b/student/lib/Activities/Ac7.Dart
@@ -1,794 +1,768 @@
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:student/widgets/onlineRobotMap.Dart';
import 'dart:async';
import 'dart:convert';
import 'package:student/Database.dart';
import 'package:student/model/Group.dart';
import 'package:student/model/Cellulo.dart';
import 'package:student/widgets/showAlertDialog.Dart';
import 'package:student/widgets/membersBar.Dart';
import 'package:student/widgets/inactivityDetector.Dart';
import 'package:flutter_appavailability/flutter_appavailability.dart';
class Ac7 extends StatefulWidget {
Ac7({Key key}) : super(key: key);
@override
_Ac7State createState() => _Ac7State();
}
class _Ac7State extends State
with SingleTickerProviderStateMixin, WidgetsBindingObserver {
+// Timers
+
Timer timerCelluloPosition;
Timer timerslopedetection;
Timer timercleartracking;
Timer timerprevCelluloPosition;
Timer timerInactivityDetector;
Timer timerprevCelluloPositiontoserver;
final acID = 7;
+
+ // UI parameters
bool celluloxSwitch1 = true;
bool celluloySwitch1 = false;
bool celluloxSwitch2 = true;
bool celluloySwitch2 = false;
var onStop = false;
bool mode = false;
int wrongcounts = 0;
double _progress = 0.0;
final celluloSize = 60;
final ScrollController _scrollController = ScrollController();
final functionFormulas = ['X ⟼ Y', 'X+1 ⟼ Y', 'X+2 ⟼ Y', '2*X ⟼ Y', '-X ⟼ Y'];
Offset beginpath = Offset(0, 0);
Offset endpath = Offset(10, 100);
AnimationController controller;
Animation animation;
TextEditingController controllerinitialX = TextEditingController();
TextEditingController controllerinitialY = TextEditingController();
TextEditingController controllerXslope = TextEditingController();
TextEditingController controllerYslope = TextEditingController();
var counterfunctionImage = 0;
var imagespath = [
'assets/images/Ac7_function1.svg',
'assets/images/Ac7_function2.svg',
'assets/images/Ac7_function3.svg',
'assets/images/GridOnlyPositive.svg',
];
var onTap = [false, false, false, false, false];
// var onTap=[false,false,false,false,false];
final double mapSizeWidth = 860;
final double mapSizeHeight = 860;
var currentTurn = 1;
var currentTap = 0;
var tapCounter = 0;
+// Learning
+
List progress = [0, -2, -2];
// zero: undergoing, -1: not accomplished, 1: accomplished
bool waitforanimation = false;
List mistakesSlope = [0, 0, 0];
List mistakesIntrepet = [0, 0, 0];
List mistakesInitialPosition = [0, 0, 0];
List progressElpasedTime = [0, 0, 0];
var inactivity = 0;
var prevcelluloxPositionSlope = 0.0;
var prevcelluloyPositionSlope = 0.0;
// robot related
var elapseTimer = new Stopwatch();
bool setRun = false;
var celluloxPosition = [0.0, 0.0];
var celluloyPosition = [0.0, 0.0];
List celluloxPositiontopaint = [0.0, 0.0];
List celluloyPositiontopaint = [0.0, 0.0];
var prevcelluloxPosition = [0.0, 0.0];
var prevcelluloyPosition = [0.0, 0.0];
var initialPositionCellulox = [0.0, 0.0];
var initialPositionCelluloy = [0.0, 0.0];
// screen-related
var originCoordinates = [303.08, 563.08];
var avgActivation = 0;
int prevtotalTaps = 0;
var correctAnswer = [
{"initialPointX": 0, "initialPointY": 0, "slope": 1},
{"initialPointX": 0, "initialPointY": 1, "slope": 1},
{"initialPointX": 0, "initialPointY": 0, "slope": 2}
];
Future getApps() async {
List