RadioListTile 未正确选择

Vai*_*hak 3 flutter

我是维巴夫·帕塔克。我在使用 RadioListTile 时遇到问题。我创建了两个 RadioListTile,其中在 onChnaged 属性上调用一个函数,其中在调用 setState 中将 selectedRadio 变量的值设置为我从函数中获得的值,并且它更改了变量值,但不反映对 Ui 的更改意味着它确实如此不选择按下的单选按钮。

\n\n

我的代码在这里:

\n\n
showPaymentOptions() {\nshowModalBottomSheet(\n    shape: RoundedRectangleBorder(\n        borderRadius: BorderRadius.only(\n            topLeft: Radius.circular(25.0),\n            topRight: Radius.circular(25.0))),\n    elevation: 8.0,\n    context: context,\n    builder: (context) {\n      return Padding(\n        padding: const EdgeInsets.all(15.0),\n        child: Container(\n            height: 240,\n            child: Column(\n              crossAxisAlignment: CrossAxisAlignment.stretch,\n              children: <Widget>[\n                Column(\n                  children: <Widget>[\n                    Align(\n                      alignment: Alignment.topLeft,\n                      child: Text(\n                        "Select Payment Method : ",\n                        style: TextStyle(\n                            color: Colors.black54,\n                            fontSize: 16.0,\n                            fontWeight: FontWeight.bold),\n                      ),\n                    ),\n                    SizedBox(\n                      height: 7.0,\n                    ),\n                    Card(\n                      elevation: 8.0,\n                      child: Padding(\n                        padding: const EdgeInsets.all(10.0),\n                        child: Column(\n                          children: <Widget>[\n                            RadioListTile(\n                                activeColor: myTheme.primaryColor,\n                                title: Text("COD"),\n                                value: 1,\n                                groupValue: selectedPaymentMethod,\n                                onChanged: (value) =>\n                                    _changePayment(value)),\n                            SizedBox(\n                              height: 5.0,\n                            ),\n                            RadioListTile(\n                                activeColor: myTheme.primaryColor,\n                                title: Text("Paytm"),\n                                value: 2,\n                                groupValue: selectedPaymentMethod,\n                                onChanged: (value) =>\n                                    _changePayment(value)),\n                          ],\n                        ),\n                      ),\n                    ),\n                  ],\n                ),\n                Padding(\n                  padding: const EdgeInsets.all(10.0),\n                  child: Stack(\n                    alignment: Alignment.bottomCenter,\n                    children: <Widget>[\n                      Row(\n                        mainAxisAlignment: MainAxisAlignment.spaceBetween,\n                        children: <Widget>[\n                          Text(\n                            "Pay \xe2\x82\xb9499",\n                            style: TextStyle(\n                                fontSize: 16.0,\n                                fontWeight: FontWeight.bold),\n                          ),\n                          isOrderSuccessful\n                              ? RaisedButton(\n                                  onPressed: () =>\n                                      placeOrder(selectedPaymentMethod),\n                                  color: myTheme.primaryColor,\n                                  textColor: Colors.white,\n                                  child: Text(\n                                    "Place Order",\n                                    style: TextStyle(\n                                        fontWeight: FontWeight.bold,\n                                        fontSize: 16.0),\n                                  ))\n                              : CircularProgressIndicator(\n                                  valueColor: AlwaysStoppedAnimation<Color>(\n                                      myTheme.primaryColor))\n                        ],\n                      ),\n                    ],\n                  ),\n                )\n              ],\n            )),\n      );\n    });\n
Run Code Online (Sandbox Code Playgroud)\n\n

}

\n\n

setState函数代码:

\n\n
  _changePayment(int value) {\nprint(value);\nprint(selectedPaymentMethod);\nsetState(() {\n  selectedPaymentMethod = value;\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

}

\n

Vai*_*hak 6

朋友们,我自己做过。我使用了StatefulBuilder小部件并将其包裹Column在子列中,我将两个放在ReadioListTile了 onChanged 属性中,我将其_setState从构建器获得StatefulBuilder,并将付款方法变量的值设置为其值,然后它以我的方式正常工作想要它。

答案代码:

StatefulBuilder(
                          builder: (context, _setState) {
                            return Column(
                              children: <Widget>[
                                RadioListTile(
                                    activeColor: myTheme.primaryColor,
                                    title: Text("Cash on Delivery"),
                                    value: 1,
                                    groupValue: selectedPaymentMethod,
                                    onChanged: (value) => _setState(() {
                                          selectedPaymentMethod = value;
                                        })),
                                RadioListTile(
                                    activeColor: myTheme.primaryColor,
                                    title: Text("Paytm"),
                                    value: 2,
                                    groupValue: selectedPaymentMethod,
                                    onChanged: (value) => _setState(() {
                                          selectedPaymentMethod = value;
                                        })),
                              ],
                            );
                          },
                        ),
Run Code Online (Sandbox Code Playgroud)