Flutter 如何在不重新渲染整个屏幕的情况下在屏幕上加载更多数据?

Flutter 如何在不重新渲染整个屏幕的情况下在屏幕上加载更多数据?,flutter,Flutter,我在一个论坛上工作,这个论坛可以根据以前的问题提供的答案动态生成更多的问题(例如,如果你以“是”回答问题3,则会在下面再添加两个问题)。我担心的是,每次我“显示”一个新问题时,它都会重新呈现整个屏幕,从而导致效率低下。 我提供了一个问题的例子,当回答这个问题时会生成一个文本,这个文本将代表我论坛中的另一个问题。这就是我实现的方式,这是否效率低下(因为整个屏幕重新渲染),我如何确保只渲染“新”问题 import 'package:flutter/cupertino.dart'; import 'p

我在一个论坛上工作,这个论坛可以根据以前的问题提供的答案动态生成更多的问题(例如,如果你以“是”回答问题3,则会在下面再添加两个问题)。我担心的是,每次我“显示”一个新问题时,它都会重新呈现整个屏幕,从而导致效率低下。 我提供了一个问题的例子,当回答这个问题时会生成一个文本,这个文本将代表我论坛中的另一个问题。这就是我实现的方式,这是否效率低下(因为整个屏幕重新渲染),我如何确保只渲染“新”问题

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class StackOverFlow extends StatefulWidget {
  @override
  _StackOverFlowState createState() => _StackOverFlowState();
}

class _StackOverFlowState extends State<StackOverFlow> {
  bool value = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                Text("Are you good?"),
                Checkbox(
                  checkColor: Colors.blue,
                  value: value,
                  onChanged: (bool) {
                    setState(() {
                      value = bool;
                    });
                    print(bool);
                  },
                ),
              ],
            ),
            value ? Text("Your checkbox is a yes") : Container(),
          ],
        ),
      ),
    );
  }
}
import'包装:flift/cupertino.dart';
进口“包装:颤振/材料.省道”;
类StackOverFlow扩展了StatefulWidget{
@凌驾
_StackOverFlowState createState()=>\u StackOverFlowState();
}
类_StackOverFlowState扩展状态{
布尔值=假;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:中(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
划船(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本(“你还好吗?”),
复选框(
checkColor:Colors.blue,
价值:价值,
一旦更改:(bool){
设置状态(){
值=布尔;
});
印刷(bool);
},
),
],
),
value?Text(“您的复选框是yes”):Container(),
],
),
),
);
}
}

不,这不会是低效的。您应该维护一个包含问题数据的
问题
列表,您的
构建
函数应该呈现当前问题。当您决定在事件处理函数中添加新问题时,只需在
setState
中添加新问题,如

setState(){
问题。加上(问题(“你多大了?”);
})
您的新问题列表将重新呈现


这种重新呈现就是反应式框架的工作方式。您不应该试图绕过这一点来创建“更高效”的解决方案。在
build
函数中创建的小部件是轻量级对象,Dart VM经过优化,可以频繁创建和销毁其中的许多小部件。通过在每次
构建时创建不同的小部件,可以更改实际的UI元素

你的例子(“例如在我的代码中…”)措辞不好,我无法理解。你可能应该试着弄清楚问题到底出在你身上,这样这个问题就可以回答了。现在它是不可回答的。任何您不希望在每次生成方法运行时重新加载的代码都会移到生成方法之外,并在初始状态下创建它。