您可以使用runJavascriptReturningResult 或runJavascript 方法而不是webviewcontroller
Return true if find a result or false (non-case search)
_controller!.runJavascriptReturningResult("self.find('bootstrap')")
.then((value) => print(value));
区分大小写的搜索
_controller!.runJavascript("self.find('Hi',{'CaseSensitive':true})");
语法 window.find(aString, aCaseSensitive, aBackwards, aWrapAround,
aWholeWord, aSearchInFrames, aShowDialog);复制到剪贴板 aString 要搜索的文本字符串。
aCaseSensitive 一个布尔值。如果为真,则指定区分大小写
搜索。
aBackwards 一个布尔值。如果为 true,则指定向后搜索。
aWrapAround 一个布尔值。如果为 true,则指定环绕搜索。
aWholeWord 未实现 一个布尔值。如果为真,则指定一个整体
词搜索。这没有实施;请参阅错误 481513。
aSearchInFrames 一个布尔值。如果为真,则指定搜索
帧。
如果找到字符串则返回true;否则为假。
mdn page
示例代码
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(),
body: Center(
child: Column(
children: [
Container(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: TextField(
onChanged: (v) {
// _controller!
// .runJavascriptReturningResult(
// "self.find('${_textcontrol.text}')")
// .then((value) => print(value));
},
controller: _textcontrol,
decoration: InputDecoration(
hintText: 'Search', border: OutlineInputBorder()),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 55,
child: ElevatedButton(
onPressed: () {
var casesensitive =
"self.find('${_textcontrol.text}',{'CaseSensitive':true})";
var noncase = "self.find('${_textcontrol.text}')";
_controller!.runJavascript(noncase);
// .then((value) => print(value));
},
child: Icon(
Icons.search,
size: 45,
)),
),
)
],
),
)),
Expanded(
child: MyHomePage(
title: '',
))
],
),
),
),
);
}
}
WebViewController? _controller;
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
Color appBarcolor = Colors.blue;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
var _textcontrol = TextEditingController();
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
if (Platform.isAndroid) WebView.platform = AndroidWebView();
}
@override
Widget build(BuildContext context) {
return controller();
}
WebView controller() {
return WebView(
javascriptMode: JavascriptMode.unrestricted,
initialUrl: 'https://getbootstrap.com/',
onWebViewCreated: (WebViewController webViewController) {
_controller = webViewController;
},
navigationDelegate: (NavigationRequest request) {
setState(() {
widget.appBarcolor = Colors.black87;
});
return NavigationDecision.navigate;
},
);
}
}