【发布时间】:2021-01-04 03:14:02
【问题描述】:
我遇到了颤振问题,当用户按下特定按钮时,我创建了一个弹出对话框,他可以在其中选中复选框。
问题是 setState() 上的复选框没有更新,就在我关闭弹出对话框并再次打开它之后,我可以看到我检查了它们。
我在弹出对话框中设置了 setState() 不是很好吗?我似乎看不出问题出在哪里。
这是代码:
编辑:更新代码:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
class AlwaysDisabledFocusNode extends FocusNode {
@override
bool get hasFocus => false;
}
class MultiLanguagePopupProduct extends StatefulWidget {
@override
_MultiLanguagePopupProductState createState() =>
_MultiLanguagePopupProductState();
}
class _MultiLanguagePopupProductState extends State<MultiLanguagePopupProduct> {
int selectedIndex = -1;
String text = '';
@override
Widget build(BuildContext context) {
return StatefulBuilder(
builder: (context, setState) {
return Container(
child: TextField(
focusNode: AlwaysDisabledFocusNode(),
enableInteractiveSelection: false,
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(FontAwesomeIcons.boxOpen),
),
labelText: 'Name and language: $text ',
labelStyle:
TextStyle(
fontWeight: FontWeight.bold, color: Colors.lightGreen),
),
onTap: () =>
showDialog(
context: context,
builder: (context) {
return AlertDialog(
scrollable: true,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
title: Text('Multilanguage for product'),
content: Column(
children: <Widget>[
DataTable(
onSelectAll: (val) {
setState(() {
selectedIndex = -1;
text = '';
});
},
columns: [
DataColumn(label: Text('Language')),
DataColumn(label: Text('Translation')),
],
rows: [
DataRow(
selected: 0 == selectedIndex,
onSelectChanged: (val) {
setState(() {
selectedIndex = 0;
text = 'RO';
}
);
},
cells: [
DataCell(
Text(
"RO",
textAlign: TextAlign.left,
style: TextStyle(
fontWeight: FontWeight.bold),
), onTap: () {
setState(() {
selectedIndex = 0;
text = 'RO';
print('RO is clicked');
});
}),
DataCell(
TextField(
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'paine'),
),
),
]),
DataRow(
selected: 1 == selectedIndex,
onSelectChanged: (val) {
setState(() {
selectedIndex = 1;
text = 'EN';
});
},
cells: [
DataCell(
Text(
"EN",
textAlign: TextAlign.left,
style: TextStyle(
fontWeight: FontWeight.bold),
), onTap: () {
setState(() {
selectedIndex = 1;
text = 'EN';
print('EN is clicked');
});
}),
DataCell(
TextField(
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'bread'),
),
),
]),
DataRow(
selected: 2 == selectedIndex,
onSelectChanged: (val) {
setState(() {
selectedIndex = 2;
text = 'FR';
});
},
cells: [
DataCell(
Text(
"FR",
textAlign: TextAlign.left,
style: TextStyle(
fontWeight: FontWeight.bold),
), onTap: () {
setState(() {
selectedIndex = 2;
text = 'FR';
print('FR is clicked');
});
}),
DataCell(
TextField(
decoration: InputDecoration(
border: InputBorder.none,
hintText: 'pain'),
),
),
]),
],
),
],
),
actions: <Widget>[
FlatButton(
onPressed: () => Navigator.of(context).pop(),
child: Text('OK')),
FlatButton(
onPressed: () => Navigator.of(context).pop(),
child: Text('CANCEL')),
],
);
},
),
),
);
},
);
}
}
【问题讨论】:
-
试试 StatefulBuilder,api.flutter.dev/flutter/widgets/StatefulBuilder-class.html@Alexandru Buruiana
-
它不能与 StatefulBuilder 一起工作,没有错误,但它保持不变。
-
通常它可以工作,我对 modalsheet 有同样的问题,它对我有用,你能显示尝试过的代码吗,你试过
Subaharan VelStatefulBuilder@Alexandru Buruiana 提供的代码吗 -
我更新了代码。