草庐IT

dart - flutter : setState() is not working properly

coder 2023-07-22 原文

我正在制作一个新的有状态小部件,它将根据所选选项显示 ListView ,这里是一个和两个。一旦 GestureDetector 被点击,index 的值就会改变,文本的字体大小和颜色也会改变。但是,带有 pages[index] 的容器不会重建

我不知道出了什么问题,因为列中的一个容器重建了,而另一个没有重建。

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return MatchStatsState();
  }
}

class MatchStatsState extends State<MatchStats>{
  List<Widget> pages = [
    ListView(
      scrollDirection: Axis.horizontal,
      children: <Widget>[
        BattingStatsView(CskBatting),
        BowlingStatsView(cskBowling),
      ],
    ),
    ListView(
      scrollDirection: Axis.horizontal,
      children: <Widget>[
        BattingStatsView(kxipBatting),
        BowlingStatsView(kxipBowling)
      ],
    ),   
  ];
  Color activeColor = Colors.yellow;
  Color inactiveColor = Colors.white;
  num activeFontSize = 20.0;
  num inactiveFontSize = 15.0;
  int index = 0;

  @override
  Widget build(BuildContext context) {


    // TODO: implement build
    return Container(
      height: MediaQuery.of(context).size.height*0.4,
      width: MediaQuery.of(context).size.width*0.95,
      child: Column(
        children: <Widget>[
          Container(
            height: MediaQuery.of(context).size.height*0.05,
            width: MediaQuery.of(context).size.width*0.95,
            child: Row(
              children: <Widget>[
                GestureDetector(
                    onTap: (){
                      setState(() {
                        index = 0;
                      });
                    },
                    child: Container(
                    width: MediaQuery.of(context).size.width*0.45,
                    child: Text("ONE",style: TextStyle(color: index == 0?activeColor:inactiveColor,fontSize: index == 0? activeFontSize: inactiveFontSize)),
                  ),
                ),
                GestureDetector(
                    onTap: (){
                      setState(() {
                        index = 1;
                      });
                    },
                    child: Container(
                    width: MediaQuery.of(context).size.width*0.45,
                    child: Text("TWO",style: TextStyle(color: index == 1?activeColor:inactiveColor, fontSize: index == 1? activeFontSize: inactiveFontSize)),
                  ),
                ),
              ],
            ),
          ),
          Container(
            height: MediaQuery.of(context).size.height*0.35,
            width: MediaQuery.of(context).size.width*0.95,
            child: pages[index]
          ),
        ]
      )
    );
  }
}

我希望列中的第二个容器在索引值更改时重建,我该如何实现?

最佳答案

试试这个:

创建一个返回列表小部件的方法,如下所示:

List<Widget> buildPages() {
    return [
      ListView(
        scrollDirection: Axis.horizontal,
        children: <Widget>[
          BattingStatsView(CskBatting),
          BowlingStatsView(cskBowling),
        ],
      ),
      ListView(
        scrollDirection: Axis.horizontal,
        children: <Widget>[
          BattingStatsView(kxipBatting),
          BowlingStatsView(kxipBowling)
        ],
      ),
    ];
  }

Widget getProperWidget(int index) {
    return buildPages()[index];
  }

比你的列容器:

Container(
            height: MediaQuery.of(context).size.height*0.35,
            width: MediaQuery.of(context).size.width*0.95,
            child: getproperWidget(index)
          ),

记得覆盖 initState。

关于dart - flutter : setState() is not working properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55575984/

