启动键盘时 Flutter App 冻结

Posted

技术标签:

【中文标题】启动键盘时 Flutter App 冻结【英文标题】:Flutter App freezes when keyboard is launched 【发布时间】:2020-06-26 22:25:00 【问题描述】:

我正在尝试使用 Google 地图构建一个带有颤振的 ios 应用程序。但是,当我点击搜索框并打开键盘搜索应用程序冻结的地方时,我什至无法输入。这是在模拟器中,因为我没有物理 iPhone 来测试它。我是一个颤抖的初学者,不知道出了什么问题(怀疑我搞砸了)。我对此进行了研究,发现以前版本的颤振存在 IOS 键盘滞后的问题,但没有提到应用程序被完全冻结。我对Changed 进行了评论,认为它与冻结有关。

class HomePage extends StatefulWidget 
  @override
  _HomePageState createState() => _HomePageState();


class _HomePageState extends State<HomePage> 
  Completer<GoogleMapController> _controller = Completer();

  static const LatLng _center = const LatLng(45.521563, -122.677433);

  String searchValue = "";
  String _mapStyle;

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

    rootBundle.loadString('assets/map_style.txt').then((string) 
      _mapStyle = string;
    );
  

  @override
  Widget build(BuildContext context) 
    return CupertinoPageScaffold(
        navigationBar: CupertinoNavigationBar(
          backgroundColor: GlobalAppConstants.appMainColor,
        ),
        child: GestureDetector(
          onTap:() 
            FocusScope.of(context).requestFocus(new FocusNode());
          ,
          child: Stack(
            children: <Widget>[
              Container(
                child: GoogleMap(
                  initialCameraPosition:
                      CameraPosition(target: _center, zoom: 1.0),
                  mapType: MapType.normal,
                  onMapCreated: (GoogleMapController controller) 
                    controller.setMapStyle(_mapStyle);
                    _controller.complete(controller);
                  ,
                ),
              ),
              Container(
                color: Color.fromRGBO(255, 255, 255, 0.7),
              ),
              Align(
                alignment: Alignment(0.0, -0.5),
                child: Column(
                  children: <Widget>[
                    Text(
                      'My Text',
                      style:
                          TextStyle(fontSize: 30, fontWeight: FontWeight.bold),
                    ),
                    Container(
                      padding: EdgeInsetsDirectional.only(top: 20.0),
                    ),
                    Text(
                      'Search Country',
                      style: TextStyle(
                          color: GlobalAppConstants.appMainColor,
                          fontWeight: FontWeight.bold),
                    ),
                    Container(
                      width: 140.0,
                      padding: EdgeInsetsDirectional.only(top: 0.0),
                      child: Divider(
                        thickness: 7.0,
                        color: GlobalAppConstants.appMainColor,
                      ),
                    ),
                    Container(
                      padding: EdgeInsetsDirectional.only(
                          start: 10.0, end: 10.0, top: 10.0),
                      height: 50,
                      child: CupertinoTextField(
                        placeholder: 'Search Country',
                        padding: EdgeInsets.symmetric(
                            horizontal: 10.0, vertical: 0.4),
                        prefix: Container(
                          padding: EdgeInsetsDirectional.only(start: 10.0),
                          child: Icon(
                            CupertinoIcons.search,
                            color: CupertinoColors.black,
                            size: 22.0,
                          ),
                        ),
                        decoration: BoxDecoration(
                          color: CupertinoColors.white,
                          boxShadow: [
                            BoxShadow(
                              color: CupertinoColors.black,
                            )
                          ],
                        ),
//                        onChanged: (String value) 
////                      setState(() 
////                        searchValue = value;
////                      );
//                        ,
                      ),
                    )
                  ],
                ),
              )
            ],
          ),
        ));
  

我确实添加了<key>io.flutter.embedded_views_preview</key> <string>YES</string> 到我的 Info.plist 文件。这似乎是我发现的论坛中的讨论。任何帮助,将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

我想我找到了问题所在,因此为了未来观众的利益 - 只需尝试重新启动您的 iOS 模拟器。我浪费了这么多小时试图追逐一些难以捉摸的错误,最终这只是一个模拟器问题......

【讨论】:

【参考方案2】:

不知道我是如何解决这个问题的。跑扑干净了一堆。并更改和未更改 Podfile 中的 ios 版本。我猜是颤振魔法。在某个时候还删除了模拟器上的所有内容和设置。

【讨论】:

我遇到了同样的问题。只要键盘尝试打开,应用程序 (iOS) 就会完全冻结。键盘的空间已经创建,但应用程序在显示之前就冻结了,没有办法摆脱这种情况。不知道如何解决这个问题... 你可以试试我做的。运行flutter clean将podfile中的ios版本更改为13。然后进入xcode并将其中的目标sdk也更改为13。不知道是什么解决了它。

以上是关于启动键盘时 Flutter App 冻结的主要内容,如果未能解决你的问题,请参考以下文章

flutter app闪屏冻结任何方法解决

flutte学习-编译模式

flutte学习-编译模式

在 Flutter 中包裹 Material App 时,键盘“完成”不显示

VS code 进行 flutter 调试时启动后就停止,无法调试的问题

[Flutter] 写第一个 Flutter app,part1 要点