Всегда ли Flutter создает новый виджет после вызова new?

У меня есть простое приложение с отслеживанием состояния, использующее WebView, когда в первый раз вызывается новый WebView, onWebViewCreated, но когда "новый WebView" второй раз, onWebViewCreated больше не будет вызываться, onPageFinished будет вызывать каждый раз. кажется, что Flutter не будет создавать новый WebView в методе сборки, он просто повторно использует существующий WebView, это правда? пример кода:

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

void main() => runApp(MaterialApp(home: Sample()));

class Sample extends StatefulWidget {
  @override
  _SampleState createState() => _SampleState();
}
class _SampleState extends State<Sample> {
  var url = 'https://en.wikipedia.org/wiki/Kraken';
  Completer<WebViewController> _controller = Completer<WebViewController>();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(),
      body: webPage(),
      bottomNavigationBar: BottomAppBar(
        child: new Row(
          mainAxisSize: MainAxisSize.max,
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            RaisedButton(
              onPressed: () {
                if (_controller.isCompleted) {
                  setState(() {
                    url = 'https://en.wikipedia.org/wiki/Sea_monster';

                    _controller.future.then((ctrl) {
                      ctrl.loadUrl(url);
                    });
                  });
                }
              },
              child: Text('load new url'),
            ),
          ],
        ),
      ),
    );
  }

  Widget webPage() {
    print('building new Webview?');
    return new WebView(

      initialUrl: url,

      javascriptMode: JavascriptMode.unrestricted,
      // debuggingEnabled: true,
      onWebViewCreated: (WebViewController webViewController) {
        print('webview created');
        _controller.complete(webViewController);
      },
      onPageFinished: (finish) {

        print('on page finished');
        print(finish);

      },
    );
  }
}

0 ответов

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