我正在嘗試在具有滑塊的模態底部作業表內構建一個表單。但是,無論我做什么,滑塊都保持禁用狀態。
我的showModalBottomSheet電話:
void getForm(BuildContext context) async {
final data = await showModalBottomSheet<Map<String, dynamic>?>(
constraints: BoxConstraints.tight(const Size.square(400)),
context: context,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(8),
topRight: Radius.circular(8),
),
),
builder: (context) {
return StatefulBuilder(builder: (context, setState) {
return Padding(
padding: const EdgeInsets.all(10.0),
child: ResearchInput(setState),
);
});
},
);
我的表單代碼:
class ResearchInput extends StatefulWidget {
const ResearchInput(this.setFunction, {Key? key}) : super(key: key);
static const String routeName = '/research-input';
final Function(void Function()) setFunction;
@override
_ResearchInputState createState() => _ResearchInputState();
}
class _ResearchInputState extends State<ResearchInput> {
final _formKey = GlobalKey<FormState>();
final _ebayPattern = RegExp(
r'^(https?://)?(www\.)?ebay.com/itm/\d $',
);
final _trendsPattern = RegExp(
r'^(https?://)?trends.google.com/trends/explore?geo=US&q=(.*)$',
);
@override
Widget build(BuildContext context) {
Map<String, dynamic> productData = {
'date': DateTime.now(),
'variations': 0.0,
};
return Form(
key: _formKey,
child: Center(
child: SizedBox(
width: 500,
child: SingleChildScrollView(
child: Column(
children: <Widget>[
//TextFields
Row(
children: [
const Text('Variations'),
Slider(
key: const ValueKey('variations'),
value: 0,
onChanged: (value) {
setState(() {
productData['variations'] = value;
});
},
min: 0,
max: 4,
divisions: 4,
label: "${productData['variations']}",
),
],
),
//other TextFields
我曾嘗試使用 中的 pass through setState StatefulBuilder,但這并沒有改變任何東西
在這里觀看視頻:https : //youtu.be/uSg5YC0vFkI
uj5u.com熱心網友回復:
它不會改變,因為productData 它在 build 方法內部并且每次獲得以前的狀態。
利用 initState
late Map<String, dynamic> productData;
@override
void initState() {
productData = {
'date': DateTime.now(),
'variations': 0.0,
};
super.initState();
}
并重命名StatfulBuilder'ssetstate以避免混淆并使用它來更新對話框 UI。
return StatefulBuilder(
builder: (context, setStateSB) {
//...
onChanged: (value) {
setStateSB(() {
productData['variations'] = value;
});
},
uj5u.com熱心網友回復:
添加 SingleChildScrollView(),
回傳 SingleChildScrollView()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/399243.html
