当前位置: 首页 > 知识库问答 >
问题:

在flutter中点击WebView输入外时关闭键盘

夏侯星洲
2023-03-14

我在这方面工作了4个多小时,无法通过。我试图做的是在输入焦点区域外敲击时隐藏键盘。不知何故,键盘无法隐藏。

我尝试了StackOverflow上所有可能的答案,但无法找到解决方案。

// ignore_for_file: prefer_const_constructors
// ignore: use_key_in_widget_constructors
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:flutter/services.dart';
 
void main(){
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    statusBarColor: Color(0xff1e2229)
  ));
   runApp(MyApp());
}

 
class MyApp extends StatelessWidget {
 
  @override
  Widget build(BuildContext context) {
    return  MaterialApp(
            debugShowCheckedModeBanner: false,
            home:  Scaffold(
                       body:WebViewClass()        
                            ),
            );
  
  }
}
 
class WebViewClass extends StatefulWidget {
  WebViewState createState() => WebViewState();
}

class WebViewState extends State<WebViewClass> {

  bool isLoading = false;

  final key = UniqueKey();
  
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
         onTap: () {
            FocusScopeNode currentFocus = FocusScope.of(context);
            if (!currentFocus.hasPrimaryFocus) {
              currentFocus.unfocus();
            }
           },
        child: Scaffold(
                appBar: null,
                body: SafeArea(
                    child: IgnorePointer(
                      ignoring: isLoading,
                      child: Stack(
                        children: [
                          WebView(
                            initialUrl: 'https://google.com',
                            javascriptMode: JavascriptMode.unrestricted,
                            key: key,
                            onPageFinished: (value) {
                              setState(() {
                                isLoading = false;
                              });
                            },
                            onPageStarted: (value) {
                              setState(() {
                                isLoading = true;
                              });
                            },
                          ),
                          isLoading ? Container(
                            width: MediaQuery.of(context).size.width,
                            height: MediaQuery.of(context).size.height,
                            color: Colors.grey.withOpacity(0.5),
                            child: const Center(child: CircularProgressIndicator())  ,
                          ) : Container(),
                        ],
                      ),
                    )),));

  }
}

如果有人指导我解决这个问题,那就太好了。

共有1个答案

呼延俊风
2023-03-14

请在有状态小部件的initstate中使用此代码。

 if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
 类似资料:
  • 问题内容: 我在try / catch块中有以下代码 我的问题是,当我必须在finally块中关闭这些流时,是否必须关闭所有3个流,或者仅关闭 befferedreader 会关闭所有其他流? 问题答案: 按照惯例,包装流(用于包装现有流)在关闭时会关闭基础流,因此仅在示例中必须关闭。而且,关闭已经关闭的流通常是无害的,因此关闭所有3个流都不会受到伤害。

  • 我有一个片段,其中包含一个ViewPager2的2个fragemnt。在第二个子片段中,我有一个回收器视图,其视图保持器包含 TextView 和 EditText。 在模拟器中,当我点击编辑视图时,软键盘一直关闭。 在真实设备(索尼xperia XA)中,软键盘没有关闭,但它总是关注第一个编辑文本,无论我是否在另一个编辑文本中单击 我曾尝试使用android:WindowsOfInputMode

  • 我是图形用户界面的新手,在以下问题上有困难。我有3个JTextFields,信用卡号码,有效期和安全号码。我可以将信息输入到字段中。我还为每个按钮实现了焦点侦听器。如果我单击它,它会显示获得焦点,如果我单击其他任何地方,它会失去焦点。在这些文本字段下,我有一个数字键盘(触摸屏/鼠标单击)来输入数字。我如何保持对特定文本字段的焦点,直到仅特定地单击另外两个文本字段中的一个?一旦我尝试单击输入数字,当

  • 今天我试着在iPod(iOS 6.1.3)上运行我的代码,我在这里发现了一些有趣的东西。。。 首先,当我点击textfield时,键盘会出现,但当我点击文本字段以外的其他地方时,键盘不会隐藏。 所以我决定谷歌搜索并找到这个解决方案: 它工作了…它在键盘底部给出了一个“完成”按钮,现在可以通过按下它来隐藏键盘。 但我这里有2个问题: < li >键盘仅在点击"完成"按钮时隐藏。而不是通过点击文本字段

  • 问题内容: 我有一个jQuery UI对话框,当单击特定元素时会显示该对话框。如果在那些触发元素或对话框本身之外的任何地方都单击了鼠标,我想关闭对话框。 这是打开对话框的代码: 如果我取消最后一部分的注释,该对话框将永远不会打开。我认为这是因为打开对话框的同一点击再次将其关闭。 最后的工作代码 注意:这是使用 jQuery外部事件插件 问题答案: 查看jQuery Outside Events插件

  • 我有一个按钮和编辑文本。当用户在编辑文本中完成输入并按下按钮时,我想关闭我的软键盘。 或它的任何指南或参考链接。