flutter - 颤振设置状态不更新底页函数中的变量值
问题描述
我有一个按钮,单击时我调用以下函数,该函数在下面创建一个底页。发生的是它基于列表数组值构建一个卡片列表。然后我想根据 onTap 手势更新其值的一张卡片。我注意到它检测到手势但不更新它的值。最重要的是,我有一个全局变量定义为
String _localPNumberSelected="";
在 onTap 我调用 setState
setState(() {
_localPNumberSelected=vList[index]["pNumber"].toString();
});
但这不会更新
children: [
new Text('$_localPNumberSelected'),
],
这是完整的代码。
void _callQuickListModalBottomSheet(context){
Future<void> future = showModalBottomSheet<void>(
context: context,
builder: (BuildContext bc){
return Container(
height: 280,
margin: new EdgeInsets.fromLTRB(200, 0, 10, 0),
child : new Container(
decoration: new BoxDecoration(
color: Color.fromRGBO(36, 46, 66, 1),
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(20),
topRight: const Radius.circular(20)
),
),
child: new Column(
children: <Widget>[
new Container(
margin: new EdgeInsets.fromLTRB(10, 10, 10, 0),
height:45,
child: new Column(
children: <Widget>[
new Card(
color: Colors.white,
child: Row (
children: <Widget>[
new Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
decoration: new BoxDecoration(
color: Colors.green,
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(5),
bottomLeft: const Radius.circular(5)
),
),
child: Icon(Icons.check, size: 20.0),
height: 27,
width: 30,
),
],
),
new Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: [
new Text('$_localPNumberSelected'),
],
),
],
)
)
]
)
),
new Container(
height:190,
child:
new ListView.builder(
shrinkWrap: true,
itemCount: vehicleListdata.length,
itemBuilder: (BuildContext ctxt, int index) {
return Container(
margin: new EdgeInsets.fromLTRB(10, 0, 10, 0),
width: 30.0,
height: 35.0,
child: Card(
color: Colors.white,
child: Row (
children: <Widget>[
new Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
decoration: new BoxDecoration(
color: Colors.amber,
borderRadius: new BorderRadius.only(
topLeft: const Radius.circular(5),
bottomLeft: const Radius.circular(5)
),
),
height: 27,
width: 10,
),
],
),
new Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: [
new GestureDetector(
onTap: () {
setState(() {
_localPNumberSelected=vList[index]["pNumber"].toString();
});
doSomething(vList[index]["pNumber"].toString());
},
child:new Text(vList[index]["pNumber"].toString()),
),
],
),
],
),
)
);
}
)
)
],
),
)
);
}
);
future.then((void value) => _closeModal(value));
}
解决方案
查看示例
String update = '更新';
///选择省市
void locationSheet() {
// showModalBottomSheet(
// context: context,
// builder: (BuildContext context) {
// return LocationPicker();
// });
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return StatefulBuilder(builder: (context,state){
return Center(
child: FlatButton(
onPressed: () {
updated(state);
},
child: new Text('$update')),
);
});
});
}
Future<Null> updated(StateSetter updateState) async {
updateState(() {
update = '更新后';
});
}
推荐阅读
- unix - 如何在以 cedella 作为分隔符的文件上运行 awk
- laravel - Laravel Spark Next 挂起等待订阅
- django - 当我运行收集静态命令时,Django 没有在浏览器中更新静态 css 文件设计
- python-3.x - python使用'del'从列表中删除一个元素
- api - 在没有 MVC 项目的情况下使用 Xero OAuth2 .Net SDK
- python - Kivy - 尝试使用 my.kv 文件时出错
- javascript - Javascript 和 HTML:单击提交时不显示验证警报消息
- firebase - 我在 Flutter itemBuilder 中不断收到此错误
- android - 如何在 Android 中保存 agora 流?
- laravel - 如何在 Laravel 8 中计算银行余额和银行总余额?