Как я могу инициализировать провайдера? - PullRequest
0 голосов
/ 10 июня 2019

В моем приложении реализован поставщик управления состоянием.Теперь мне нужно добавить некоторые данные в класс после загрузки экрана.

Как мне этого добиться?

stepInfo.addToList = new VaccStep ();// Нужно вызвать его один раз после загрузки экрана.

Я пытался вызвать этот метод из initState, но он выдает ошибку !!

    class AdminAddVaccination extends StatefulWidget {
      @override
      State createState() => new AdminAddVaccinationState();
    }

    class AdminAddVaccinationState extends State<AdminAddVaccination> {

      @override
      void initState() {
        super.initState();
        var stepInfo = Provider.of<StepInfo>(context); // ERROR!!
        stepInfo.addToList = new VaccStep(); // ERROR!!
      }

      Widget build(BuildContext context) {
        return new ChangeNotifierProvider(
          builder: (context) => StepInfo(),
          child: ScreenBody(),
        );
      }
    }

    class ScreenBody extends StatelessWidget {


      @override
      Widget build(BuildContext context) {
        var stepInfo = Provider.of<StepInfo>(context);

        return new Scaffold(
            resizeToAvoidBottomPadding: false,
            key: stepInfo.scaffoldKey,
            body: new GestureDetector(
                onTap: () {
                  FocusScope.of(context).requestFocus(new FocusNode());
                },
                child: new SafeArea(
                  top: true,
                  bottom: false,
                  child: new Stack(children: <Widget>[
                    new Opacity(
                      opacity: 0.04,
                      child: new Image.asset(
                        "assets/userProfile/heartBeat.png",
                        fit: BoxFit.cover,
                        height: 250.0,
                      ),
                    ),
                    new Column(
                      mainAxisAlignment: MainAxisAlignment.start,
                      crossAxisAlignment: CrossAxisAlignment.center,
                      children: <Widget>[
                        new Container(
                          color: primaryGreen,
                          width: double.infinity,
                          height: 65.0,
                          child: new Stack(
                            children: <Widget>[
                              new Align(
                                  alignment: Alignment.center,
                                  child: stepInfo.loading
                                      ? JumpingText('......')
                                      : new Container()),
                              new Align(
                                alignment: Alignment.centerLeft,
                                child: new Padding(
                                  padding: EdgeInsets.only(top: 5.0, left: 20.0),
                                  child: new InkWell(
                                    child: new Container(
                                      child: Icon(
                                        Icons.arrow_back,
                                        color: Colors.white,
                                        size: 30.0,
                                      ),
                                    ),
                                    onTap: () {
                                      Navigator.pop(context);
                                    },
                                  ),
                                ),
                              ),
                            ],
                          ),
                        ),
                        new Padding(
                          padding: EdgeInsets.only(top: 0.0),
                          child: new Material(
                            elevation: 1.0,
                            color: Colors.transparent,
                            child: new Container(
                              color: borderColor,
                              width: double.infinity,
                              height: 5.0,
                            ),
                          ),
                        ),
                        VaccName(),
                      ],
                    ),
                    ItemListing(),
                    AddStep(),
                  ]),
                )));
      }
    }

    Error!!
    flutter: The following ProviderNotFoundError was thrown building 
    Builder:
    flutter: Error: Could not find the correct Provider<StepInfo> above this AdminAddVaccination Widget
    flutter:
    flutter: To fix, please:
    flutter:
    flutter:   * Ensure the Provider<StepInfo> is an ancestor to this AdminAddVaccination Widget
    flutter:   * Provide types to Provider<StepInfo>
    flutter:   * Provide types to Consumer<StepInfo>
    flutter:   * Provide types to Provider.of<StepInfo>()
    flutter:   * Always use package imports. Ex: `import 'package:my_app/my_code.dart';
...