我是维巴夫·帕塔克。我在使用 RadioListTile 时遇到问题。我创建了两个 RadioListTile,其中在 onChnaged 属性上调用一个函数,其中在调用 setState 中将 selectedRadio 变量的值设置为我从函数中获得的值,并且它更改了变量值,但不反映对 Ui 的更改意味着它确实如此不选择按下的单选按钮。
\n\n我的代码在这里:
\n\nshowPaymentOptions() {\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 });\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n\nsetState函数代码:
\n\n _changePayment(int value) {\nprint(value);\nprint(selectedPaymentMethod);\nsetState(() {\n selectedPaymentMethod = value;\n});\nRun Code Online (Sandbox Code Playgroud)\n\n}
\n朋友们,我自己做过。我使用了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)
| 归档时间: |
|
| 查看次数: |
3246 次 |
| 最近记录: |