Flutter 在flatter中设置/获取有状态小部件的值
我的小部件中有一个文本字段。当我从服务器得到一些更新时,我想刷新它。现在我知道了Flutter 在flatter中设置/获取有状态小部件的值,flutter,Flutter,我的小部件中有一个文本字段。当我从服务器得到一些更新时,我想刷新它。现在我知道了 setState(() { _msg = "new message"; }); 它重建了我的整个小部件。我想做什么 _msg.set("new message"); 它应该在_msg小部件内调用setState并仅重建_msg 有办法做到这一点吗?确保您使用的是有状态小部件。这将允许您使用setState((){})更新小部件状态 当您调用setState((){})时,它将重建它所在的有状
setState(() {
_msg = "new message";
});
它重建了我的整个小部件。我想做什么
_msg.set("new message");
它应该在_msg小部件内调用setState并仅重建_msg
有办法做到这一点吗?确保您使用的是有状态小部件。这将允许您使用
setState((){})
更新小部件状态
当您调用setState((){})
时,它将重建它所在的有状态小部件。整个小部件将得到重建。别担心,重新构建整个小部件。例如:
@override
Widget build(BuildContext context) { .... will get rebuilt ....}
看起来_msg是一个类型字符串。如果要更新字符串文本,调用setState((){})
将实现此目标。下面是一个快速示例,您可以通过打印看到AppBar标题和控制台中的文本字段发生更改。快乐编码
import 'package:flutter/material.dart';
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
String _msg = "first message";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('MyWidget: _msg = $_msg'),
),
backgroundColor: Colors.white,
floatingActionButton: FloatingActionButton(onPressed: (){
print('before setState _msg = $_msg');
setState(() {
_msg = 'second message';
print('after setState _msg = $_msg');
});
}),
);
}
}
导入“包装:颤振/材料.省道”;
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
字符串_msg=“第一条消息”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:Text('MyWidget:_msg=$_msg'),
),
背景颜色:Colors.white,
浮动操作按钮:浮动操作按钮(按下时:(){
打印('设置状态之前_msg=$_msg');
设置状态(){
_msg=‘第二条消息’;
打印('setState\u msg=$\u msg'之后);
});
}),
);
}
}
确保您使用的是有状态小部件。这将允许您使用setState((){})
更新小部件状态
当您调用setState((){})
时,它将重建它所在的有状态小部件。整个小部件将得到重建。别担心,重新构建整个小部件。例如:
@override
Widget build(BuildContext context) { .... will get rebuilt ....}
看起来_msg是一个类型字符串。如果要更新字符串文本,调用setState((){})
将实现此目标。下面是一个快速示例,您可以通过打印看到AppBar标题和控制台中的文本字段发生更改。快乐编码
import 'package:flutter/material.dart';
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
String _msg = "first message";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('MyWidget: _msg = $_msg'),
),
backgroundColor: Colors.white,
floatingActionButton: FloatingActionButton(onPressed: (){
print('before setState _msg = $_msg');
setState(() {
_msg = 'second message';
print('after setState _msg = $_msg');
});
}),
);
}
}
导入“包装:颤振/材料.省道”;
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
字符串_msg=“第一条消息”;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:Text('MyWidget:_msg=$_msg'),
),
背景颜色:Colors.white,
浮动操作按钮:浮动操作按钮(按下时:(){
打印('设置状态之前_msg=$_msg');
设置状态(){
_msg=‘第二条消息’;
打印('setState\u msg=$\u msg'之后);
});
}),
);
}
}
不是直接的,不是。实际上重建并不是一个低效的操作。状态是一个简单的数据结构,对于其中未更改的部分,不会重新创建它们背后的实际UI元素。如果你真的因为某种原因想要摆脱重建,我认为提供者小部件有办法让相关小部件监听更改。不是直接的,不是。实际上重建并不是一个低效的操作。状态是一个简单的数据结构,对于其中未更改的部分,不会重新创建它们背后的实际UI元素。如果出于某种原因,您真的想摆脱重建,我认为提供者小部件有办法让相关小部件侦听更改。这就是我现在正在做的。如果这是正确答案,请将答案标记为正确。事实并非如此。这就是我在问这个问题之前所做的。你能在你的问题中提供更多的代码以便so社区能够帮助你吗?这就是我现在正在做的。如果这是正确的答案,请将答案标记为正确。它不是。这就是我在问这个问题之前所做的。你能在你的问题中提供更多的代码以便so社区能够帮助你吗?