Commit 31f902a3 authored by senith sulara's avatar senith sulara

update report

parent 26303dbd
import 'package:auditoryflutter/cameraTwo.dart';
import 'package:camera/camera.dart'; import 'package:camera/camera.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:tflite/tflite.dart'; import 'package:tflite/tflite.dart';
import 'components/custom_page_route.dart';
import 'main.dart'; import 'main.dart';
import 'screens/report.dart';
class Camerapage extends StatefulWidget { class Camerapage extends StatefulWidget {
const Camerapage({Key? key}) : super(key: key); const Camerapage({Key? key}) : super(key: key);
...@@ -15,12 +21,19 @@ class _CamerapageState extends State<Camerapage> { ...@@ -15,12 +21,19 @@ class _CamerapageState extends State<Camerapage> {
CameraImage? cameraImage; CameraImage? cameraImage;
CameraController? cameraController; CameraController? cameraController;
String output = ''; String output = '';
int dett = 0;
int undett = 0;
String detect = '';
@override @override
void initState() { void initState() {
super.initState(); super.initState();
loadCamera(); loadCamera();
loadmodel(); loadmodel();
// Future.delayed(Duration(milliseconds: 1000), () {
// });
} }
loadCamera() { loadCamera() {
...@@ -56,6 +69,13 @@ class _CamerapageState extends State<Camerapage> { ...@@ -56,6 +69,13 @@ class _CamerapageState extends State<Camerapage> {
predictions!.forEach((element) { predictions!.forEach((element) {
setState(() { setState(() {
output = element['label']; output = element['label'];
for (var i = 0; i < 10; i++) {
if (output == "detected") {
dett++;
} else {
undett++;
}
}
}); });
}); });
} }
...@@ -66,6 +86,62 @@ class _CamerapageState extends State<Camerapage> { ...@@ -66,6 +86,62 @@ class _CamerapageState extends State<Camerapage> {
model: "assets/model.tflite", labels: "assets/labels.txt"); model: "assets/model.tflite", labels: "assets/labels.txt");
} }
_saveTask() {
double pres = (dett / (dett + undett)) * 100;
String pres2 = pres.toStringAsFixed(2);
FirebaseFirestore.instance.collection("results").add({
"userid": 101,
"ear": "Left",
"detected": dett,
"undetected": undett,
"percentage": pres
});
Fluttertoast.showToast(
msg: "Data Saved",
toastLength: Toast.LENGTH_SHORT,
timeInSecForIosWeb: 1,
textColor: Colors.white,
fontSize: 16.0);
}
showAlertDialog(BuildContext context) {
// set up the buttons
Widget remindButton = TextButton(
child: Text("Save Data"),
onPressed: () => _saveTask(),
);
Widget cancelButton = TextButton(
child: Text("Cancel"),
onPressed: () {
Navigator.of(context).pop();
},
);
Widget launchButton = TextButton(
child: Text("Next"),
onPressed: () => Navigator.of(context).push(CustomPageRoute(
child: CameraTwopage(), direction: AxisDirection.right)),
);
// set up the AlertDialog
AlertDialog alert = AlertDialog(
title: Text("Notice"),
content: Text("Save Test Results and click Next"),
actions: [
cancelButton,
remindButton,
launchButton,
],
);
// show the dialog
showDialog(
context: context,
builder: (BuildContext context) {
return alert;
},
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
...@@ -75,7 +151,7 @@ class _CamerapageState extends State<Camerapage> { ...@@ -75,7 +151,7 @@ class _CamerapageState extends State<Camerapage> {
title: const Padding( title: const Padding(
padding: EdgeInsets.only(top: 10.0), padding: EdgeInsets.only(top: 10.0),
child: Text( child: Text(
"Check Babies Ears", "Check Babies Left Ear",
style: TextStyle( style: TextStyle(
fontSize: 20.0, color: Color.fromARGB(215, 255, 255, 255)), fontSize: 20.0, color: Color.fromARGB(215, 255, 255, 255)),
), ),
...@@ -100,7 +176,18 @@ class _CamerapageState extends State<Camerapage> { ...@@ -100,7 +176,18 @@ class _CamerapageState extends State<Camerapage> {
Text( Text(
output, output,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20), style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
) ),
// for (var i = 0; i < 10; i++) ...[],
// if (output == "detected") ...[],
FloatingActionButton.extended(
onPressed: () {
showAlertDialog(context);
},
// Navigator.of(context).push(CustomPageRoute(
// child: ReportPage(), direction: AxisDirection.right)),
icon: Icon(Icons.save),
label: Text("Get Result"),
),
]), ]),
); );
} }
......
import 'package:auditoryflutter/cameraTwo.dart';
import 'package:camera/camera.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:tflite/tflite.dart';
import 'components/custom_page_route.dart';
import 'main.dart';
import 'screens/report.dart';
class CameraTwopage extends StatefulWidget {
const CameraTwopage({Key? key}) : super(key: key);
@override
_CameraTwopageState createState() => _CameraTwopageState();
}
class _CameraTwopageState extends State<CameraTwopage> {
CameraImage? cameraImage;
CameraController? cameraController;
String output = '';
int dett = 0;
int undett = 0;
String detect = '';
@override
void initState() {
super.initState();
loadCamera();
loadmodel();
// Future.delayed(Duration(milliseconds: 1000), () {
// });
}
loadCamera() {
cameraController = CameraController(cameras![0], ResolutionPreset.high);
cameraController!.initialize().then((value) {
if (!mounted) {
return;
} else {
setState(() {
cameraController!.startImageStream((imageStream) {
cameraImage = imageStream;
runModel();
});
});
}
});
}
runModel() async {
if (cameraImage != null) {
var predictions = await Tflite.runModelOnFrame(
bytesList: cameraImage!.planes.map((plane) {
return plane.bytes;
}).toList(),
imageHeight: cameraImage!.height,
imageWidth: cameraImage!.width,
imageMean: 127.5,
imageStd: 127.5,
rotation: 90,
numResults: 2,
threshold: 0.1,
asynch: true);
predictions!.forEach((element) {
setState(() {
output = element['label'];
for (var i = 0; i < 10; i++) {
if (output == "detected") {
dett++;
} else {
undett++;
}
}
});
});
}
}
loadmodel() async {
await Tflite.loadModel(
model: "assets/model.tflite", labels: "assets/labels.txt");
}
_saveTask() {
double pres = (dett / (dett + undett)) * 100;
String pres2 = pres.toStringAsFixed(2);
FirebaseFirestore.instance.collection("results").add({
"userid": 101,
"ear": "Right",
"detected": dett,
"undetected": undett,
"percentage": pres
});
Fluttertoast.showToast(
msg: "Data Saved",
toastLength: Toast.LENGTH_SHORT,
timeInSecForIosWeb: 1,
textColor: Colors.white,
fontSize: 16.0);
}
showAlertDialog(BuildContext context) {
// set up the buttons
Widget remindButton = TextButton(
child: Text("Save Data"),
onPressed: () => _saveTask(),
);
Widget cancelButton = TextButton(
child: Text("Cancel"),
onPressed: () {
Navigator.of(context).pop();
},
);
Widget launchButton = TextButton(
child: Text("Next"),
onPressed: () => Navigator.of(context).push(
CustomPageRoute(child: ReportPage(), direction: AxisDirection.right)),
);
// set up the AlertDialog
AlertDialog alert = AlertDialog(
title: Text("Notice"),
content: Text("Save Test Results and click Next"),
actions: [
cancelButton,
remindButton,
launchButton,
],
);
// show the dialog
showDialog(
context: context,
builder: (BuildContext context) {
return alert;
},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
backgroundColor: Color.fromARGB(255, 7, 218, 77),
title: const Padding(
padding: EdgeInsets.only(top: 10.0),
child: Text(
"Check Babies Right Ear",
style: TextStyle(
fontSize: 20.0, color: Color.fromARGB(215, 255, 255, 255)),
),
),
iconTheme:
const IconThemeData(color: Color.fromARGB(255, 247, 213, 255)),
),
body: Column(children: [
Padding(
padding: EdgeInsets.all(20),
child: Container(
height: MediaQuery.of(context).size.height * 0.7,
width: MediaQuery.of(context).size.width,
child: !cameraController!.value.isInitialized
? Container()
: AspectRatio(
aspectRatio: cameraController!.value.aspectRatio,
child: CameraPreview(cameraController!),
),
),
),
Text(
output,
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20),
),
// for (var i = 0; i < 10; i++) ...[],
// if (output == "detected") ...[],
FloatingActionButton.extended(
onPressed: () {
showAlertDialog(context);
},
// Navigator.of(context).push(CustomPageRoute(
// child: ReportPage(), direction: AxisDirection.right)),
icon: Icon(Icons.save),
label: Text("Get Result"),
),
]),
);
}
}
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class ThemeHelper{
InputDecoration textInputDecoration([String lableText="", String hintText = ""]){
return InputDecoration(
labelText: lableText,
hintText: hintText,
fillColor: Colors.white,
filled: true,
contentPadding: EdgeInsets.fromLTRB(20, 10, 20, 10),
focusedBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(100.0), borderSide: BorderSide(color: Colors.grey)),
enabledBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(100.0), borderSide: BorderSide(color: Colors.grey.shade400)),
errorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(100.0), borderSide: BorderSide(color: Colors.red, width: 2.0)),
focusedErrorBorder: OutlineInputBorder(borderRadius: BorderRadius.circular(100.0), borderSide: BorderSide(color: Colors.red, width: 2.0)),
);
}
BoxDecoration inputBoxDecorationShaddow() {
return BoxDecoration(boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
blurRadius: 20,
offset: const Offset(0, 5),
)
]);
}
BoxDecoration buttonBoxDecoration(BuildContext context, [String color1 = "", String color2 = ""]) {
Color c1 = Theme.of(context).primaryColor;
Color c2 = Theme.of(context).accentColor;
if (color1.isEmpty == false) {
c1 = HexColor(color1);
}
if (color2.isEmpty == false) {
c2 = HexColor(color2);
}
return BoxDecoration(
boxShadow: [
BoxShadow(color: Colors.black26, offset: Offset(0, 4), blurRadius: 5.0)
],
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
stops: [0.0, 1.0],
colors: [
c1,
c2,
],
),
color: Colors.deepPurple.shade300,
borderRadius: BorderRadius.circular(30),
);
}
ButtonStyle buttonStyle() {
return ButtonStyle(
shape: MaterialStateProperty.all<RoundedRectangleBorder>(
RoundedRectangleBorder(
borderRadius: BorderRadius.circular(30.0),
),
),
minimumSize: MaterialStateProperty.all(Size(50, 50)),
backgroundColor: MaterialStateProperty.all(Colors.transparent),
shadowColor: MaterialStateProperty.all(Colors.transparent),
);
}
AlertDialog alartDialog(String title, String content, BuildContext context) {
return AlertDialog(
title: Text(title),
content: Text(content),
actions: [
TextButton(
child: Text(
"OK",
style: TextStyle(color: Colors.white),
),
style: ButtonStyle(
backgroundColor: MaterialStateProperty.all(Colors.black38)),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
}
}
class LoginFormStyle{
}
\ No newline at end of file
List musicList = [ List musicList = [
{ {
'title': "Slow Motion", 'title': "500 Hz Pure Tone",
'singer': "Lexin Music", 'singer': "35 db",
'url': "https://cdn.pixabay.com/audio/2022/10/05/audio_1c7fba0237.mp3", 'url':
'coverUrl': "https://res.cloudinary.com/dz3ljnlvy/video/upload/v1668108542/500_Hz_Test_Tone_c03ly3.mp3",
"https://cdn.pixabay.com/audio/2022/10/05/19-48-58-986_200x200.jpg",
},
{
'title': "Sweet Love",
'singer': "DayFox",
'url': "https://cdn.pixabay.com/audio/2022/10/02/audio_8f97a56643.mp3",
'coverUrl':
"https://cdn.pixabay.com/audio/2022/10/02/06-29-09-949_200x200.jpg",
},
{
'title': "Something is Going On",
'singer': "Godmode",
'url': "https://cdn.pixabay.com/audio/2022/09/18/audio_5658d27863.mp3",
'coverUrl': 'coverUrl':
"https://cdn.pixabay.com/audio/2022/09/18/16-52-08-594_200x200.jpg", "https://res.cloudinary.com/dz3ljnlvy/image/upload/v1668108693/maxresdefault_tgdpgu.jpg",
}, },
{ {
'title': "Mandaram Kathawe", 'title': "1000 Hz Pure Tone",
'singer': "Anushka Udana", 'singer': "35 db",
'url': 'url':
"https://res.cloudinary.com/dz3ljnlvy/video/upload/v1665170166/Mandaaram_dwlob0.mp3", "https://res.cloudinary.com/dz3ljnlvy/video/upload/v1668108542/1000_Hz_Test_Tone_g1cfnk.mp3",
'coverUrl': 'coverUrl':
"https://res.cloudinary.com/dz3ljnlvy/image/upload/v1665170207/mandaram_t4sfa6.jpg", "https://res.cloudinary.com/dz3ljnlvy/image/upload/v1668108693/maxresdefault_1_bk6flc.jpg",
}, },
{ {
'title': "Blessed(Main)", 'title': "2000 Hz Pure Tone",
'singer': "Daddy s Music", 'singer': "35 db",
'url': "https://cdn.pixabay.com/audio/2022/09/22/audio_14e9964c5f.mp3", 'url':
"https://res.cloudinary.com/dz3ljnlvy/video/upload/v1668108543/2000_Hz_Test_Tone_ywxvex.mp3",
'coverUrl': 'coverUrl':
"https://cdn.pixabay.com/audio/2022/09/24/09-19-03-222_200x200.jpeg", "https://res.cloudinary.com/dz3ljnlvy/image/upload/v1668108693/maxresdefault_2_bt8tkr.jpg",
}, },
{ {
'title': "madiRFAN - Both of Us", 'title': "3000 Hz Pure Tone",
'singer': "MADiRFAN", 'singer': "35 db",
'url': "https://cdn.pixabay.com/audio/2022/01/12/audio_45cacdef8f.mp3", 'url':
"https://res.cloudinary.com/dz3ljnlvy/video/upload/v1668108803/3000_Hz_Test_Tone_scteai.mp3",
'coverUrl': 'coverUrl':
"https://cdn.pixabay.com/audio/2022/03/15/07-26-27-958_200x200.jpg", "https://res.cloudinary.com/dz3ljnlvy/image/upload/v1668108693/maxresdefault_3_xmjkac.jpg",
}, },
{ {
'title': "Relaxing Light", 'title': "4000 Hz Pure Tone",
'singer': "AudioCoffee", 'singer': "35 db",
'url': "https://cdn.pixabay.com/audio/2022/08/08/audio_0627597b4f.mp3", 'url':
"https://res.cloudinary.com/dz3ljnlvy/video/upload/v1668108542/4000_Hz_Test_Tone_sgwjlk.mp3",
'coverUrl': 'coverUrl':
"https://cdn.pixabay.com/audio/2022/08/08/09-06-17-761_200x200.jpg", "https://res.cloudinary.com/dz3ljnlvy/image/upload/v1668108693/maxresdefault_4_gxx5xw.jpg",
}, },
]; ];
import 'package:auditoryflutter/screens/CheckEars.dart'; import 'package:auditoryflutter/screens/CheckEars.dart';
import 'package:auditoryflutter/screens/homeMain.dart'; import 'package:auditoryflutter/screens/homeMain.dart';
import 'package:auditoryflutter/screens/howto.dart'; import 'package:auditoryflutter/screens/howto.dart';
import 'package:auditoryflutter/screens/map.dart';
import 'package:auditoryflutter/screens/report.dart'; import 'package:auditoryflutter/screens/report.dart';
import 'package:auditoryflutter/screens/soundLibrary.dart'; import 'package:auditoryflutter/screens/soundLibrary.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
...@@ -53,15 +54,20 @@ class NevigationDrawer extends StatelessWidget { ...@@ -53,15 +54,20 @@ class NevigationDrawer extends StatelessWidget {
onClicked: () => selectedItem(context, 3)), onClicked: () => selectedItem(context, 3)),
const SizedBox(height: 16), const SizedBox(height: 16),
buildMenuItem( buildMenuItem(
text: 'How to Use', text: 'Hospitals',
icon: Icons.question_answer, icon: Icons.local_hospital,
onClicked: () => selectedItem(context, 4)), onClicked: () => selectedItem(context, 4)),
const SizedBox(height: 16), const SizedBox(height: 16),
const Divider(color: Colors.white70), const Divider(color: Colors.white70),
buildMenuItem(
text: 'Guidence',
icon: Icons.question_answer,
onClicked: () => selectedItem(context, 5)),
const SizedBox(height: 16),
buildMenuItem( buildMenuItem(
text: 'Logout', text: 'Logout',
icon: Icons.logout, icon: Icons.logout,
onClicked: () => selectedItem(context, 5)), onClicked: () => selectedItem(context, 6)),
const SizedBox(height: 24), const SizedBox(height: 24),
], ],
), ),
...@@ -142,6 +148,10 @@ void selectedItem(BuildContext context, int i) { ...@@ -142,6 +148,10 @@ void selectedItem(BuildContext context, int i) {
CustomPageRoute(child: ReportPage(), direction: AxisDirection.left)); CustomPageRoute(child: ReportPage(), direction: AxisDirection.left));
break; break;
case 4: case 4:
Navigator.of(context).push(CustomPageRoute(
child: CurrentLocationScreen(), direction: AxisDirection.left));
break;
case 5:
Navigator.of(context).push(CustomPageRoute( Navigator.of(context).push(CustomPageRoute(
child: HowToUsePage(), direction: AxisDirection.left)); child: HowToUsePage(), direction: AxisDirection.left));
break; break;
......
import 'package:auditoryflutter/screens/splash.dart'; import 'package:auditoryflutter/screens/splash.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:camera/camera.dart'; import 'package:camera/camera.dart';
import 'camera.dart'; import 'camera.dart';
...@@ -7,6 +8,7 @@ List<CameraDescription>? cameras; ...@@ -7,6 +8,7 @@ List<CameraDescription>? cameras;
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
cameras = await availableCameras(); cameras = await availableCameras();
runApp(new MyApp()); runApp(new MyApp());
} }
......
import 'dart:ui';
class GeoPoint {
/// Create [GeoPoint] instance.
const GeoPoint(this.latitude, this.longitude)
: assert(latitude >= -90 && latitude <= 90),
assert(longitude >= -180 && longitude <= 180);
final double latitude; // ignore: public_member_api_docs
final double longitude; // ignore: public_member_api_docs
@override
bool operator ==(dynamic o) =>
o is GeoPoint && o.latitude == latitude && o.longitude == longitude;
@override
int get hashCode => hashValues(latitude, longitude);
}
class Nearby {
String? businessStatus;
Geometry? geometry;
String? icon;
String? iconBackgroundColor;
String? iconMaskBaseUri;
String? name;
String? placeId;
PlusCode? plusCode;
int? rating;
String? reference;
String? scope;
List<String>? types;
int? userRatingsTotal;
String? vicinity;
Nearby(
{this.businessStatus,
this.geometry,
this.icon,
this.iconBackgroundColor,
this.iconMaskBaseUri,
this.name,
this.placeId,
this.plusCode,
this.rating,
this.reference,
this.scope,
this.types,
this.userRatingsTotal,
this.vicinity});
Nearby.fromJson(Map<String, dynamic> json) {
businessStatus = json['business_status'];
geometry = json['geometry'] != null
? new Geometry.fromJson(json['geometry'])
: null;
icon = json['icon'];
iconBackgroundColor = json['icon_background_color'];
iconMaskBaseUri = json['icon_mask_base_uri'];
name = json['name'];
placeId = json['place_id'];
plusCode = json['plus_code'] != null
? new PlusCode.fromJson(json['plus_code'])
: null;
rating = json['rating'];
reference = json['reference'];
scope = json['scope'];
types = json['types'].cast<String>();
userRatingsTotal = json['user_ratings_total'];
vicinity = json['vicinity'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['business_status'] = this.businessStatus;
if (this.geometry != null) {
data['geometry'] = this.geometry!.toJson();
}
data['icon'] = this.icon;
data['icon_background_color'] = this.iconBackgroundColor;
data['icon_mask_base_uri'] = this.iconMaskBaseUri;
data['name'] = this.name;
data['place_id'] = this.placeId;
if (this.plusCode != null) {
data['plus_code'] = this.plusCode!.toJson();
}
data['rating'] = this.rating;
data['reference'] = this.reference;
data['scope'] = this.scope;
data['types'] = this.types;
data['user_ratings_total'] = this.userRatingsTotal;
data['vicinity'] = this.vicinity;
return data;
}
}
class Geometry {
Location? location;
Viewport? viewport;
Geometry({this.location, this.viewport});
Geometry.fromJson(Map<String, dynamic> json) {
location = json['location'] != null
? new Location.fromJson(json['location'])
: null;
viewport = json['viewport'] != null
? new Viewport.fromJson(json['viewport'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.location != null) {
data['location'] = this.location!.toJson();
}
if (this.viewport != null) {
data['viewport'] = this.viewport!.toJson();
}
return data;
}
}
class Location {
double? lat;
double? lng;
Location({this.lat, this.lng});
Location.fromJson(Map<String, dynamic> json) {
lat = json['lat'];
lng = json['lng'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['lat'] = this.lat;
data['lng'] = this.lng;
return data;
}
}
class Viewport {
Location? northeast;
Location? southwest;
Viewport({this.northeast, this.southwest});
Viewport.fromJson(Map<String, dynamic> json) {
northeast = json['northeast'] != null
? new Location.fromJson(json['northeast'])
: null;
southwest = json['southwest'] != null
? new Location.fromJson(json['southwest'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.northeast != null) {
data['northeast'] = this.northeast!.toJson();
}
if (this.southwest != null) {
data['southwest'] = this.southwest!.toJson();
}
return data;
}
}
class PlusCode {
String? compoundCode;
String? globalCode;
PlusCode({this.compoundCode, this.globalCode});
PlusCode.fromJson(Map<String, dynamic> json) {
compoundCode = json['compound_code'];
globalCode = json['global_code'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['compound_code'] = this.compoundCode;
data['global_code'] = this.globalCode;
return data;
}
}
import 'package:auditoryflutter/camera.dart'; import 'package:auditoryflutter/camera.dart';
import 'package:auditoryflutter/screens/CheckEars.dart'; import 'package:auditoryflutter/screens/CheckEars.dart';
import 'package:auditoryflutter/screens/howto.dart'; import 'package:auditoryflutter/screens/howto.dart';
import 'package:auditoryflutter/screens/map.dart';
import 'package:auditoryflutter/screens/report.dart'; import 'package:auditoryflutter/screens/report.dart';
import 'package:auditoryflutter/screens/soundLibrary.dart'; import 'package:auditoryflutter/screens/soundLibrary.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
...@@ -40,7 +41,7 @@ class Home extends StatelessWidget { ...@@ -40,7 +41,7 @@ class Home extends StatelessWidget {
), ),
body: Container( body: Container(
decoration: const BoxDecoration( decoration: const BoxDecoration(
color: Color.fromARGB(255, 93, 237, 153), color: Color.fromARGB(255, 240, 240, 240),
// image: DecorationImage( // image: DecorationImage(
// image: AssetImage('assets/images/background2.jpg'), // image: AssetImage('assets/images/background2.jpg'),
// fit: BoxFit.cover), // fit: BoxFit.cover),
...@@ -199,7 +200,7 @@ class Home extends StatelessWidget { ...@@ -199,7 +200,7 @@ class Home extends StatelessWidget {
splashColor: Colors.black45, splashColor: Colors.black45,
onTap: () => Navigator.of(context).push( onTap: () => Navigator.of(context).push(
CustomPageRoute( CustomPageRoute(
child: HowToUsePage(), child: CurrentLocationScreen(),
direction: AxisDirection.right)), direction: AxisDirection.right)),
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
...@@ -215,14 +216,14 @@ class Home extends StatelessWidget { ...@@ -215,14 +216,14 @@ class Home extends StatelessWidget {
children: [ children: [
Ink.image( Ink.image(
image: AssetImage( image: AssetImage(
'assets/images/que.png'), 'assets/images/hosp.png'),
height: 150, height: 150,
width: 150, width: 150,
fit: BoxFit.cover, fit: BoxFit.cover,
), ),
const SizedBox(height: 7), const SizedBox(height: 7),
const Text( const Text(
'How To use', 'Hospitals',
style: TextStyle( style: TextStyle(
fontSize: 22, fontSize: 22,
color: Colors.white), color: Colors.white),
......
...@@ -12,34 +12,17 @@ class HowToUsePage extends StatefulWidget { ...@@ -12,34 +12,17 @@ class HowToUsePage extends StatefulWidget {
class _HowToUsePageState extends State<HowToUsePage> { class _HowToUsePageState extends State<HowToUsePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget aboutUsSection = SizedBox(
child: Column(
children: const [
Padding(
padding: EdgeInsets.only(top: 10),
child: Text(
"We will not use your personal data for any purpose.",
style: TextStyle(
fontFamily: 'Roboto',
fontSize: 50,
color: Color.fromARGB(253, 255, 208, 208)),
textAlign: TextAlign.center,
)),
],
),
);
return Scaffold( return Scaffold(
drawer: NevigationDrawer(), drawer: NevigationDrawer(),
appBar: PreferredSize( appBar: PreferredSize(
preferredSize: const Size.fromHeight(60), preferredSize: const Size.fromHeight(60),
child: AppBar( child: AppBar(
centerTitle: true, centerTitle: true,
backgroundColor: const Color.fromARGB(255, 135, 63, 243), backgroundColor: const Color.fromARGB(255, 7, 218, 77),
title: const Padding( title: const Padding(
padding: EdgeInsets.only(top: 10.0), padding: EdgeInsets.only(top: 10.0),
child: Text( child: Text(
"Terms and Conditions", "Guidence",
style: TextStyle( style: TextStyle(
fontSize: 20.0, color: Color.fromARGB(215, 255, 255, 255)), fontSize: 20.0, color: Color.fromARGB(215, 255, 255, 255)),
), ),
...@@ -49,12 +32,91 @@ class _HowToUsePageState extends State<HowToUsePage> { ...@@ -49,12 +32,91 @@ class _HowToUsePageState extends State<HowToUsePage> {
), ),
), ),
body: Container( body: Container(
decoration: const BoxDecoration(
color: Color.fromARGB(255, 235, 237, 206),
// image: DecorationImage(
// image: AssetImage('assets/images/background2.jpg'),
// fit: BoxFit.cover),
),
height: double.maxFinite, height: double.maxFinite,
width: double.maxFinite, width: double.maxFinite,
padding: const EdgeInsets.only(top: 50), padding: const EdgeInsets.only(top: 30),
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [aboutUsSection], children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Step 1: You Need to Go to the Sound Library and select tone and play it",
style: TextStyle(fontSize: 20.0)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Step 2: Warrning Please adjust the volume before placeing ear phone to babies ear",
style: TextStyle(
fontSize: 20.0,
color: Color.fromARGB(214, 230, 10, 10))),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Step 3: Place a one ear phone to babies Left Ear only",
style: TextStyle(fontSize: 20.0),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("Step 4: Go back and open Check Ears",
style: TextStyle(fontSize: 20.0)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("Step 5: Give permission for camera and audio",
style: TextStyle(fontSize: 20.0)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Step 6: Place your camera to the babies face and collect data",
style: TextStyle(fontSize: 20.0)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Step 7: Now select the Get Result button and select Save Data",
style: TextStyle(fontSize: 20.0)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Step 8: Select Next ",
style: TextStyle(fontSize: 20.0)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"Step 9: Place a one ear phone to babies Right Ear only",
style: TextStyle(fontSize: 20.0)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("Step 10: Now Continue from Step 7 ",
style: TextStyle(
fontSize: 20.0,
color: Color.fromARGB(213, 10, 230, 43))),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text("Step 11: You Can view Test Results from Report",
style: TextStyle(
fontSize: 20.0,
color: Color.fromARGB(212, 10, 80, 230))),
),
],
),
), ),
), ),
); );
......
import 'package:auditoryflutter/screens/homeMain.dart';
import 'package:auditoryflutter/screens/register.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import '../common/theme_helper.dart';
import '../components/custom_page_route.dart';
import 'widgets/header_widget.dart';
class LoginPage extends StatefulWidget {
static const String routeName = '/signInscreen';
const LoginPage({Key? key}) : super(key: key);
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
final _signInFormKey = GlobalKey<FormState>();
final TextEditingController _emailController = TextEditingController();
final TextEditingController _passwordController = TextEditingController();
double _headerHeight = 250;
Key _formKey = GlobalKey<FormState>();
@override
void dispose() {
super.dispose();
_emailController.dispose();
_passwordController.dispose();
}
// void signUpUser() {
// authService.signUpUser(
// context: context,
// email: _emailController.text,
// password: _passwordController.text,
// name: _nameController.text,
// );
// }
void signInUser() {
// authService.signInUser(
// context: context,
// email: _emailController.text,
// password: _passwordController.text,
// );
Navigator.push(context, MaterialPageRoute(builder: (context) => Home()));
Fluttertoast.showToast(
msg: "Login Success",
toastLength: Toast.LENGTH_SHORT,
timeInSecForIosWeb: 1,
textColor: Colors.white,
fontSize: 16.0);
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
child: Column(
children: [
Container(
height: _headerHeight,
child: HeaderWidget(_headerHeight, true,
Icons.login_rounded), //let's create a common header widget
),
SafeArea(
child: Container(
padding: EdgeInsets.fromLTRB(20, 10, 20, 10),
margin: EdgeInsets.fromLTRB(
20, 10, 20, 10), // This will be the login form
child: Column(
children: [
Text(
'Welcome',
style: TextStyle(
fontSize: 60, fontWeight: FontWeight.bold),
),
Text(
'Signin into your account',
style: TextStyle(color: Colors.grey),
),
SizedBox(height: 30.0),
Form(
key: _signInFormKey,
child: Column(
children: [
Container(
child: TextField(
controller: _emailController,
decoration: ThemeHelper().textInputDecoration(
'Email', 'Enter your email'),
),
decoration:
ThemeHelper().inputBoxDecorationShaddow(),
),
SizedBox(height: 30.0),
Container(
child: TextField(
controller: _passwordController,
obscureText: true,
decoration: ThemeHelper().textInputDecoration(
'Password', 'Enter your password'),
),
decoration:
ThemeHelper().inputBoxDecorationShaddow(),
),
SizedBox(height: 15.0),
Container(
margin: EdgeInsets.fromLTRB(10, 0, 10, 20),
alignment: Alignment.topRight,
child: GestureDetector(
onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) =>
// ForgotPasswordPage()),
// );
},
child: Text(
"Forgot your password?",
style: TextStyle(
color: Colors.grey,
),
),
),
),
Container(
decoration:
ThemeHelper().buttonBoxDecoration(context),
child: ElevatedButton(
style: ThemeHelper().buttonStyle(),
child: Padding(
padding:
EdgeInsets.fromLTRB(40, 10, 40, 10),
child: Text(
'Sign In'.toUpperCase(),
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white),
),
),
onPressed: () {
//After successful login we will redirect to profile page. Let's create profile page now
// Navigator.pushReplacement(
// context,
// MaterialPageRoute(
// builder: (context) => Items()));
if (_signInFormKey.currentState!
.validate()) {
signInUser();
}
},
),
),
Container(
margin: EdgeInsets.fromLTRB(10, 20, 10, 20),
//child: Text('Don\'t have an account? Create'),
child: Text.rich(TextSpan(children: [
TextSpan(text: "Don\'t have an account? "),
TextSpan(
text: 'Create',
recognizer: TapGestureRecognizer()
..onTap = () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
RegistrationPage()));
},
style: TextStyle(
fontWeight: FontWeight.bold,
color: Theme.of(context).accentColor),
),
])),
),
],
)),
],
)),
),
],
),
),
);
}
}
// import 'dart:ffi';
// import 'package:flutter/material.dart';
// import 'package:google_maps_flutter/google_maps_flutter.dart';
// import '../components/navigationdrawer.dart';
// class MapPage extends StatefulWidget {
// const MapPage({Key? key}) : super(key: key);
// @override
// State<MapPage> createState() => _MapPageState();
// }
// class _MapPageState extends State<MapPage> {
// static const _initialCameraPosition = CameraPosition(
// target: LatLng(7.8731, 80.7718),
// zoom: 11.5,
// );
// GoogleMapController? _googleMapController;
// @override
// void dispose() {
// _googleMapController?.dispose();
// super.dispose();
// }
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// drawer: NevigationDrawer(),
// appBar: PreferredSize(
// preferredSize: const Size.fromHeight(60),
// child: AppBar(
// centerTitle: true,
// backgroundColor: const Color.fromARGB(255, 7, 218, 77),
// title: const Padding(
// padding: EdgeInsets.only(top: 10.0),
// child: Text(
// "Map",
// style: TextStyle(
// fontSize: 20.0, color: Color.fromARGB(215, 255, 255, 255)),
// ),
// ),
// iconTheme:
// const IconThemeData(color: Color.fromARGB(255, 247, 213, 255)),
// ),
// ),
// body: GoogleMap(
// myLocationButtonEnabled: false,
// zoomControlsEnabled: false,
// initialCameraPosition: _initialCameraPosition,
// onMapCreated: (controller) => _googleMapController = controller,
// ),
// floatingActionButton: FloatingActionButton(
// backgroundColor: Colors.white,
// foregroundColor: Colors.black,
// onPressed: () => _googleMapController?.animateCamera(
// CameraUpdate.newCameraPosition(_initialCameraPosition),
// ),
// child: const Icon(Icons.center_focus_strong),
// ),
// );
// }
// }
import 'package:auditoryflutter/services/nearby_location_api.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:auditoryflutter/models/nearby.dart';
import 'package:auditoryflutter/models/geoPoint.dart';
class CurrentLocationScreen extends StatefulWidget {
const CurrentLocationScreen({Key? key}) : super(key: key);
@override
_CurrentLocationScreenState createState() => _CurrentLocationScreenState();
}
class _CurrentLocationScreenState extends State<CurrentLocationScreen> {
late GoogleMapController googleMapController;
static const CameraPosition initialCameraPosition = CameraPosition(
target: LatLng(37.42796133580664, -122.085749655962), zoom: 14);
Set<Marker> markers = {};
List<Nearby> nearbyLocations = <Nearby>[];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Nearby Hospitals"),
centerTitle: true,
backgroundColor: const Color.fromARGB(255, 7, 218, 77),
),
body: GoogleMap(
initialCameraPosition: initialCameraPosition,
markers: markers,
zoomControlsEnabled: false,
mapType: MapType.normal,
onMapCreated: (GoogleMapController controller) {
googleMapController = controller;
},
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () async {
Position position = await _determinePosition();
googleMapController.animateCamera(CameraUpdate.newCameraPosition(
CameraPosition(
target: LatLng(position.latitude, position.longitude),
zoom: 14)));
markers.clear();
markers.add(Marker(
markerId: const MarkerId('currentLocation'),
position: LatLng(position.latitude, position.longitude)));
setState(() {});
final List<Nearby> result = await NearcyLocationApi.instance!
.getNearby(radius: 1000, type: 'doctor', keyword: '');
nearbyLocations = result;
},
label: const Text("Current Location"),
icon: const Icon(Icons.location_history),
),
);
}
Future<Position> _determinePosition() async {
bool serviceEnabled;
LocationPermission permission;
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return Future.error('Location services are disabled');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return Future.error("Location permission denied");
}
}
if (permission == LocationPermission.deniedForever) {
return Future.error('Location permissions are permanently denied');
}
Position position = await Geolocator.getCurrentPosition();
return position;
}
}
This diff is collapsed.
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../components/navigationdrawer.dart'; import '../components/navigationdrawer.dart';
final resultRef = FirebaseFirestore.instance.collection('results');
class ReportPage extends StatefulWidget { class ReportPage extends StatefulWidget {
const ReportPage({Key? key}) : super(key: key); const ReportPage({Key? key}) : super(key: key);
...@@ -10,32 +13,59 @@ class ReportPage extends StatefulWidget { ...@@ -10,32 +13,59 @@ class ReportPage extends StatefulWidget {
} }
class _ReportPageState extends State<ReportPage> { class _ReportPageState extends State<ReportPage> {
// int documentId = 100;
// String output = '';
// String detect = '';
// String ear = '';
// double percentage = 0;
// String pres2 = '';
@override @override
Widget build(BuildContext context) { void initState() {
Widget aboutUsSection = SizedBox( super.initState();
child: Column( // getResults();
children: const [ }
Padding(
padding: EdgeInsets.only(top: 10), // getResults() {
child: Text( // resultRef
"We will not use your personal data for any purpose.", // .where('userid', isEqualTo: 100)
style: TextStyle( // .get()
fontFamily: 'Roboto', // .then((QuerySnapshot snapshot) {
fontSize: 50, // snapshot.docs.forEach((DocumentSnapshot doc) {
color: Color.fromARGB(253, 255, 208, 208)), // ear = doc["ear"];
textAlign: TextAlign.center, // percentage = doc["percentage"];
)), // pres2 = percentage.toStringAsFixed(2);
], // print(doc["ear"]);
), // print(pres2);
); // if (ear == "Right Ear") {
// if (percentage < 50) {
// print("Do ABR or OBE");
// } else {
// print("Left ear is fine");
// }
// }
// if (ear == "Left Ear") {
// if (percentage < 50) {
// print("Do ABR or OBE");
// } else {
// print("Left ear is fine");
// }
// }
// });
// });
// }
@override
Widget build(BuildContext context) {
return Scaffold( return Scaffold(
drawer: NevigationDrawer(), drawer: NevigationDrawer(),
appBar: PreferredSize( appBar: PreferredSize(
preferredSize: const Size.fromHeight(60), preferredSize: const Size.fromHeight(60),
child: AppBar( child: AppBar(
centerTitle: true, centerTitle: true,
backgroundColor: const Color.fromARGB(255, 135, 63, 243), backgroundColor: const Color.fromARGB(255, 7, 218, 77),
title: const Padding( title: const Padding(
padding: EdgeInsets.only(top: 10.0), padding: EdgeInsets.only(top: 10.0),
child: Text( child: Text(
...@@ -48,15 +78,117 @@ class _ReportPageState extends State<ReportPage> { ...@@ -48,15 +78,117 @@ class _ReportPageState extends State<ReportPage> {
const IconThemeData(color: Color.fromARGB(255, 247, 213, 255)), const IconThemeData(color: Color.fromARGB(255, 247, 213, 255)),
), ),
), ),
body: Container( body: StreamBuilder<QuerySnapshot>(
height: double.maxFinite, stream: FirebaseFirestore.instance
width: double.maxFinite, .collection('results')
padding: const EdgeInsets.only(top: 50), .where('userid', isEqualTo: 101)
child: Column( .snapshots(),
mainAxisAlignment: MainAxisAlignment.start, builder:
children: [aboutUsSection], (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return Text('Loading...');
return ListView(
children: snapshot.data!.docs.map((DocumentSnapshot document) {
Map<String, dynamic> data =
document.data()! as Map<String, dynamic>;
if (data['ear'] == "Right") {
if (data['percentage'] < 50) {
return Padding(
padding: EdgeInsets.only(
left: 120,
top: 50,
right: 50,
),
child: Text(
"Ear: " +
data['ear'] +
"\n" +
"percentage: " +
data['percentage'].toStringAsFixed(2) +
'\n\n' +
"Do ABR or OBE Test from Hospital",
style: TextStyle(
fontSize: 20.0,
color: Color.fromARGB(213, 243, 23, 23)),
),
);
} else {
return Padding(
padding: EdgeInsets.only(
left: 120,
top: 50,
right: 30,
),
child: Text(
"Ear: " +
data['ear'] +
"\n" +
"percentage: " +
data['percentage'].toStringAsFixed(2) +
'\n\n' +
"Right ear is fine",
style: TextStyle(
fontSize: 20.0,
color: Color.fromARGB(214, 4, 184, 46)),
),
);
}
}
;
if (data['ear'] == "Left") {
if (data['percentage'] < 50) {
return Padding(
padding: EdgeInsets.only(
left: 120,
top: 20,
right: 50,
),
child: Text(
"Ear: " +
data['ear'] +
"\n" +
"percentage: " +
data['percentage'].toStringAsFixed(2) +
'\n\n' +
"Do ABR or OBE Test from Hospital",
style: TextStyle(
fontSize: 20.0,
color: Color.fromARGB(213, 243, 23, 23)),
),
);
} else {
return Padding(
padding: EdgeInsets.only(
left: 120,
top: 20,
right: 30,
), ),
child: Text(
"Ear: " +
data['ear'] +
"\n" +
"percentage: " +
data['percentage'].toStringAsFixed(2) +
'\n\n' +
"Left ear is fine",
style: TextStyle(
fontSize: 20.0,
color: Color.fromARGB(214, 4, 184, 46)),
), ),
); );
} }
}
;
return ListTile(
title: Text("Ear: " +
data['ear'] +
"\n" +
"percentage: " +
data['percentage'].toStringAsFixed(2)),
subtitle: Text(data['percentage'].toString()),
);
}).toList(),
);
},
));
}
} }
...@@ -78,6 +78,23 @@ class _SoundPageState extends State<SoundPage> { ...@@ -78,6 +78,23 @@ class _SoundPageState extends State<SoundPage> {
), ),
body: Column( body: Column(
children: [ children: [
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Text(
"-WARNING-",
style: TextStyle(
color: Colors.red,
fontSize: 20.0,
),
),
),
Text(
"- Adjust your volume before testing -",
style: TextStyle(
color: Colors.red,
fontSize: 18.0,
),
),
Expanded( Expanded(
child: ListView.builder( child: ListView.builder(
itemCount: musicList.length, itemCount: musicList.length,
...@@ -117,10 +134,10 @@ class _SoundPageState extends State<SoundPage> { ...@@ -117,10 +134,10 @@ class _SoundPageState extends State<SoundPage> {
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [ children: [
Container( Container(
height: 60.0, height: 50.0,
width: 60.0, width: 50.0,
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6.0), borderRadius: BorderRadius.circular(8.0),
image: DecorationImage( image: DecorationImage(
image: NetworkImage(currentCover))), image: NetworkImage(currentCover))),
), ),
......
...@@ -4,6 +4,8 @@ import '../components/custom_page_route.dart'; ...@@ -4,6 +4,8 @@ import '../components/custom_page_route.dart';
import '/screens/homeMain.dart'; import '/screens/homeMain.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'login.dart';
class Splash extends StatefulWidget { class Splash extends StatefulWidget {
const Splash({Key? key}) : super(key: key); const Splash({Key? key}) : super(key: key);
@override @override
...@@ -32,8 +34,10 @@ class _SplashState extends State<Splash> with SingleTickerProviderStateMixin { ...@@ -32,8 +34,10 @@ class _SplashState extends State<Splash> with SingleTickerProviderStateMixin {
_navigatetohome() async { _navigatetohome() async {
await Future.delayed(const Duration(milliseconds: 2500), () {}); await Future.delayed(const Duration(milliseconds: 2500), () {});
Navigator.pushReplacement(context, Navigator.pushReplacement(
CustomPageRoute(child: const Home(), direction: AxisDirection.left)); context,
CustomPageRoute(
child: const LoginPage(), direction: AxisDirection.left));
} }
@override @override
......
import 'package:flutter/material.dart';
class AccountButton extends StatelessWidget {
final String text;
final VoidCallback onTap;
const AccountButton({
Key? key,
required this.text,
required this.onTap,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Expanded(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 10),
height: 40,
decoration: BoxDecoration(
border: Border.all(color: Colors.white, width: 0.0),
borderRadius: BorderRadius.circular(50),
color: Colors.white,
),
child: OutlinedButton(
style: ElevatedButton.styleFrom(
primary: Colors.black12.withOpacity(0.03),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(50),
),
),
onPressed: onTap,
child: Text(
text,
style: const TextStyle(
color: Colors.black,
fontWeight: FontWeight.normal,
),
),
),
),
);
}
}
import 'package:flutter/material.dart';
class CustomButton extends StatelessWidget {
final String text;
final VoidCallback onTap;
final Color? color;
const CustomButton({
Key? key,
required this.text,
required this.onTap,
this.color,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ElevatedButton(
child: Text(
text,
style: TextStyle(
color: color == null ? Colors.white : Colors.black,
),
),
onPressed: onTap,
style: ElevatedButton.styleFrom(
minimumSize: const Size(double.infinity, 50),
primary: color,
),
);
}
}
// This widget will draw header section of all page. Wich you will get with the project source code.
import 'package:flutter/material.dart';
class HeaderWidget extends StatefulWidget {
final double _height;
final bool _showIcon;
final IconData _icon;
const HeaderWidget(this._height, this._showIcon, this._icon, {Key? key})
: super(key: key);
@override
_HeaderWidgetState createState() =>
_HeaderWidgetState(_height, _showIcon, _icon);
}
class _HeaderWidgetState extends State<HeaderWidget> {
double _height;
bool _showIcon;
IconData _icon;
_HeaderWidgetState(this._height, this._showIcon, this._icon);
@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
return Container(
child: Stack(
children: [
ClipPath(
child: Container(
decoration: new BoxDecoration(
gradient: new LinearGradient(
colors: [
Theme.of(context).primaryColor.withOpacity(0.4),
Theme.of(context).accentColor.withOpacity(0.4),
],
begin: const FractionalOffset(0.0, 0.0),
end: const FractionalOffset(1.0, 0.0),
stops: [0.0, 1.0],
tileMode: TileMode.clamp),
),
),
clipper: new ShapeClipper([
Offset(width / 5, _height),
Offset(width / 10 * 5, _height - 60),
Offset(width / 5 * 4, _height + 20),
Offset(width, _height - 18)
]),
),
ClipPath(
child: Container(
decoration: new BoxDecoration(
gradient: new LinearGradient(
colors: [
Theme.of(context).primaryColor.withOpacity(0.4),
Theme.of(context).accentColor.withOpacity(0.4),
],
begin: const FractionalOffset(0.0, 0.0),
end: const FractionalOffset(1.0, 0.0),
stops: [0.0, 1.0],
tileMode: TileMode.clamp),
),
),
clipper: new ShapeClipper([
Offset(width / 3, _height + 20),
Offset(width / 10 * 8, _height - 60),
Offset(width / 5 * 4, _height - 60),
Offset(width, _height - 20)
]),
),
ClipPath(
child: Container(
decoration: new BoxDecoration(
gradient: new LinearGradient(
colors: [
Theme.of(context).primaryColor,
Theme.of(context).accentColor,
],
begin: const FractionalOffset(0.0, 0.0),
end: const FractionalOffset(1.0, 0.0),
stops: [0.0, 1.0],
tileMode: TileMode.clamp),
),
),
clipper: new ShapeClipper([
Offset(width / 5, _height),
Offset(width / 2, _height - 40),
Offset(width / 5 * 4, _height - 80),
Offset(width, _height - 20)
]),
),
Visibility(
visible: _showIcon,
child: Container(
height: _height - 40,
child: Center(
child: Container(
margin: EdgeInsets.all(20),
padding: EdgeInsets.only(
left: 5.0,
top: 20.0,
right: 5.0,
bottom: 20.0,
),
decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(20),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(100),
topRight: Radius.circular(100),
bottomLeft: Radius.circular(60),
bottomRight: Radius.circular(60),
),
border: Border.all(width: 5, color: Colors.white),
),
child: Icon(
_icon,
color: Colors.white,
size: 40.0,
),
),
),
),
),
],
),
);
}
}
class ShapeClipper extends CustomClipper<Path> {
List<Offset> _offsets = [];
ShapeClipper(this._offsets);
@override
Path getClip(Size size) {
var path = new Path();
path.lineTo(0.0, size.height - 20);
// path.quadraticBezierTo(size.width/5, size.height, size.width/2, size.height-40);
// path.quadraticBezierTo(size.width/5*4, size.height-80, size.width, size.height-20);
path.quadraticBezierTo(
_offsets[0].dx, _offsets[0].dy, _offsets[1].dx, _offsets[1].dy);
path.quadraticBezierTo(
_offsets[2].dx, _offsets[2].dy, _offsets[3].dx, _offsets[3].dy);
// path.lineTo(size.width, size.height-20);
path.lineTo(size.width, 0.0);
path.close();
return path;
}
@override
bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}
import 'package:flutter/material.dart';
class SingleProduct extends StatelessWidget {
final String image;
const SingleProduct({
Key? key,
required this.image,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: DecoratedBox(
decoration: BoxDecoration(
border: Border.all(
color: Colors.black12,
width: 1.5,
),
borderRadius: BorderRadius.circular(5),
color: Colors.white,
),
child: Container(
width: 180,
padding: const EdgeInsets.all(10),
child: Image.network(
image,
fit: BoxFit.fitHeight,
width: 180,
),
),
),
);
}
}
import 'package:auditoryflutter/models/geoPoint.dart';
import 'package:auditoryflutter/models/nearby.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
class NearcyLocationApi {
static NearcyLocationApi? _instance;
NearcyLocationApi._();
static NearcyLocationApi? get instance {
if (_instance == null) {
_instance = NearcyLocationApi._();
}
return _instance;
}
Future<List<Nearby>> getNearby(
{GeoPoint? position,
double? radius,
String? type,
String? keyword}) async {
String url =
'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${position!.latitude},${position.longitude}&radius=$radius&type=$type&keyword=$keyword&key=AIzaSyDl3W5L-KXzVcU3z90JgYylyNw8zL3IY6U';
http.Response response = await http.get(Uri.parse(url));
final values = jsonDecode(response.body);
final List result = values['results'];
print(result);
return result.map((e) => Nearby.fromJson(e)).toList();
}
}
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