【问题标题】:why the list content is updated but the flutter doesn't reflected that in to ui?为什么列表内容已更新,但颤动并未反映在 ui 中?
【发布时间】:2019-06-25 20:02:42
【问题描述】:

我在颤振中创建了一个列表(_cost)和一个卡片视图,每当用户单击它们中的每一个时,都会从列表(_cost)中显示与该卡片的索引相关的值,但问题是每次我点击一张卡片时,它都会显示空值,尽管列表中的相关值不为空。

class ActivityPeopleCard extends StatefulWidget{

  Activity activity;
  ActivityPeopleCard({this.activity});


  @override
  _ActivityPeopleCardState createState() => _ActivityPeopleCardState();
}

class _ActivityPeopleCardState extends State<ActivityPeopleCard> {

   List<double> _cost;


  @override
  Widget build(BuildContext context) {
    _cost = new List(widget.activity.peopleInvolved.length);

    return Container(
      child:new GridView.builder(
        itemCount: widget.activity.peopleInvolved.length,
        gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3), 

        itemBuilder: (BuildContext context, int index) {
          return new GestureDetector(
            onTap: ()=> setState(() => {_priceSet(index)}),
            child: _buildWidget(index)
            );
          },
        ),         
      );
   }
_buildWidget(int index){
  return new Card(
    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30)),
    elevation: 5.0,
    child: Stack(children:<Widget>[               
      new Container(
        height: height/4,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              width:height/15,
              height: height/15,         
              decoration: new BoxDecoration(
                borderRadius: BorderRadius.circular(height/20),
                border: Border.all(color: Colors.white, width:2),       
            ),
            child: ClipRRect(
              borderRadius: BorderRadius.circular(height/15),
              child: Image.asset(widget.activity.peopleInvolved[index].imagePath, fit: BoxFit.fill)),
                Center(child: Text(widget.activity.peopleInvolved[index].name))
           ],
         ),
       ),
     ])
   );
 }

_priceSet(int index){
  setState(() {
    _cost[1]=5500;
  });

即使我在 _priceSet 函数中将 _cost[1] 设置为 5500,但它却显示为 null

【问题讨论】:

  • 我认为问题在于您再次初始化相同的 _cost 变量。每当调用 setState 方法时,它都会重新渲染整个构建方法,并使用旧值再次初始化 _cost 值。

标签: android flutter dart


【解决方案1】:

当您在_priceSet 中调用 setState 时,它​​会在您的 _ActivityCardPeopleState 中重新运行构建方法,这反过来会在不存在任何值的情况下重新初始化您的 _cost 列表(尽管您在 _priceSet 中设置了一个方法。)

考虑在有状态 (ActivityPeopleCard) 小部件中初始化 _cost 变量,然后将其传递给状态 (_ActivityPeopleCardState)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多