如何从Flutter中的列表视图子项分别获取数据?

时间:2018-07-09 08:50:04

标签: flutter flutter-layout

我创建了一个活动,该活动显示类似于购物应用程序的数据,其中产品位于左侧,+和-符号位于右侧。

我创建了一个新类来创建+和-,以便它们可以在单击并在主类中调用时独立工作。

swipe(driver,DIRECTION.RIGHT);

现在我如何才能分别传递每种产品的计数器数据,这样我才能知道哪个产品被选中了多少次到我这样调用的班级。

class Counter extends StatefulWidget {


  @override
  CounterState createState() => new CounterState();
}

class CounterState extends State<Counter> {

  int itemCount = 0;

  int totalCost= 0;

  @override
  Widget build(BuildContext context) {
    return Container(
      height: 100.0,
        alignment: Alignment.center,
        child:  Row(
          children: <Widget>[
            itemCount!=0 ?new IconButton(icon: new Icon(Icons.remove_circle_outline, size: 30.0,
            ),
                onPressed: (){
                  setState(()=>itemCount--);
                }
            ) :new Container(),

            new Text(itemCount.toString(), style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),),

            new IconButton(icon: new Icon(Icons.add_circle_outline, size: 30.0,
            ),
            onPressed: () {
              setState(() => itemCount++);
            }
            )
          ],
        ),
      );
  }
}

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。我建议的方法是让父窗口小部件存储主状态,并通过将其事件处理程序传递给子窗口作为参考,使子窗口在需要时更新该方法。

因此,在父窗口小部件上,您可以执行此操作

  var cart = List<Item>; // Create a model where you can store the items 

  void _handleCartChanges(Item newValue) {
    setState(() {
      cart.addValue(newValue) // do your stuff with the newvalue 
    });
  }

child: new ListView(
             children: new List.generate(1, (i)=> Counter(onPressed:_handleCartChanges)
    )   

现在您可以致电父级的onPressed通知更改

class Counter extends StatefulWidget {
  Counter({Key key,  @required this.onPressed})
      : super(key: key);

  final bool active;
  final ValueChanged<Item> onPressed;

  void _handlePress(int value) {  
    var item = Item(...) // create an item with the new vlaues
    onPressed(item); // and pass it
  }

因此,每当您设置计数器值时,也要通过以下方式通知父项

 onPressed: (){
                  setState(()=>itemCount--);
                  _handlePress(itemCount) // call the parent 
                }

这不是工作代码,但是现在您有了如何在父子之间传递状态的想法。