Search code examples
flutterdartcalendarsyncfusionsyncfusion-calendar

Instance member '' can't be accessed using static access


I am trying to insert an event into a syncfusion flutter calendar by following this youtube tutorial but I did not want to use a provider as they had. I tried to write my main add/edit event code like this:

class EditEventsPage extends StatefulWidget {
  final Events? event;

  const EditEventsPage({Key? key, this.event}) : super(key: key);

  @override
  _EditEventsPageState createState() => _EditEventsPageState();
}

class _EditEventsPageState extends State<EditEventsPage> {
  final _formKey = GlobalKey<FormState>();
  final titleController = TextEditingController();
  late DateTime fromDate;
  late DateTime toDate;

  @override
  void initState() {
    super.initState();
    if (widget.event == null) {
      fromDate = DateTime.now();
      toDate = DateTime.now().add(Duration(hours: 4));
    }
  }

  @override
  void dispose() {
    titleController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Color(0xFF1c3f77),
        elevation: 0,
        leading: CloseButton(),
        actions: buildEditingActions(),
      ),
      body: SingleChildScrollView(
        padding: EdgeInsets.all(12),
        child: Form(
            key: _formKey,
            child: Column(mainAxisSize: MainAxisSize.min, children: <Widget>[
              buildTitle(),
              SizedBox(height: 25),
              buildDateTime(),
            ])),
      ),
    );
  }



  List<Widget> buildEditingActions() => [
        ElevatedButton.icon(
          style: ElevatedButton.styleFrom(
              primary: Colors.transparent, shadowColor: Colors.transparent),
          icon: Icon(Icons.done),
          label: Text(
            'Add',
            style: TextStyle(color: Colors.white, fontSize: 15),
          ),
          onPressed: saveEvent,
        )
      ];

  Widget buildTitle() => TextFormField(
        style: TextStyle(fontSize: 15),
        decoration:
            InputDecoration(border: UnderlineInputBorder(), hintText: 'Title'),
        onFieldSubmitted: (_) => saveEvent(),
        validator: (title) =>
            title != null && title.isEmpty ? 'Title cannot be empty' : null,
        controller: titleController,
      );

In order to add an event, the code is :

Future saveEvent() async {
    final isValid = _formKey.currentState!.validate();

    if (isValid) {
      final event = Events(
        title: titleController.text,
        details: 'testing 1 2 3',
        from: fromDate,
        to: toDate,
        isAllday: false,
      );

      InsertEvent.addEvent(event);
      Navigator.of(context).pop();
    }
  }

InsertEventClass Code:

class InsertEvent {
  final List<Events> _events = [];
  List<Events> get events => _events;

  void addEvent(Events event) {
    _events.add(event);
  }
}

However, it gives me an error that the "Instance member 'addEvent' can't be accessed using static access". Can someone explain why this occurred and how it can be fixed?


Solution

  • Based on the shared information, we have checked the mentioned issue “Instance member '' can't be accessed using static access”. In the shared code snippet, you have called the method without creating an instance for the class, so you got this error. Also, we have a KB document for adding the appointment to the calendar using the Appointment editor. Please find the KB from the following link.

    KB link: https://www.syncfusion.com/kb/11204/how-to-design-and-configure-your-appointment-editor-in-flutter-calendar

    Also, we have a KB document for adding appointments to the calendar using onTap callback.

    KB link: https://www.syncfusion.com/kb/12300/how-to-add-the-appointments-using-the-ontap-callback-in-the-flutter-calendar

    Also, we have a KB document for removing the tapped appointment. Please find the documentation from the following link.

    KB link: https://www.syncfusion.com/kb/11522/how-to-delete-an-appointment-in-the-flutter-calendar