Search code examples
flutterwebviewflutter-showmodalbottomsheet

Why can't I scroll custom WebView in Flutter ModalBottomSheet


Hey guys anyone know why I can't scroll vertically the WebView in my ModalBottomSheet? This is my code, please let me know if anything wrong or give me some advice.

showModalBottomSheet(
      context: context,
      isScrollControlled: true,
      backgroundColor: Colors.transparent,
      builder: (context) => Container(
        height: MediaQuery.of(context).size.height * 0.75,
        decoration: new BoxDecoration(
          color: Colors.white,
          borderRadius: new BorderRadius.only(
            topLeft: const Radius.circular(25.0),
            topRight: const Radius.circular(25.0),
          ),
        ),
        child: Padding(
          padding: EdgeInsets.fromLTRB(0, 23, 0, 0),
          child: WebView(
              initialUrl: 'https://www.sicepat.com/checkAwb/',
              javascriptMode: JavascriptMode.unrestricted,
              onWebViewCreated: (controller) {
                _myController = controller;
              },
          onPageFinished: (initialUrl) {
            _myController.evaluateJavascript("document.getElementsByClassName('ws-header-container')[0].style.display='none';");
            _myController.evaluateJavascript("document.getElementsByClassName('ws-footer-page')[0].style.display='none';");
          },
        )
        ),
      ),
    ); 

Solution

  • Try to use gestureRecognizers and set the WebView key

    Old Version:

    final Set<Factory> gestureRecognizers = [Factory(() => EagerGestureRecognizer())].toSet();
    
    UniqueKey _key = UniqueKey();
    
    ...
    

    New Version:

    final Set<Factory<OneSequenceGestureRecognizer>> gestureRecognizers = {
      Factory(() => EagerGestureRecognizer())
    };
    
    UniqueKey _key = UniqueKey();
    
    WebView(
      key: _key, // <= Add UniqueKey here.
      initialUrl: 'https://www.sicepat.com/checkAwb/',
      javascriptMode: JavascriptMode.unrestricted,
      gestureRecognizers: gestureRecognizers, // <= Add gestureRecognizers here.
      onWebViewCreated: (controller) {
       _myController = controller;
      },
      onPageFinished: (initialUrl) {
       _myController.evaluateJavascript("document.getElementsByClassName('ws-header-container')[0].style.display='none';");
       _myController.evaluateJavascript("document.getElementsByClassName('ws-footer-page')[0].style.display='none';");
      },
    )