我创建了一个活动,该活动显示类似于购物应用程序的数据,其中产品位于左侧,+和-符号位于右侧。
我创建了一个新类来创建+和-,以便它们可以在单击并在主类中调用时独立工作。
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++);
}
)
],
),
);
}
}
答案 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
}
这不是工作代码,但是现在您有了如何在父子之间传递状态的想法。