Поток геттера был вызван при нулевом значении

Я пытаюсь сделать веб-просмотр и хочу получить высоту веб-просмотра, и я нашел это

Но я получаю следующую ошибку:

введите здесь описание изображения

The following NoSuchMethodError was thrown building AnnouncementWebView(dirty, state: _AnnouncementWebViewState#d4695):
The getter 'stream' was called on null.
Receiver: null
Tried calling: stream

Это мой код:

  num _stackToView = 1;
  double contentHeight = 0;
  WebViewController _webViewController;
  StreamController<double> streamController;


      body: IndexedStack(
        index: _stackToView,
        children: [
          StreamBuilder<double>(
            initialData: 100,
            stream: streamController.stream,
            builder: (context, snapshot) {
              return Container(
                height: snapshot.data,
                child: WebView(
                  javascriptMode: JavascriptMode.unrestricted,
                  initialUrl: widget.slug,
                  onPageFinished: (String url) async {
                    if (snapshot != null) {
                      double height = double.parse(
                          await _webViewController.evaluateJavascript(
                              "document.documentElement.scrollHeight;"));
                      streamController.add(height);
                    }
                    setState(() {
                      _stackToView = 0;
                    });
                  },
                  onWebViewCreated: (WebViewController c) {
                    _webViewController = c;
                  },
                ),
              );
            },
          ),
          Container(child: Center(child: CircularProgressIndicator())),
        ],
      ),

Я не знаю, почему я получаю ошибку выше. Спасибо заранее за ваше время.


person Luis Fernando Scripcaru    schedule 25.10.2020    source источник


Ответы (1)


Вы не инициализировали контроллер потока, поэтому, когда вы пытаетесь его использовать, он равен нулю.

Чтобы исправить это, инициализируйте контроллер потока в initState (и не забудьте закрыть его в dispose) или, в качестве альтернативы, забудьте о потоке и просто используйте setState с двойным полем для высоты содержимого.

person Pieter van Loon    schedule 25.10.2020