Необработанное исключение: ошибка: не удалось найти правильный поставщик <CrudModel>над этим виджетом Builder - PullRequest
0 голосов
/ 08 января 2020

У меня проблема с использованием провайдера флаттера. Есть AlertDialog, который активируется, когда я нажимаю плавающую кнопку. Я нажимаю кнопку «Сохранить» в AlertDialog, и затем текст должен быть добавлен в мой предметный класс модели. После этого этот класс модели должен быть добавлен в Provider, но он не работает.

  @override
  Widget build(BuildContext context)
  {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text('Subjects'),
        ),
      body: listView(),
      floatingActionButton: new FloatingActionButton(
        onPressed: () {
          _alertDialog(context);
        },
        child: Icon(Icons.add),
      ),
    );
  }


  _alertDialog(BuildContext context) async {
    _textEditingController.clear();
    await showDialog<String>(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            content: new Row(
              children: <Widget>[
                new Expanded(
                  child: TextField(
                  controller: _textEditingController,
                  style: new TextStyle(fontSize: 20.0),
                  decoration: new InputDecoration(
                    labelText: 'Add new subject',
                  ),
                ),
                )
              ],
            ),
            actions: <Widget>[
              new FlatButton(
                child: const Text('Cancel'),
                onPressed: () {
                  Navigator.of(context).pop();
                },
              ),
              new  FlatButton(
                child: const Text('Save'),
                onPressed: ()
                async {
                  var subjectProvider = Provider.of<CrudModel>(context, listen: false);
                  subject = new Subject(_textEditingController.text.toString(), "homework");
                  await subjectProvider.addSubject(subject);
                  setState(() {
                    listSub.add(subject);
                  });  
                  Navigator.of(context).pop();
                },
              )
            ],
          );
        });
  }
...