Член экземпляра '' недоступен с использованием статического доступа

Я пытаюсь вставить событие в календарь flutter syncfusion, следуя этому руководству на YouTube, но я не хотел использовать провайдера, как они. Я попытался написать свой основной код события добавления / редактирования следующим образом:

      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,
      );

Код для добавления события:

      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:

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

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

Однако это дает мне ошибку, что «член экземпляра 'addEvent' не может быть доступен с использованием статического доступа». Может кто-нибудь объяснить, почему это произошло и как это можно исправить?

2 ответа

Решение

На основе предоставленной информации мы проверили упомянутую проблему « Экземпляр-член« не может быть доступен с использованием статического доступа ». В общем фрагменте кода вы вызвали метод без создания экземпляра для класса, поэтому вы получили эту ошибку. Кроме того, у нас есть документ базы знаний для добавления встречи в календарь с помощью редактора встреч. Найдите базу знаний по следующей ссылке.

Ссылка в КБ: https://www.syncfusion.com/kb/11204/how-to-design-and-configure-your-appointment-editor-in-flutter-calendar

Кроме того, у нас есть документ базы знаний для добавления встреч в календарь с помощью обратного вызова onTap.

Ссылка в КБ: https://www.syncfusion.com/kb/12300/how-to-add-the-appointments-using-the-ontap-callback-in-the-flutter-calendar

Кроме того, у нас есть документ базы знаний для удаления прослушанной встречи. Пожалуйста, найдите документацию по следующей ссылке.

Ссылка в КБ: https://www.syncfusion.com/kb/11522/how-to-delete-an-appointment-in-the-flutter-calendar

Вы не можете получить доступ к методу из класса, если у вас нет экземпляра класса. Вы можете просто сделать метод статическим, если хотите получить к нему доступ.

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

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

Но это, вероятно, не решит вашу проблему в одиночку. Вам нужен экземпляр класса, если вы хотите сохранить события.

Таким образом, вам нужно будет создать экземпляр в таком состоянии, как:

      var insertEventInstance = InsertEvent();

таким образом вам не нужно будет делать метод статическим, и у вас будет доступ к событиям.

Они использовали провайдера для хранения экземпляра, вы можете просто оставить его в состоянии.

Другие вопросы по тегам