flutter setState() 正在工作但没有更新 UI
flutter setState() is working but not updating the UI
我正在尝试制作电子商务应用程序。但是在产品详细信息屏幕中,当我尝试购物图标和最喜欢的图标时,它们没有更改颜色和图标。我在 SetState 函数中添加了打印语句,并在单击图标后更改了值。我得到了输出和值的变化,但它们没有在 UI 中更新。请帮我。
class ProductDetails extends StatefulWidget {
final Product _product;
ProductDetails(this._product);
@override
_ProductDetailsState createState() => _ProductDetailsState(_product);
}
class _ProductDetailsState extends State<ProductDetails> {
final Product _product;
_ProductDetailsState(this._product);
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return ScaffoldWidget(
child: ListView(
children: <Widget>[
MainPartProduct(_product),
Container(
child: Row(
children: <Widget>[
GestureDetector(
onTap: () {
Navigator.of(context).push(
(MaterialPageRoute(
builder: (context) => CartScreen(),
)),
);
},
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 0.0),
child: Container(
margin: EdgeInsets.symmetric(vertical: 10.0),
alignment: Alignment.center,
width: MediaQuery.of(context).size.width * 0.75,
color: Colors.red,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0),
child: Text(
"BUY",
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
),
),
IconButton(
color:_product.cart ? Colors.black : Colors.red,
onPressed: () {
_product.cart ? productCart.remove(_product): productCart.add(_product);
setState(() {
_product.cart = !_product.cart;
print(_product.cart);
});
},
icon:_product.cart ? Icon(Icons.remove_shopping_cart) : Icon(Icons.add_shopping_cart),
),
IconButton(
color: Colors.red,
onPressed: () {
this.setState(() {
_product.fav ? productFavorite.remove(_product) : productFavorite.add(_product);
_product.fav = !_product.fav;
});
},
icon: (_product.fav) ? Icon(Icons.favorite) : Icon(Icons.favorite_border),
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10.0),
child: Container(
height: 500,
child: Text(
_product.details + _product.details,
style: TextStyle(
fontSize: 16.5,
),
),
),
),
],
));
}
}
您不应通过 StatefulWidget
的构造函数传递参数。您必须通过 widget
字段又名 widget._product
访问它
class ProductDetails extends StatefulWidget {
final Product _product;
const ProductDetails({ Key key, this._product }): super(key: key);
@override
_ProductDetailsState createState() => _ProductDetailsState();
}
class _ProductDetailsState extends State<ProductDetails> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return ScaffoldWidget(
child: ListView(
children: <Widget>[
MainPartProduct(widget._product),
Container(
...
我正在尝试制作电子商务应用程序。但是在产品详细信息屏幕中,当我尝试购物图标和最喜欢的图标时,它们没有更改颜色和图标。我在 SetState 函数中添加了打印语句,并在单击图标后更改了值。我得到了输出和值的变化,但它们没有在 UI 中更新。请帮我。
class ProductDetails extends StatefulWidget {
final Product _product;
ProductDetails(this._product);
@override
_ProductDetailsState createState() => _ProductDetailsState(_product);
}
class _ProductDetailsState extends State<ProductDetails> {
final Product _product;
_ProductDetailsState(this._product);
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return ScaffoldWidget(
child: ListView(
children: <Widget>[
MainPartProduct(_product),
Container(
child: Row(
children: <Widget>[
GestureDetector(
onTap: () {
Navigator.of(context).push(
(MaterialPageRoute(
builder: (context) => CartScreen(),
)),
);
},
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 0.0),
child: Container(
margin: EdgeInsets.symmetric(vertical: 10.0),
alignment: Alignment.center,
width: MediaQuery.of(context).size.width * 0.75,
color: Colors.red,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 10.0),
child: Text(
"BUY",
style: TextStyle(
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold,
),
),
),
),
),
),
IconButton(
color:_product.cart ? Colors.black : Colors.red,
onPressed: () {
_product.cart ? productCart.remove(_product): productCart.add(_product);
setState(() {
_product.cart = !_product.cart;
print(_product.cart);
});
},
icon:_product.cart ? Icon(Icons.remove_shopping_cart) : Icon(Icons.add_shopping_cart),
),
IconButton(
color: Colors.red,
onPressed: () {
this.setState(() {
_product.fav ? productFavorite.remove(_product) : productFavorite.add(_product);
_product.fav = !_product.fav;
});
},
icon: (_product.fav) ? Icon(Icons.favorite) : Icon(Icons.favorite_border),
),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10.0),
child: Container(
height: 500,
child: Text(
_product.details + _product.details,
style: TextStyle(
fontSize: 16.5,
),
),
),
),
],
));
}
}
您不应通过 StatefulWidget
的构造函数传递参数。您必须通过 widget
字段又名 widget._product
class ProductDetails extends StatefulWidget {
final Product _product;
const ProductDetails({ Key key, this._product }): super(key: key);
@override
_ProductDetailsState createState() => _ProductDetailsState();
}
class _ProductDetailsState extends State<ProductDetails> {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return ScaffoldWidget(
child: ListView(
children: <Widget>[
MainPartProduct(widget._product),
Container(
...