相关疑难解决方法(0)

如何避免键盘弹出时整个页面重新加载?

观看此视频以了解问题演示 https://youtu.be/GsdWcTEbUbg

由于代码较多,我在这里尝试总结一下代码的结构。简而言之:

Scaffold(
  appBar: AppBar(),
  body: StreamBuilder<dynamic>(
    stream: globals.chatRoomBloc.threadScreen,
    builder: (BuildContext context, AsyncSnapshot snapshot) {
      return Column(
        crossAxisAlignment:
            CrossAxisAlignment.stretch, // sticks to the keyboard
        children: <Widget>[
          Expanded(
            child: Scrollbar(
              child: ListView.builder(
                shrinkWrap: true,
                itemCount: list.length,
                itemBuilder: (BuildContext context, int index) {
                  return TileWidget();
                },
              ),
            ),
          ),
        ],
      );
    },
  ),
)
Run Code Online (Sandbox Code Playgroud)

TileWidget 是有状态的,当按下回复按钮时会附加 TextField 并调整小部件的大小。然后,当用户单击文本字段时,键盘就会弹出。

现在我的问题是,当键盘弹出时,屏幕会重新加载。

我尝试了以下解决方案:

  1. 在 Streambuilder 中使用 TextField:我仅设置流一次,即第一次加载页面时。添加新的聊天或条目时会对流进行任何更改。就我而言,这种情况不会发生。
  2. Flutter 切换到选项卡重新加载小部件并运行 FutureBuilder我不确定这是否是同一个问题,但解决方案对我来说没有任何改变。
  3. 问题#11895 - 我也经历过这个,但没有帮助。

我认为屏幕正在尝试调整大小并重新绘制以适应键盘抽屉。但由于某种原因未能做到这一点并重新加载所有内容。我错过了什么吗?有没有解决的办法 ?

android dart flutter

5
推荐指数
1
解决办法
5286
查看次数

打开键盘时重新创建StatefulWidget页面

在我的配置文件页面中,当使用单击编辑图标时,我具有使用布尔条件的文本选项,将文本窗口小部件更改为文本
widget.isUpdate ? new Flexible(child: new TextField()) : Text("Text Widget")字段窗口小部件,但当文本字段聚焦时,键盘已打开,此时StatefulWidget重新创建,因此布尔值再次变为false,然后文本字段移至文本窗口小部件。仅当页面具有导航器推入页面(第二页)时,才会发生这种情况

 Navigator.push(context,MaterialPageRoute(builder: (context) => UpdateProfile()))
Run Code Online (Sandbox Code Playgroud)

如果此页面为默认主页,则工作正常。我没有犯什么错误。

代码:

import 'package:flutter/material.dart';

class UpdateProfile extends StatefulWidget {
  bool isUpdate = false;

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return UpdateProfileState();
  }
}

class UpdateProfileState extends State<UpdateProfile> {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
          title: Text("Update"),
          elevation: 2.0),
      body: Container(
        width: double.infinity,
        height: double.infinity,
        color: Colors.red,
        margin: const EdgeInsets.all(10.0),
        child: Row(
          children: <Widget>[
            widget.isUpdate ? new …
Run Code Online (Sandbox Code Playgroud)

keyboard flutter statefulwidget

4
推荐指数
1
解决办法
1139
查看次数

标签 统计

flutter ×2

android ×1

dart ×1

keyboard ×1

statefulwidget ×1