import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'package:get/get.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; class WebViewPage extends StatefulWidget { final String url; final String title; const WebViewPage({Key? key, required this.url, required this.title}) : super(key: key); @override State createState() => _WebViewPageState(); } class _WebViewPageState extends State { late final WebViewController _controller; @override void initState() { super.initState(); // 控制器只建一次,放 build() 里会导致每次 rebuild(比如系统字体/主题变化、 // 上层 Obx 触发的重建)都新建一个 WebViewController 重新 loadRequest, // 原生 WebView 还没渲染完就被换掉,表现就是页面一直空白。 _controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..loadRequest(Uri.parse(widget.url)); } @override Widget build(BuildContext context) { final isDarkMode = Theme.of(context).brightness == Brightness.dark; final title = widget.title; return Scaffold( backgroundColor: isDarkMode ? Colors.black : Colors.grey[50], appBar: AppBar( backgroundColor: isDarkMode ? Colors.black : Colors.white, surfaceTintColor: Colors.transparent, elevation: 0.5, leading: IconButton( icon: Icon( Icons.arrow_back_ios, color: isDarkMode ? Colors.white : Colors.black, size: 20.sp, ), onPressed: () => Get.back(), ), title: Text( title, style: TextStyle( fontSize: 17.sp, fontWeight: FontWeight.w600, color: isDarkMode ? Colors.white : Colors.black, ), ), centerTitle: true, ), body: SafeArea( top: false, child: WebViewWidget( controller: _controller, ), ), ); } }