AlertDialogue中显示的更新RadioListTile列表中的选择时出现问题

问题描述

我尝试在几周内解决问题仍然无法解决,请帮助我 当用户添加到购物车时,它会显示一个带有RadioListTile列表的AlertDialogue,我没有进行任何选择,而我再次按该按钮,则是我按的最后一个选择

我称其为IconButton: AddProductToCartButton(product);

class AddProductToCartButton extends StatefulWidget {
  final ProductModel product ;

  AddProductToCartButton(this.product);

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

class _AddProductToCartButtonState extends State<AddProductToCartButton> {

  ProductSCIQPModel selectedSize = new ProductSCIQPModel();
  String selectedTextSize;
  bool addToCartFlag = false;
  List<ProductSCIQPModel>_tempSizeDetailsList = [];
  var _widgets =  List<Widget>();


  @override
  void initState() {
    _tempSizeDetailsList = widget.product.size_color_price;
  }

  Future _addProductDetailsToCart() async{
    addToCartFlag = true;
    CartProvider cartProvider = Provider.of<CartProvider>(
        context,listen: false);
    CartProductModel _tempCartProductModel;
    _tempCartProductModel = new CartProductModel();

    _tempCartProductModel.productid = widget.product.id;
    _tempCartProductModel.name = widget.product.name;
    _tempCartProductModel.namear = widget.product.namear;
    _tempCartProductModel.price = selectedSize.price ;
    _tempCartProductModel.quantity = 1;
    _tempCartProductModel.productSize = selectedSize.product_size;
    _tempCartProductModel.image = widget.product.images[0];

    cartProvider.addProductToCart(_tempCartProductModel);
    await addProductToCart(_tempCartProductModel);
  }

  List<Widget> createradioListSizes() {
    _widgets.clear();
    _tempSizeDetailsList.where((element) => element.available != false).forEach((ProductSCIQPModel element) {
      _widgets.add(
          RadioListTile(
            value: element,groupValue: selectedSize,activeColor: Colors.blue,title: Row(
              children: [
                Text(element.product_size != null ?
                ' ' + element.product_size
                    : 'no size'),Text('  -  '),Text(element.price.toString()),],),onChanged: (ProductSCIQPModel value){
              setState(() {
                selectedSize = value;
              });
              print('selected : ' + selectedSize.product_size);
            },)
      );});
    return _widgets;

  }

  Future<String> SelectSizeDialogue(BuildContext context){

    return showDialog(context: context,builder: (context){
      return AlertDialog(
        title: Text(AppLocalizations.of(context).translate('SELECTSIZE')),content:

        Column(
          children: createradioListSizes(),//_widgets,actions: [
          MaterialButton(
              elevation: 5.0,child: Text('Add to cart'),onpressed: ()  {
                Navigator.of(context).pop();
                _addProductDetailsToCart();
              }),MaterialButton(
            elevation: 5.0,child: Text('Cancel'),onpressed: (){
              addToCartFlag= false;
              Navigator.of(context).pop();
            },)
        ],);
    });
  }

  @override
  Widget build(BuildContext context) {
    return IconButton(
        icon:
        Icon(Icons.add_shopping_cart,color: Colors.black54,onpressed: () async {
          if (widget.product.size_color_price.length > 1){
            await SelectSizeDialogue(context);
          }else {
            selectedSize.product_size = widget.product.size_color_price[0].product_size;
            selectedSize.price = widget.product.size_color_price[0].price;
            await _addProductDetailsToCart();
          }

          if(addToCartFlag) {
            Scaffold.of(context).showSnackBar(SnackBar(
                content: Text(widget.product.name + ' size : ' + selectedSize.product_size.toString() +
                    " added to cart"),backgroundColor: Colors.green,duration: Duration(seconds: 2)));
          }

        }

    );
  }
}

解决方法

Alert Dialog是StateLess Widget,因此它不会更新ui ...我建议将警报对话框包装在StatefullBuilder中,它将解决您的问题。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...