【问题标题】:Flutter/Dart setState are not refreshing the Text in Text WidgetFlutter/Dart setState 不刷新文本小部件中的文本
【发布时间】:2021-12-01 02:18:34
【问题描述】:

我想刷新我的文本“ganzerchat”,但它不适用于我的操作方式

那是我尝试使用 setstate 的聊天类(StatefulWidget),但每次都没有发生任何事情。

我从 main.dart 打开了聊天

列出 chatverlauf = [];

Future getDataFromYourApi() async {
  List<String> tmp = [];
  final response = await http.get(Uri.parse(url));
  final extractedData = json.decode(response.body) as Map<String, dynamic>;

  chatverlauf.clear();
  ganzerChat = "";

  extractedData.forEach((id, data) {
    tmp.add(data["name"] + ": " + data["text"]);
    //print(data["name"] + ": " + data["text"]);
    
  });
  return tmp;
}

Future<void> loadChat() async{
  
  chatverlauf = await getDataFromYourApi();
  

  setState(() {
    ganzerChat = chatverlauf.join("\n");
    print(ganzerChat);
  });
}


return Scaffold(
  appBar: AppBar(
    title: Text("Chat"),
  ),
  body: Container(
    alignment: Alignment.center,
    child:
        Column(mainAxisAlignment: MainAxisAlignment.end, children: <Widget>[
      Container(
          margin: EdgeInsets.only(right: 20, bottom: 50),
          alignment: Alignment.centerRight,
          child: Text(
            ganzerChat,
            textAlign: TextAlign.right,
          )),
      Row(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: <Widget>[
          Container(
              width: 300,
              color: Colors.grey,
              child: TextField(controller: eingabecontroller)),
          ElevatedButton(
            child: Text("Senden"),
            onPressed:()async{
              await loadChat();
            },
          ),
        ],
      ),
    ]),
  ),
);

}

也许这里的任何人都有同样的问题,可以帮助我

【问题讨论】:

  • 请不要张贴代码/错误截图meta.stackoverflow.com/questions/303812/…
  • 您需要直接在 StackOverflow 上分享您的代码。不是它的屏幕截图。
  • 怎么可以直接分享?
  • 只需将您的代码复制粘贴到您的问题中即可。并且不要将答案写成评论。
  • 调用getDataFromYourApi()时数据加载了吗?

标签: json flutter dart refresh setstate


【解决方案1】:

我发现了问题。这是因为我有 Widget build 下面的方法。我把它放在上面然后它工作了!

抱歉浪费了你的时间,我还是非常感谢你。

【讨论】:

    【解决方案2】:

    尝试创建一个新函数来设置 chatverlauf 值。像这样:getDataFromYourApi():

    Future<void> loadChat() async{
        ganzerChat = "";
        chatverlauf = await getDateFromYourApi();
    
        for(int i=0;i<chatverlauf.lenght;i++){
            ganzerChat = ganzerChat + chatverlauf[i] + "\n";
        }
        setState(() {
           ganzerChat = ganzerChat + "";
        });
    
    }
    

    在您的 ElevatedButton 中:

    ElevatedButton(
       child: Text("Senden"),
       onPressed: ()async{
          await loadChat();
       }
    ),
    

    【讨论】:

    • 它不起作用。也许我还有其他问题,但我是这种语言的新手,我现在尝试解决这个问题 4 小时
    【解决方案3】:

    您无需使用for 循环即可加入arrayStrings。只需使用\n 作为分隔符来执行join

    setState(() {
      ganzerChat = chatverlauf.join("\n")
    });
    

    【讨论】:

    • 我现在也试过了,但没有任何变化
    【解决方案4】:

    现在,在函数 getDataFromYourApi() 中试试这个:

    Future <List<String>> getDataFromYourApi() async {
      ...
      
    }
    

    【讨论】:

    • 不工作,如果您从我的 statefull 小部件中显示我在此发布的图像可能会有所帮助
    猜你喜欢
    • 2019-12-16
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多