Flutter实现WebView返回功能时报createState未实现错误排查
问题原因
- 报错
Missing concrete implementation of 'StatefulWidget.createState'的核心诱因是方法名大小写错误:Dart是严格大小写敏感的语言,你代码中重写的方法写的是createstate()(state首字母小写),和StatefulWidget要求必须实现的createState()(State首字母大写)不是同一个方法,框架无法识别到你重写了该方法,因此抛出缺失实现的错误。 - 上述错误直接导致
_HomePageState没有被正常挂载初始化,_webViewController的赋值、WebView回退拦截逻辑全部未生效,因此点击返回键时不会触发页面内回退,直接退出了当前页面,和代码缩进没有关系。
修复方案
只需要把createstate的方法名修正为正确的createState即可,修复后的完整可运行代码如下:
import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; class HomePage extends StatefulWidget { const HomePage({Key? key}) : super(key: key); // 修正方法名大小写:createState 而非 createstate @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { late WebViewController _webViewController; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( toolbarHeight: 0, ), body: WillPopScope( onWillPop: () async { // 可补充空判断避免极端场景空异常 if (await _webViewController.canGoBack()) { _webViewController.goBack(); return false; } else { return true; } }, child: WebView( initialUrl: 'https://www.example.com', javascriptMode: JavascriptMode.unrestricted, onWebViewCreated: (WebViewController controller) { _webViewController = controller; }, ), ), ); } }
排查提示
- 写重写方法时不要忽略IDE的语法提示:如果方法名和父类方法不匹配,
@override注解会标红提示,不要跳过这类告警直接运行代码。 - 涉及空安全的
late修饰变量,建议在调用前增加非空判断,避免组件未完成初始化时调用方法触发运行时异常。
内容的提问来源于stack exchange,提问作者Avnit Kumar
相关产品推荐
相关产品推荐

