Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何停止状态颤振_Flutter_Dart - Fatal编程技术网

Flutter 如何停止状态颤振

Flutter 如何停止状态颤振,flutter,dart,Flutter,Dart,我从事颤振项目。当我点击修改图标编辑名称时,例如==>屏幕会自动显示。点击编辑按钮后如何停止刷新屏幕 这段我的表单代码: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('Adresse email :', style: TextStyle( color: Color(0xFF4053FCF),

我从事颤振项目。当我点击修改图标编辑名称时,例如==>屏幕会自动显示。点击编辑按钮后如何停止刷新屏幕

这段我的表单代码:

Row(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    children: [
        Text('Adresse email :',
            style: TextStyle(
                color: Color(0xFF4053FCF),
                fontSize: 16,
                fontWeight: FontWeight.w600
            ),
        ),
        IconButton(
            icon: Icon(CommunityMaterialIcons.pencil,
            color: Colors.grey,
            ),
            onPressed: () {
                emailNode.requestFocus();
                setState(() {
                    enableemail = true;
                });
            })
    ],
),

  void editUserProfile() async {
    setState(() {});

    // if (_formKey.currentState.validate()) {
    String name = _nameController.text;
    String email = _emailController.text;
    String adress = _adressController.text;

    userApi.editUserProfile(name, email, adress).then((data) {
      print(data);
      if (data != null) {
        //   Navigator.pop(context);

        /*  Navigator.push(
            context, MaterialPageRoute(builder: (context) => Profile()));*/
      }
      //  setState(() {});

      /* Navigator.push(
            context, MaterialPageRoute(builder: (context) => BoxSettings()));*/

      setState(() {
        enableup = false;
        enableadress = false;
        enableemail = false;
      });

      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(data)));

      // ScaffoldMessenger.of(context).showSnackBar(snackBar3);
    }).catchError((error) {
      ScaffoldMessenger.of(context)
          .showSnackBar(SnackBar(content: Text(error.toString())));
    });
    setState(() {});
  }
这是我的屏幕,了解更多信息:


如何在不重新加载屏幕的情况下按下编辑按钮?

将要刷新的小部件包装在有状态构建器中,使整个屏幕成为无状态小部件,然后调用有状态构建器

有一些解决方法可以实现这一点(即在点击完全不同的小部件后更新一个小部件的状态)比如将回调函数作为参数传递等等

但是,解决上述问题并保持代码整洁的最佳解决方案是使用提供者模式

如果您不知道提供者模式是如何工作的,您可以轻松地在谷歌上搜索与之相关的文章。以下是其中之一:

阅读以上文章,然后再往下看

基本上,我们所做的是:

创建ChangeNotifier类

用ChangeNotifierProvider小部件包装这两个小部件的父部件

用消费者小部件包装要更新的小部件

然后,在编辑按钮的onTap/onPressed函数中,可以调用一个函数,该函数将调用notifyListener()函数。它将通知上述ChangeNotifierProvider小部件它的小部件树中没有发生任何更改。然后它将遍历下面的子完整小部件树,并更新用消费者小部件包装的小部件


这样,您就不需要刷新整个屏幕,您可以通过在完全不同的小部件上执行某些操作来轻松地更新一个小部件。

您的意思是重新加载应用程序吗?是否有任何错误?屏幕自动刷新无错误,但已使用操作(刷新屏幕),因此您只想刷新按钮,而不想刷新整个屏幕?是的。。。很抱歉,我只想为添加新名称刷新输入文本。编辑输入后,如果您想更新您按下的同一个小部件,屏幕将刷新。如果你想更新其他的小部件,你应该考虑其他的解决方案,比如使用一个提供者。为什么不只是在一个有状态的生成器内建立一个单独的列来更新所有的小部件?强制组小部件中的小部件仅刷新它们可能不是一个好的选择,因为组小部件并非完全用于此目的,而是仅作为UI元素制作。上面的许多示例之一是:假设您有一列10个红色容器,并在末尾有一个按钮。但按下按钮后,只需更新最后3个容器的颜色。在这种情况下,您必须在实际列中嵌套一个单独的列,其中包含最后3个容器和按钮。我们可以看到,这不是一个好的做法。在上面相同的场景中,如果您必须更新列的备用容器的颜色而不是最后3个,那么这将不是一个可行的选项。您是否检查了我发布的解决方案?它会解决你的问题