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
Dart 颤栗:我如何停止渲染;小部件构建();不必要地一次又一次?_Dart_Flutter - Fatal编程技术网

Dart 颤栗:我如何停止渲染;小部件构建();不必要地一次又一次?

Dart 颤栗:我如何停止渲染;小部件构建();不必要地一次又一次?,dart,flutter,Dart,Flutter,这是颤振中的一个小POC,我的build()函数被一次又一次地调用 如果没有任何循环,这是完全不可能的。经过大量研究,我也在initState()中将称为“Future”() 但是仍然面对同样的问题 提前感谢您抽出时间 我试过什么 你犯了几个错误,这是正确的代码。您应该使用字符串而不是文本小部件来显示响应 class _Reports extends State<Reports> { static String url = "url"; String _response =

这是颤振中的一个小POC,我的build()函数被一次又一次地调用

如果没有任何循环,这是完全不可能的。经过大量研究,我也在initState()中将称为“Future”(

但是仍然面对同样的问题

提前感谢您抽出时间

我试过什么


你犯了几个错误,这是正确的代码。您应该使用
字符串
而不是
文本
小部件来显示响应

class _Reports extends State<Reports> {
  static String url = "url";
  String _response = "abc";
  @override
  void initState() {
    super.initState();
    getTradeName_dropdown_ITR_Computation_DATA();
  }

  @override
  Widget build(BuildContext context) {

    print('body');

    return Scaffold(
      body: Container(
        child: new Text(_response),
      ),
    );
  }

  Future getTradeName_dropdown_ITR_Computation_DATA() async {
    try {
      http.Response response =
      await http.get("url_goes_here");

      if (this.mounted) {
        setState(() {
          String jsonTradeName_dropdown = response.body;
          _response = jsonTradeName_dropdown;
        });
      }
    } on Exception {
      setState(() {
        _response = "Some error occored. Please Try again...";
      });
    }
  }
}
class\u报告扩展状态{
静态字符串url=“url”;
字符串_response=“abc”;
@凌驾
void initState(){
super.initState();
getTradeName_下拉菜单_ITR_计算_数据();
}
@凌驾
小部件构建(构建上下文){
打印(“正文”);
返回脚手架(
主体:容器(
子项:新文本(_响应),
),
);
}
未来getTradeName\u下拉菜单\u ITR\u计算\u数据()异步{
试一试{
响应=
等待http.get(“url_goes_here”);
如果(本安装){
设置状态(){
字符串jsonTradeName_下拉列表=response.body;
_response=jsonTradeName_下拉列表;
});
}
}例外{
设置状态(){
_response=“出现了一些错误。请重试…”;
});
}
}
}

理解build()的正确模型是,您应该想象它每秒被调用60次。因此,build()例程应该是快速且幂等的


实际上,框架进行了一些优化,以便在需要时不调用它,但您不应将对build()的过度调用视为失败。

您能提供实际使用此小部件的代码吗??Thx这不是问题。是的@Ferdi,完整的代码在我实际使用这个小部件的地方更新了。@pskink我在initState()中启动http.get(),在build外部。似乎每个帧渲染都会调用build,即使帧没有更改,并且每次调用
setState
时,这似乎是一种正常行为:感谢您所做的更改。。。我已经记下来了。但这仍然不能解决我的核心问题。Widget build()仍在反复迭代。“身体”一次又一次地被印刷出来。得到相同的输出,但没有任何更改。代码在我看来还行,我不确定您在父类中如何使用它。这是唯一的类@那你能告诉我网址吗?我会自己去拿的。好的,我把它删除了。
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
I/flutter ( 5760): body
class _Reports extends State<Reports> {
  static String url = "url";
  String _response = "abc";
  @override
  void initState() {
    super.initState();
    getTradeName_dropdown_ITR_Computation_DATA();
  }

  @override
  Widget build(BuildContext context) {

    print('body');

    return Scaffold(
      body: Container(
        child: new Text(_response),
      ),
    );
  }

  Future getTradeName_dropdown_ITR_Computation_DATA() async {
    try {
      http.Response response =
      await http.get("url_goes_here");

      if (this.mounted) {
        setState(() {
          String jsonTradeName_dropdown = response.body;
          _response = jsonTradeName_dropdown;
        });
      }
    } on Exception {
      setState(() {
        _response = "Some error occored. Please Try again...";
      });
    }
  }
}