wow_web_page.dart 2.33 KB
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:limiting_direction_csx/limiting_direction_csx.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:wow_english/common/widgets/we_app_bar.dart';

class WowWebViewPage extends StatefulWidget {
  const WowWebViewPage({super.key, required this.urlStr, required this.webViewTitle});

  final String urlStr;
  final String webViewTitle;

  @override
  State<StatefulWidget> createState() {
    return _WowWebViewPageState();
  }
}

class _WowWebViewPageState extends State<WowWebViewPage> {

  late final WebViewController _controller;

  @override
  void initState() {
    super.initState();

    if (Platform.isIOS) {
      LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.PortraitUpsideDown);
    } else {
      SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
    }

    final WebViewController controller =WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setBackgroundColor(const Color(0x00000000))
      ..setNavigationDelegate(
        NavigationDelegate(
          onProgress: (int progress) {
            // Update loading bar.
          },
          onPageStarted: (String url) {
            EasyLoading.show();
          },
          onPageFinished: (String url) {
            EasyLoading.dismiss();
          },
          onWebResourceError: (WebResourceError error) {
            EasyLoading.showError(error.description);
          },
          onNavigationRequest: (NavigationRequest request) {
            return NavigationDecision.navigate;
          },
        ),
      )
      ..loadRequest(Uri.parse(widget.urlStr));
    _controller = controller;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: WEAppBar(
        titleText: widget.webViewTitle,
      ),
      body: WebViewWidget(controller: _controller,),
    );
  }

  @override
  void deactivate() {
    super.deactivate();
    if (Platform.isIOS) {
      LimitingDirectionCsx.setScreenDirection(DeviceDirectionMask.Landscape);
    } else {
      SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft,DeviceOrientation.landscapeRight]);
    }
  }
}