Commit 309435d3 authored by Sandunika Senavirathna's avatar Sandunika Senavirathna

Merge branch 'IT20639280' into 'master'

It20639280

See merge request !7
parents bdffde06 25e4d838
No preview for this file type
This diff is collapsed.
This diff is collapsed.
3.10.1
\ No newline at end of file
3.16.3
\ No newline at end of file
# This is a generated file; do not edit or check into version control.
cloud_firestore=/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/
cloud_firestore_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/cloud_firestore_web-3.8.10/
file_selector_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2+1/
file_selector_macos=/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+3/
file_selector_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+1/
firebase_auth=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/
firebase_auth_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_auth_web-5.8.12/
firebase_core=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/
firebase_core_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_core_web-2.10.0/
firebase_storage=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/
firebase_storage_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/firebase_storage_web-3.6.17/
flutter_plugin_android_lifecycle=/Users/avishkanew/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.17/
image_picker=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker-1.0.7/
image_picker_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_android-0.8.9+3/
image_picker_for_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_for_web-2.2.0/
image_picker_ios=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.9+1/
image_picker_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
image_picker_macos=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+1/
image_picker_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
package_info_plus=/Users/avishkanew/.pub-cache/hosted/pub.dev/package_info_plus-4.2.0/
path_provider=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider-2.1.2/
path_provider_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_android-2.2.2/
path_provider_foundation=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.2/
path_provider_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
path_provider_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1/
rive_common=/Users/avishkanew/.pub-cache/hosted/pub.dev/rive_common-0.2.7/
shared_preferences=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences-2.2.2/
shared_preferences_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_android-2.2.1/
shared_preferences_foundation=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.3.5/
shared_preferences_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2/
shared_preferences_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_web-2.2.1/
shared_preferences_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2/
sqflite=/Users/avishkanew/.pub-cache/hosted/pub.dev/sqflite-2.3.2/
url_launcher=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher-6.1.14/
url_launcher_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.0/
url_launcher_ios=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.4/
url_launcher_linux=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1/
url_launcher_macos=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0/
url_launcher_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_web-2.0.19/
url_launcher_windows=/Users/avishkanew/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1/
video_player=/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player-2.7.2/
video_player_android=/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_android-2.4.11/
video_player_avfoundation=/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.4.11/
video_player_web=/Users/avishkanew/.pub-cache/hosted/pub.dev/video_player_web-2.0.17/
wakelock_plus=/Users/avishkanew/.pub-cache/hosted/pub.dev/wakelock_plus-1.1.4/
cloud_firestore=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/cloud_firestore-4.13.6/
cloud_firestore_web=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/cloud_firestore_web-3.8.10/
file_selector_linux=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/file_selector_linux-0.9.2+1/
file_selector_macos=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/file_selector_macos-0.9.3+3/
file_selector_windows=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/file_selector_windows-0.9.3+1/
firebase_auth=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/firebase_auth-4.15.3/
firebase_auth_web=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/firebase_auth_web-5.8.12/
firebase_core=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/firebase_core-2.24.2/
firebase_core_web=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/firebase_core_web-2.10.0/
firebase_storage=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/firebase_storage-11.6.0/
firebase_storage_web=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/firebase_storage_web-3.6.17/
flutter_plugin_android_lifecycle=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/flutter_plugin_android_lifecycle-2.0.17/
image_picker=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/image_picker-1.0.7/
image_picker_android=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/image_picker_android-0.8.9+3/
image_picker_for_web=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/image_picker_for_web-2.2.0/
image_picker_ios=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/image_picker_ios-0.8.9+1/
image_picker_linux=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/image_picker_linux-0.2.1+1/
image_picker_macos=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/image_picker_macos-0.2.1+1/
image_picker_windows=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/image_picker_windows-0.2.1+1/
package_info_plus=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/package_info_plus-5.0.1/
path_provider=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/path_provider-2.1.2/
path_provider_android=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/path_provider_android-2.2.2/
path_provider_foundation=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/path_provider_foundation-2.3.2/
path_provider_linux=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
path_provider_windows=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/path_provider_windows-2.2.1/
rive_common=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/rive_common-0.2.7/
shared_preferences=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/shared_preferences-2.2.2/
shared_preferences_android=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/shared_preferences_android-2.2.1/
shared_preferences_foundation=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.3.5/
shared_preferences_linux=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.3.2/
shared_preferences_web=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/shared_preferences_web-2.2.2/
shared_preferences_windows=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/shared_preferences_windows-2.3.2/
sqflite=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/sqflite-2.3.2/
url_launcher=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/url_launcher-6.2.4/
url_launcher_android=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/url_launcher_android-6.3.0/
url_launcher_ios=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/url_launcher_ios-6.2.4/
url_launcher_linux=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/url_launcher_linux-3.1.1/
url_launcher_macos=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/url_launcher_macos-3.1.0/
url_launcher_web=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/url_launcher_web-2.2.3/
url_launcher_windows=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/url_launcher_windows-3.1.1/
video_player=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/video_player-2.8.2/
video_player_android=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/video_player_android-2.4.11/
video_player_avfoundation=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/video_player_avfoundation-2.5.6/
video_player_web=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/video_player_web-2.1.3/
wakelock_plus=/Users/udithaprabhasha/.pub-cache/hosted/pub.dev/wakelock_plus-1.1.4/
This diff is collapsed.
No preview for this file type
......@@ -216,7 +216,7 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
LastUpgradeCheck = 1300;
LastUpgradeCheck = 1430;
ORGANIZATIONNAME = "";
TargetAttributes = {
331C8080294A63A400263BE5 = {
......
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
LastUpgradeVersion = "1430"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
......
File added
// import 'package:flutter/material.dart';
// import 'package:cloud_firestore/cloud_firestore.dart';
// import 'package:cached_network_image/cached_network_image.dart';
// import 'package:video_player/video_player.dart';
// class UserActivitiesScreen extends StatelessWidget {
// final String userId;
// UserActivitiesScreen({required this.userId});
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: AppBar(
// title: Text('User Activities'),
// ),
// body: StreamBuilder<QuerySnapshot>(
// stream: FirebaseFirestore.instance
// .collection('activities')
// .where('user', isEqualTo: userId)
// .snapshots(),
// builder: (context, snapshot) {
// if (snapshot.connectionState == ConnectionState.waiting) {
// return CircularProgressIndicator(); // Loading indicator
// }
// if (snapshot.hasError) {
// return Text('Error: ${snapshot.error}'); // Error handling
// }
// if (snapshot.data == null || snapshot.data!.docs.isEmpty) {
// return Center(
// child: Text('No activities found for this user.'),
// ); // No activities found
// }
// return ListView(
// children: snapshot.data!.docs.map((document) {
// final videoUrl = document['videoUrl'];
// final imageUrl = document['imageUrl'];
// if (videoUrl != null) {
// return _buildVideoItem(videoUrl);
// } else if (imageUrl != null) {
// return _buildImageItem(imageUrl);
// } else {
// return SizedBox(); // Return an empty widget if neither video nor image URL is available
// }
// }).toList(),
// );
// },
// ),
// );
// }
// Widget _buildVideoItem(String videoUrl) {
// return ListTile(
// title: Text('Activity Video'),
// leading: FutureBuilder(
// future: VideoPlayerController.network(videoUrl).initialize(),
// builder: (context, snapshot) {
// if (snapshot.connectionState == ConnectionState.waiting) {
// return CircularProgressIndicator(); // Placeholder while video loads
// }
// if (snapshot.hasError) {
// return Text('Error: ${snapshot.error}');
// }
// if (snapshot.connectionState == ConnectionState.done) {
// try {
// final controller = VideoPlayerController.network(videoUrl);
// return AspectRatio(
// aspectRatio: controller.value.aspectRatio,
// child: VideoPlayer(controller),
// );
// } catch (e) {
// return Text('Error playing video: $e');
// }
// } else {
// return SizedBox(); // Return empty widget if still loading
// }
// },
// ),
// onTap: () {
// // Handle tap, e.g., navigate to a detail screen
// },
// );
// }
// Widget _buildImageItem(String imageUrl) {
// return ListTile(
// title: Text('Activity Image'),
// leading: CachedNetworkImage(
// imageUrl: imageUrl,
// placeholder: (context, url) =>
// CircularProgressIndicator(), // Placeholder while image loads
// errorWidget: (context, url, error) => Icon(Icons.error),
// ),
// onTap: () {
// // Handle tap, e.g., navigate to a detail screen
// },
// );
// }
// }
\ No newline at end of file
......@@ -190,28 +190,28 @@ class ChildrenActivity extends StatelessWidget {
),
),
),
GestureDetector(
onTap: () {
// GestureDetector(
// onTap: () {
// Navigator.of(context).push(MaterialPageRoute(
// builder: (_) => ReportKidsPage( classroom: ),
// ));
},
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Container(
width: 170,
height: 85,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
'lib/assets/ac6.png'),
fit: BoxFit
.cover,
)),
),
),
),
// },
// child: Padding(
// padding: const EdgeInsets.all(10.0),
// child: Container(
// width: 170,
// height: 85,
// clipBehavior: Clip.antiAlias,
// decoration: BoxDecoration(
// image: DecorationImage(
// image: AssetImage(
// 'lib/assets/ac6.png'),
// fit: BoxFit
// .cover,
// )),
// ),
// ),
// ),
]),
],
),
......
......@@ -429,11 +429,27 @@ class pChildrenProfilePage extends StatelessWidget {
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
// children: [
// GestureDetector(
// onTap: () {
// _getPhoneNumber(user?.uid);
// },
// child: Container(
// height: double.infinity,
// child: Row(
// mainAxisSize:
// MainAxisSize.min,
// mainAxisAlignment:
// MainAxisAlignment
// .start,
// crossAxisAlignment:
// CrossAxisAlignment
// .center,
children: [
GestureDetector(
onTap: () {
_getPhoneNumber(user?.uid);
},
onTap: () => _getPhoneNumber(
context, user?.uid),
child: Container(
height: double.infinity,
child: Row(
......@@ -445,6 +461,7 @@ class pChildrenProfilePage extends StatelessWidget {
crossAxisAlignment:
CrossAxisAlignment
.center,
children: [
Icon(
Icons.call,
......@@ -900,45 +917,45 @@ class pChildrenProfilePage extends StatelessWidget {
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blue,
onTap: (index) {
// Handle bottom navigation item tap
if (index == 0) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => TeacherHomePage()),
);
}
if (index == 1) {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
}
if (index == 2) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TeacherProfilePage(uid: user?.uid)),
);
}
},
),
// bottomNavigationBar: BottomNavigationBar(
// items: const [
// BottomNavigationBarItem(
// icon: Icon(Icons.home),
// label: 'Home',
// ),
// BottomNavigationBarItem(
// icon: Icon(Icons.chat),
// label: 'Chat',
// ),
// BottomNavigationBarItem(
// icon: Icon(Icons.person),
// label: 'Profile',
// ),
// ],
// selectedItemColor: Colors.blue,
// onTap: (index) {
// // Handle bottom navigation item tap
// if (index == 0) {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => TeacherHomePage()),
// );
// }
// if (index == 1) {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => ChatScreen()),
// );
// }
// if (index == 2) {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => TeacherProfilePage(uid: user?.uid)),
// );
// }
// },
// ),
),
);
}
......@@ -951,18 +968,61 @@ class pChildrenProfilePage extends StatelessWidget {
}
}
Future<String?> _getPhoneNumber(userUID) async {
// Future<String?> _getPhoneNumber(userUID) async {
// try {
// var snapshot = await FirebaseFirestore.instance
// .collection('students')
// .where('user', isEqualTo: userUID)
// .get();
// if (snapshot.docs.isNotEmpty) {
// // Assuming 'phone' is the field containing the phone number
// String mobile = snapshot.docs.first['Parentphone'];
// final url = 'tel:$mobile';
// _launchPhone(url);
// } else {
// return null; // Document not found
// }
// } catch (e) {
// print("Error getting phone number: $e");
// return null;
// }
// }
Future<void> _makePhoneCall(BuildContext context, String phoneNumber) async {
final Uri phoneUri = Uri(scheme: 'tel', path: phoneNumber);
try {
print(await canLaunchUrl(phoneUri));
if (await canLaunchUrl(phoneUri)) {
print('Can launch $phoneUri');
await launchUrl(phoneUri);
print('Launched $phoneUri');
} else {
print('Cannot launch $phoneUri');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Could not launch $phoneUri')),
);
}
} catch (e) {
print('Exception caught: $e');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error: $e')),
);
}
}
Future<String?> _getPhoneNumber(context, userUID) async {
try {
var snapshot = await FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: userUID)
.get();
print(userUID);
if (snapshot.docs.isNotEmpty) {
// Assuming 'phone' is the field containing the phone number
String mobile = snapshot.docs.first['Parentphone'];
final url = 'tel:$mobile';
_launchPhone(url);
print(mobile);
_makePhoneCall(context, mobile);
} else {
return null; // Document not found
}
......@@ -970,6 +1030,7 @@ class pChildrenProfilePage extends StatelessWidget {
print("Error getting phone number: $e");
return null;
}
return null;
}
void calculateAge(birthday) {
......
......@@ -60,17 +60,17 @@ class ActivitiesPage extends StatelessWidget {
),
],
),
SizedBox(height: 20),
Row(
children: [
Expanded(
child: ActivityBox(
title: 'Environment',
icon: Icons.child_care,
),
),
],
),
// SizedBox(height: 20),
// Row(
// children: [
// Expanded(
// child: ActivityBox(
// title: 'Environment',
// icon: Icons.child_care,
// ),
// ),
// ],
// ),
],
),
),
......
......@@ -5,8 +5,6 @@ import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:io';
import 'package:intl/intl.dart';
class AddStudentPage extends StatefulWidget {
const AddStudentPage({required this.classname});
......@@ -19,7 +17,6 @@ class AddStudentPage extends StatefulWidget {
class _AddStudentState extends State<AddStudentPage> {
final _formkey = GlobalKey<FormState>();
final _auth = FirebaseAuth.instance;
//Bio Part
TextEditingController _firstnameController = TextEditingController();
TextEditingController _lastnameController = TextEditingController();
......@@ -53,9 +50,6 @@ class _AddStudentState extends State<AddStudentPage> {
XFile? _selectedImage;
String classname;
String? _selectedSex;
DateTime? _selectedBirthday;
_AddStudentState(String classname) : this.classname = classname;
@override
......@@ -169,38 +163,13 @@ class _AddStudentState extends State<AddStudentPage> {
),
),
// SizedBox(height: 20),
// GestureDetector(
// onTap: () => _selectDate(context),
// child: Container(
// padding: EdgeInsets.symmetric(horizontal: 10, vertical: 15),
// decoration: BoxDecoration(
// color: Color.fromARGB(107, 196, 196, 196),
// borderRadius: BorderRadius.circular(10.0),
// ),
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween, // Aligns children to both ends
// children: [
// Expanded( // Text takes up all available space, pushing the icon to the right
// child: Text(
// _selectedBirthday != null ? DateFormat('yyyy-MM-dd').format(_selectedBirthday!) : 'Select Birthday',
// style: TextStyle(fontSize: 14.0, color: Colors.black54),
// ),
// ),
// Icon(Icons.cake, size: 23.0, color: Color.fromARGB(132, 12, 12, 12)), // Icon on the right
// ],
// ),
// ),
// ),
SizedBox(height: 20),
Container(
height: 55.0,
child: TextField(
controller: _birthdayController,
decoration: InputDecoration(
hintText: 'Birthday',
hintText: 'Birthday YYYY-MM-DD',
filled: true,
fillColor: Color.fromARGB(107, 196, 196, 196),
border: OutlineInputBorder(
......@@ -217,34 +186,25 @@ class _AddStudentState extends State<AddStudentPage> {
SizedBox(height: 20),
Container(
height: 55.0,
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 2),
decoration: BoxDecoration(
color: Color.fromARGB(107, 196, 196, 196), // Background color
borderRadius: BorderRadius.circular(10.0), // Border radius
),
child: DropdownButtonFormField<String>(
value: _selectedSex, // This should be a variable in your state class initialized to null or the default value
child: TextField(
controller: _sexController,
decoration: InputDecoration(
border: InputBorder.none,
// contentPadding: EdgeInsets.zero,
suffixIcon: Icon(Icons.people, size: 23.0, color: Color.fromARGB(132, 12, 12, 12)),
hintText: 'Male/Female',
filled: true,
fillColor: Color.fromARGB(107, 196, 196, 196),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.0),
borderSide: BorderSide.none,
),
suffixIcon: Icon(Icons.people,
size: 23.0, color: Color.fromARGB(132, 12, 12, 12)),
hintStyle: TextStyle(fontSize: 14.0), // Add border here
),
hint: Text('Gender', style: TextStyle(fontSize: 14.0)), // Placeholder text
onChanged: (String? newValue) {
setState(() {
_selectedSex = newValue; // Update the state with the new value
});
},
items: <String>['Male', 'Female'].map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
),
),
//Medicine Part
SizedBox(height: 50),
Row(
children: [
......@@ -626,7 +586,7 @@ class _AddStudentState extends State<AddStudentPage> {
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
TextButton(
onPressed: () async {
if (Image == null) {
AwesomeDialog(
......@@ -704,38 +664,36 @@ class _AddStudentState extends State<AddStudentPage> {
}
},
style:
ElevatedButton.styleFrom(
primary: const Color.fromARGB(255, 48, 206, 53),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
),
child: Padding(
padding: const EdgeInsets.all(10.0),
TextButton.styleFrom(backgroundColor: Colors.green),
child: Text(
'Save',
style: TextStyle(color: const Color.fromARGB(255, 255, 255, 255)),
style: TextStyle(
color: Colors.white,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 1,
),
),
),
ElevatedButton(
TextButton(
onPressed: () {
// Handle signup logic here
Navigator.pop(context);
},
style: ElevatedButton.styleFrom(
primary: const Color.fromARGB(255, 255, 255, 255),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
),
child: Padding(
padding: const EdgeInsets.all(10.0),
style: TextButton.styleFrom(
backgroundColor: Colors.grey.shade200),
child: Text(
'Cancel',
style: TextStyle(color: Colors.black),
),
style: TextStyle(
color: Colors.black,
fontSize: 14,
fontFamily: 'Poppins',
fontWeight: FontWeight.w600,
height: 1,
),
),
)
],
),
],
......@@ -808,18 +766,3 @@ class _AddStudentState extends State<AddStudentPage> {
)..show();
}
}
\ No newline at end of file
Future<void> _selectDate(BuildContext context) async {
final DateTime? pickedDate = await showDatePicker(
context: context,
initialDate: DateTime.now(), // Initial date set to current date
firstDate: DateTime(1900), // Earliest allowable date
lastDate: DateTime.now(), // Latest allowable date is today
);
// if (pickedDate != null && pickedDate != DateTime.now()) {
// setState(() {
// // Format the date and update the text field
// _birthdayController.text = DateFormat('yyyy-MM-dd').format(pickedDate);
// });
// }
}
......@@ -428,11 +428,27 @@ class ChildrenProfilePage extends StatelessWidget {
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
// children: [
// GestureDetector(
// onTap: () {
// _getPhoneNumber(user?.uid);
// },
// child: Container(
// height: double.infinity,
// child: Row(
// mainAxisSize:
// MainAxisSize.min,
// mainAxisAlignment:
// MainAxisAlignment
// .start,
// crossAxisAlignment:
// CrossAxisAlignment
// .center,
children: [
GestureDetector(
onTap: () {
_getPhoneNumber(user?.uid);
},
onTap: () => _getPhoneNumber(
context, user?.uid),
child: Container(
height: double.infinity,
child: Row(
......@@ -444,6 +460,7 @@ class ChildrenProfilePage extends StatelessWidget {
crossAxisAlignment:
CrossAxisAlignment
.center,
children: [
Icon(
Icons.call,
......@@ -950,18 +967,61 @@ child: Container(
}
}
Future<String?> _getPhoneNumber(userUID) async {
// Future<String?> _getPhoneNumber(userUID) async {
// try {
// var snapshot = await FirebaseFirestore.instance
// .collection('students')
// .where('user', isEqualTo: userUID)
// .get();
// if (snapshot.docs.isNotEmpty) {
// // Assuming 'phone' is the field containing the phone number
// String mobile = snapshot.docs.first['Parentphone'];
// final url = 'tel:$mobile';
// _launchPhone(url);
// } else {
// return null; // Document not found
// }
// } catch (e) {
// print("Error getting phone number: $e");
// return null;
// }
// }
Future<void> _makePhoneCall(BuildContext context, String phoneNumber) async {
final Uri phoneUri = Uri(scheme: 'tel', path: phoneNumber);
try {
print(await canLaunchUrl(phoneUri));
if (await canLaunchUrl(phoneUri)) {
print('Can launch $phoneUri');
await launchUrl(phoneUri);
print('Launched $phoneUri');
} else {
print('Cannot launch $phoneUri');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Could not launch $phoneUri')),
);
}
} catch (e) {
print('Exception caught: $e');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error: $e')),
);
}
}
Future<String?> _getPhoneNumber(context, userUID) async {
try {
var snapshot = await FirebaseFirestore.instance
.collection('students')
.where('user', isEqualTo: userUID)
.get();
print(userUID);
if (snapshot.docs.isNotEmpty) {
// Assuming 'phone' is the field containing the phone number
String mobile = snapshot.docs.first['Parentphone'];
final url = 'tel:$mobile';
_launchPhone(url);
print(mobile);
_makePhoneCall(context, mobile);
} else {
return null; // Document not found
}
......@@ -969,6 +1029,7 @@ child: Container(
print("Error getting phone number: $e");
return null;
}
return null;
}
void calculateAge(birthday) {
......
......@@ -12,7 +12,25 @@ class GamesPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Games'),
leading: IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
Navigator.of(context).pop();
},
),
actions: [
Text(
'Games ',
style: TextStyle(
color: Color(0xFF554994),
fontSize: 24,
fontFamily: 'Poppins',
fontWeight: FontWeight.w700,
height: 0.04,
letterSpacing: -0.96,
),
)
],
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
......@@ -145,59 +163,59 @@ class GamesPage extends StatelessWidget {
],
),
bottomNavigationBar: BottomNavigationBar(
items: const [
BottomNavigationBarItem(
icon: Icon(Icons.home),
label: 'Home',
),
BottomNavigationBarItem(
icon: Icon(Icons.chat),
label: 'Chat',
),
BottomNavigationBarItem(
icon: Icon(Icons.sports_baseball),
label: 'Games',
),
BottomNavigationBarItem(
icon: Icon(Icons.person),
label: 'Profile',
),
],
selectedItemColor: Colors.blueAccent,
unselectedItemColor: Colors.grey,
currentIndex: 2,
onTap: (index) {
switch (index) {
case 0:
// Navigate to Home
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => ParentHomePage(phoneNo, role)),
// );
break;
case 1:
// Navigate to Chat
Navigator.push(
context,
MaterialPageRoute(builder: (context) => ChatScreen()),
);
break;
case 2:
// Do nothing, we are already on the Games page
break;
case 3:
// Navigate to Profile
// bottomNavigationBar: BottomNavigationBar(
// items: const [
// BottomNavigationBarItem(
// icon: Icon(Icons.home),
// label: 'Home',
// ),
// BottomNavigationBarItem(
// icon: Icon(Icons.chat),
// label: 'Chat',
// ),
// BottomNavigationBarItem(
// icon: Icon(Icons.sports_baseball),
// label: 'Games',
// ),
// BottomNavigationBarItem(
// icon: Icon(Icons.person),
// label: 'Profile',
// ),
// ],
// selectedItemColor: Colors.blueAccent,
// unselectedItemColor: Colors.grey,
// currentIndex: 2,
// onTap: (index) {
// switch (index) {
// case 0:
// // Navigate to Home
// // Navigator.push(
// // context,
// // MaterialPageRoute(builder: (context) => ParentHomePage(phoneNo, role)),
// // );
// break;
// case 1:
// // Navigate to Chat
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) => ParentProfilePage(uid: uid, phoneNo: phoneNo, role: role),
// ),
// MaterialPageRoute(builder: (context) => ChatScreen()),
// );
break;
}
},
),
// break;
// case 2:
// // Do nothing, we are already on the Games page
// break;
// case 3:
// // Navigate to Profile
// // Navigator.push(
// // context,
// // MaterialPageRoute(
// // builder: (context) => ParentProfilePage(uid: uid, phoneNo: phoneNo, role: role),
// // ),
// // );
// break;
// }
// },
//),
);
}
}
......@@ -16,6 +16,7 @@ import rive_common
import shared_preferences_foundation
import sqflite
import url_launcher_macos
import video_player_avfoundation
import wakelock_plus
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
......@@ -30,5 +31,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
FVPVideoPlayerPlugin.register(with: registry.registrar(forPlugin: "FVPVideoPlayerPlugin"))
WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
}
This diff is collapsed.
This diff is collapsed.
......@@ -4,4 +4,7 @@
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
......@@ -141,10 +141,10 @@ packages:
dependency: transitive
description:
name: collection
sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c"
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
url: "https://pub.dev"
source: hosted
version: "1.17.1"
version: "1.18.0"
confetti:
dependency: "direct main"
description:
......@@ -157,10 +157,10 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: "2f9d2cbccb76127ba28528cb3ae2c2326a122446a83de5a056aaa3880d3882c5"
sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e
url: "https://pub.dev"
source: hosted
version: "0.3.3+7"
version: "0.3.3+8"
crypto:
dependency: transitive
description:
......@@ -321,6 +321,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.6.17"
fixnum:
dependency: transitive
description:
name: fixnum
sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
flutter:
dependency: "direct main"
description: flutter
......@@ -380,10 +388,10 @@ packages:
dependency: transitive
description:
name: http
sha256: "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525"
sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139
url: "https://pub.dev"
source: hosted
version: "1.1.0"
version: "1.1.2"
http_parser:
dependency: transitive
description:
......@@ -492,26 +500,26 @@ packages:
dependency: transitive
description:
name: matcher
sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb"
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev"
source: hosted
version: "0.12.15"
version: "0.12.16"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
version: "0.5.0"
meta:
dependency: transitive
description:
name: meta
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.10.0"
mime:
dependency: transitive
description:
......@@ -540,10 +548,10 @@ packages:
dependency: transitive
description:
name: package_info_plus
sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79"
url: "https://pub.dev"
source: hosted
version: "4.2.0"
version: "5.0.1"
package_info_plus_platform_interface:
dependency: transitive
description:
......@@ -612,10 +620,10 @@ packages:
dependency: transitive
description:
name: petitparser
sha256: cb3798bef7fc021ac45b308f4b51208a152792445cce0448c9a4ba5879dd8750
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
url: "https://pub.dev"
source: hosted
version: "5.4.0"
version: "6.0.2"
pie_chart:
dependency: "direct main"
description:
......@@ -716,10 +724,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_web
sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf
sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "2.2.2"
shared_preferences_windows:
dependency: transitive
description:
......@@ -745,10 +753,10 @@ packages:
dependency: transitive
description:
name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.10.0"
sprintf:
dependency: transitive
description:
......@@ -777,18 +785,18 @@ packages:
dependency: transitive
description:
name: stack_trace
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
url: "https://pub.dev"
source: hosted
version: "1.11.0"
version: "1.11.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.1.2"
string_scanner:
dependency: transitive
description:
......@@ -825,10 +833,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
url: "https://pub.dev"
source: hosted
version: "0.5.1"
version: "0.6.1"
typed_data:
dependency: transitive
description:
......@@ -841,10 +849,10 @@ packages:
dependency: "direct main"
description:
name: url_launcher
sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27"
sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c
url: "https://pub.dev"
source: hosted
version: "6.1.14"
version: "6.2.4"
url_launcher_android:
dependency: transitive
description:
......@@ -881,18 +889,18 @@ packages:
dependency: transitive
description:
name: url_launcher_platform_interface
sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
url: "https://pub.dev"
source: hosted
version: "2.3.1"
version: "2.3.2"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
sha256: ba140138558fcc3eead51a1c42e92a9fb074a1b1149ed3c73e66035b2ccd94f2
sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b
url: "https://pub.dev"
source: hosted
version: "2.0.19"
version: "2.2.3"
url_launcher_windows:
dependency: transitive
description:
......@@ -905,10 +913,10 @@ packages:
dependency: transitive
description:
name: uuid
sha256: "22c94e5ad1e75f9934b766b53c742572ee2677c56bc871d850a57dad0f82127f"
sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8
url: "https://pub.dev"
source: hosted
version: "4.2.2"
version: "4.3.3"
vector_math:
dependency: transitive
description:
......@@ -921,10 +929,10 @@ packages:
dependency: "direct main"
description:
name: video_player
sha256: "74b86e63529cf5885130c639d74cd2f9232e7c8a66cbecbddd1dcb9dbd060d1e"
sha256: fbf28ce8bcfe709ad91b5789166c832cb7a684d14f571a81891858fefb5bb1c2
url: "https://pub.dev"
source: hosted
version: "2.7.2"
version: "2.8.2"
video_player_android:
dependency: transitive
description:
......@@ -937,10 +945,10 @@ packages:
dependency: transitive
description:
name: video_player_avfoundation
sha256: bf1a1322bf68bccd349982ba1f5a41314a3880861fb9a93d25d6d0a2345845f0
sha256: "309e3962795e761be010869bae65c0b0e45b5230c5cee1bec72197ca7db040ed"
url: "https://pub.dev"
source: hosted
version: "2.4.11"
version: "2.5.6"
video_player_platform_interface:
dependency: transitive
description:
......@@ -953,10 +961,10 @@ packages:
dependency: transitive
description:
name: video_player_web
sha256: "9c34a243785feca23148bfcd772dbb803d63c9304488177ec4f3f4463802fcb7"
sha256: "34beb3a07d4331a24f7e7b2f75b8e2b103289038e07e65529699a671b6a6e2cb"
url: "https://pub.dev"
source: hosted
version: "2.0.17"
version: "2.1.3"
wakelock_plus:
dependency: transitive
description:
......@@ -973,14 +981,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
web:
dependency: transitive
description:
name: web
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
url: "https://pub.dev"
source: hosted
version: "0.3.0"
win32:
dependency: transitive
description:
name: win32
sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3"
sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
url: "https://pub.dev"
source: hosted
version: "5.0.9"
version: "5.2.0"
xdg_directories:
dependency: transitive
description:
......@@ -993,10 +1009,10 @@ packages:
dependency: transitive
description:
name: xml
sha256: "5bc72e1e45e941d825fd7468b9b4cc3b9327942649aeb6fc5cdbf135f0a86e84"
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
url: "https://pub.dev"
source: hosted
version: "6.3.0"
version: "6.5.0"
sdks:
dart: ">=3.0.1 <4.0.0"
flutter: ">=3.10.0"
dart: ">=3.2.0 <4.0.0"
flutter: ">=3.16.0"
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