有关dart - flutter : setState() is not working properly的更多相关文章

  1. Flutter 环境变量配置和flutter doctor中的错误解决 - 2

    一、环境变量右键点击我的电脑-属性:然后找到环境变量 1.Android的SDK不在C盘的话需要额外配这个到用户环境变量:ANDROID_HOMED:\AndroidSDK2.然后在系统变量:Path中添加一条这样的值        D:\Flutter\flutter\bin             这个值写flutter包解压的实际地址即可 3.在系统变量中添加两个镜像变量:        变量名:FLUTTER_STORAGE_BASE_URL      变量值:https://storage.flutter-io.cn        变量名:PUB_HOSTED_URL      变量

  2. javascript - ReactJS:为什么在setState更改状态时调用构造函数 - 2

    我是ReactJS的新手,我制作了一个应用程序,您可以在其中提交姓名和电子邮件。姓名和邮件应显示在页面底部的列表中。它会显示一小段时间,然后调用构造函数并清除状态和列表。为什么在状态改变后调用构造函数?我以为构造函数只运行一次,然后render方法在setState()更改状态后运行。classAppextendsReact.Component{constructor(props){super(props);console.log("Appconstructor");this.state={signedUpPeople:[]};this.signUp=this.signUp.bind(

  3. javascript - React setState 在 while 循环期间不设置状态 - 2

    我想避免数据倍增,所以我想创建一个循环来为不同的site_id调用我的数据提供者。我创建了一个while循环并在此while循环中设置状态值。我意识到从我的2元素数组(我有2个站点)中只有1个被设置在状态中,而另一个没有。classDashboardextendsComponent{state={username:localStorage.getItem('username'),siteid:[{id:1,daily:"EKdaily",weekly:"EKweekly",monthly:"EKmonthly",total:"EKtotal",},{id:2,daily:"AKdail

  4. javascript - 在循环的每次迭代中都使用 setState 是不好的做法吗? - 2

    这是一个小代码片段:asynccomponentDidMount(){...this.state.postList.forEach(element=>{this.fetchItem(element);});}asyncfetchItem(query){...this.setState(previousState=>{constlist=[...previousState.data,data];return{data:list};});}我很想知道在forEach循环的每次迭代中使用setState是否是个坏主意。我怀疑它会影响性能,但我想确定地知道,因为这似乎是解决此问题的最简单方法。

  5. javascript - Google Dart JavaScript 转换器是否支持旧版浏览器? - 2

    GoogleDartJavaScript转换器支持旧版浏览器还是仅支持现代浏览器? 最佳答案 根据technicaloverviewofitsofficialsite:您将能够以多种方式运行Dart代码:1.将Dart代码转换为可在任何现代浏览器中运行的JavaScript:Chrome、Safari5+和Firefox4+(即将推出更多浏览器支持)。2.在服务器端直接在虚拟机中执行Dart代码3.使用Dartboard在任何浏览器窗口中编写、修改和执行小型Dart程序Dart->JavaScript编译器几乎不可能支持旧版浏览器。

  6. javascript - 用 Dart 可视化? - 2

    我的工作涉及大量的可视化。我一直在用D3.js和JavaScriptInfovistoolkit我最近了解到Dart如何成为开发Web应用程序的新方法。Q1。Dart是否提供任何用于可视化的库(某种级别的D3.js或JavaScriptInfovistoolkit)?Q2。如果我继续使用Dart,我可以使用D3.js吗?/JavascriptInfovistoolkit与Dart一起?编辑:我在互联网上发现wecanuseJavascriptalongwithDart.我经历了DartFAQ,但无法真正找到与可视化库或D3.js本身相关的任何内容。 最佳答案

  7. javascript - ReactJS onClick setState 到不同的元素 - 2

    我是新手,遇到了一些小问题。也许有人可以帮助我。所以问题是我无法使用onCLick函数触发我想要的元素。现在我试图在时删除导航importReactfrom"react";importReactDOMfrom"react-dom";exportdefaultclassNavextendsReact.Component{constructor(){super();this.state={navStatus:"navHide"};}navClose(){varnavOpened=document.getElementById("myNav");navOpened.setState({nav

  8. javascript - Bootstrap 开关 setState 给出 js 错误 - 2

    我正在尝试使用来自Ajax的条件返回值来更改Bootstrap开关的状态,HTML,if(objData.limit==='Yes'){$('#limit').bootstrapSwitch('setState',true);$("#limit_amount").prop("readonly",false);}else{$('#limit').bootstrapSwitch('setState',false);$("#limit_amount").prop("readonly",true);}但它抛出如下错误..UncaughtTypeError:Cannotreadproperty'

  9. javascript - 无法使用绑定(bind)到 `this.setState` 的对象文字调用 `partialState`,因为字符串 [1] 与字符串文字 [2] 不兼容 - 2

    我一直在用头撞墙试图让它工作,有什么建议吗?我在这里使用reactwithflow。我很难理解这些代码注释的东西,同时我也在学习。起初它是压倒性的,但在我花了一些时间在谷歌上搜索远程关闭的任何东西之后,我已经走到了死胡同。帮助?//@flowimportReact,{Component}from'react';importShowCardfrom'./ShowCard';importHeaderfrom'./Header';typeProps={shows:Array};typeState={searchTerm:""};classSearchextendsComponent{hand

  10. javascript - 超过最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况 - 2

    我正在制作这个Conway的生命游戏React项目,它工作得很好,但是当我添加最后几个按钮来清除棋盘时,React的一些其他功能给了我这个错误Maximumupdatedepthexceeded.ThiscanhappenwhenacomponentrepeatedlycallssetStateinsidecomponentWillUpdateorcomponentDidUpdate.Reactlimitsthenumberofnestedupdatestopreventinfiniteloops.从它向我展示的代码片段来看,clear()函数似乎是这里的问题,但我认为我没有在rend

随机推荐