When I run my program I get an error that says this:
Error: Could not find the correct Provider<EventsServices> above this FormPage Widget
And it says this was in the stack:
When the exception was thrown, this was the stack:
#0 Provider._inheritedElementOf (package:provider/src/provider.dart:332:7)
#1 Provider.of (package:provider/src/provider.dart:284:30)
#2 ReadContext.read (package:provider/src/provider.dart:610:21)
#3 _FormPageState.build.<anonymous closure> (package:localeventsapp/ui/homepage/form_widget.dart:204:29)
#4 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:991:20)
...
Handler: "onTap"
Recognizer: TapGestureRecognizer#edec2
debugOwner: GestureDetector
state: possible
won arena
finalPosition: Offset(203.4, 442.0)
finalLocalPosition: Offset(59.2, 21.6)
button: 1
sent tap down
====================================================================================================
The error points to this dart file I'm using as a form to collect some information that I want to append to Firebase Firestore but it won't store the data there because of this error I'm assuming.
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:date_time_picker/date_time_picker.dart';
import 'package:localeventsapp/events_services.dart';
import 'package:localeventsapp/model/Firebase_eventID.dart';
import 'package:provider/provider.dart';
CollectionReference userEvents = FirebaseFirestore.instance.collection("Events");
FirebaseAuth auth = FirebaseAuth.instance;
String uid = auth.currentUser.uid.toString();
class FormPage extends StatefulWidget {
@override
_FormPageState createState() => _FormPageState();
}
class _FormPageState extends State<FormPage> {
final TextEditingController eventNameController = TextEditingController();
final TextEditingController locationController = TextEditingController();
final TextEditingController descriptionController = TextEditingController();
final TextEditingController creatorController = TextEditingController();
String categoryID;
int dateTime;
// final TextEditingController dateController = TextEditingController();
final GlobalKey<_FormPageState> _formKey = GlobalKey<_FormPageState>();
Widget _buildName() {
return TextFormField(
controller: eventNameController,
decoration: InputDecoration(
labelText: 'Event Name',
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(15.0))),
validator: (String value) {
if (value.isEmpty) {
return 'Name is required';
}
return null;
},
);
}
Widget _buildLocation() {
return TextFormField(
controller: locationController,
decoration: InputDecoration(
labelText: 'Location',
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(15.0))),
validator: (String value) {
if (value.isEmpty) {
return 'Location is required';
}
return null;
},
);
}
Widget _buildDescription() {
return TextFormField(
controller: descriptionController,
decoration: InputDecoration(
labelText: 'Description',
border:
OutlineInputBorder(borderRadius: BorderRadius.circular(15.0))),
validator: (String value) {
if (value.isEmpty) {
return 'Description is required';
}
return null;
},
);
}
Widget _buildCategory() {
return DropdownButtonFormField<String>(
items: [
DropdownMenuItem<String>(
child: Text('Music'),
value: '1',
),
DropdownMenuItem<String>(
child: Text('Meet up'),
value: '2',
),
DropdownMenuItem<String>(
child: Text('Golf'),
value: '3',
),
DropdownMenuItem<String>(
child: Text('Birthday'),
value: '4',
),
DropdownMenuItem<String>(
child: Text('Cook Out'),
value: '5',
),
],
onChanged: (String value) {
setState(() {
categoryID = value;
});
},
value: categoryID,
hint: Text('Category'),
);
}
Widget _buildDate() {
DateTime currentDate = DateTime.now();
DateTimePicker(
type: DateTimePickerType.dateTimeSeparate,
dateMask: 'd MMM, yyyy',
initialValue: DateTime.now().toString(),
firstDate: DateTime(2000),
lastDate: DateTime(2100),
icon: Icon(Icons.event),
dateLabelText: 'Date',
timeLabelText: "Time",
onChanged:
(val) => print(val),
validator: (val) {
print(val);
return null;
},
onSaved: (val) => print(val),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Create Event'), backgroundColor: Color(0xFF6F35A5)),
body: Container(
margin: EdgeInsets.all(24),
child: Form(
key: _formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_buildName(),
SizedBox(height: 10),
_buildLocation(),
SizedBox(height: 10),
_buildDescription(),
SizedBox(height: 10),
Row(
children: [
Align(
alignment: Alignment.bottomLeft,
child: Container(width:100, child: _buildCategory()),
),
Spacer(),
Align(
alignment: Alignment.bottomRight ,
child: Container(width: 200, child: _buildDate()),
),
],
),
//_buildGuests(),
SizedBox(height: 1),
ElevatedButton(
child: Text('Create Event',
style: TextStyle(
color: Colors.black,
fontSize: 16,
)),
onPressed: () {
context.read<EventsServices>().addEvent(
eventName: eventNameController.text.trim(),
location: locationController.text.trim(),
description: descriptionController.text.trim(),
category: categoryID.trim(),
// dateTime: dateTime,
creatorUID: uid,
);
}),
],
),
),
),
);
}
}
I'm relatively new to Flutter so I'm not sure what I need to do. Any ideas?