Flutter 如何在flatter中使用provider或valuenotifier将数据从子小部件传递到父小部件
这是我的家长小部件Flutter 如何在flatter中使用provider或valuenotifier将数据从子小部件传递到父小部件,flutter,provider,Flutter,Provider,这是我的家长小部件 class AddUserextends StatefulWidget { final ScrollController controller; AddUser(this.controller); @override _AddUser createState() => _AddUser(); } class _AddUserToManagePropertyState extends State<AddUserToManageProp
class AddUserextends StatefulWidget {
final ScrollController controller;
AddUser(this.controller);
@override
_AddUser createState() =>
_AddUser();
}
class _AddUserToManagePropertyState extends State<AddUserToManageProperty> {
late TextEditingController _firstNameCtrl;
late TextEditingController _lastNameCtrl;
late TextEditingController _phoneNoCtrl;
late ValueNotifier<num?> _category;
final _scaffoldKey = GlobalKey<ScaffoldState>();
final _formKey = GlobalKey<FormState>();
final ValueNotifier<bool> _formStateEmitter = ValueNotifier(false);
final ValueNotifier<bool> isSelected = ValueNotifier(false);
@override
void initState() {
super.initState();
_firstNameCtrl = TextEditingController(text: '');
_lastNameCtrl = TextEditingController(text: '');
_phoneNoCtrl = TextEditingController(text: '');
_firstNameCtrl.addListener(() {
_formStateEmitter.value = _fieldsStatus();
});
_lastNameCtrl.addListener(() {
_formStateEmitter.value = _fieldsStatus();
});
_phoneNoCtrl.addListener(() {
_formStateEmitter.value = _fieldsStatus();
});
}
bool _fieldsStatus() {
return HwValidators.required(_firstNameCtrl.text) == null &&
HwValidators.required(_lastNameCtrl.text) == null &&
HwValidators.required(_phoneNoCtrl.text) == null;
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: HwAppBar(
title: 'Add team member',
),
body: Form(
key: _formKey,
child: FormWidget(
maintainSafeArea: false,
showBackBtn: false,
fields: [
HwTextField(
label: 'FIRST NAME',
controller: _firstNameCtrl,
validator: HwValidators.nameValidator,
keyboardType: TextInputType.text,
),
HwSizedBox(height: 4),
HwTextField(
label: 'LAST NAME',
controller: _lastNameCtrl,
validator: HwValidators.nameValidator,
keyboardType: TextInputType.text,
),
HwSizedBox(height: 4),
HwTextField(
label: 'PHONE NO',
controller: _phoneNoCtrl,
validator: HwValidators.phoneValidator,
keyboardType: TextInputType.phone,
),
HwSizedBox(height: 4),
HwSizedBox(height: 4),
HwText('ACCESS LEVEL'),
UserAccessListTiles(),
HwSizedBox(
height: 4,
),
],
),
),
);
}
}
最后,这两个小部件UserAccessListTileRadio()
和CustomAccess()
都有一组RadioListTile,用户可以从中选择,我希望所选的选项在原始父小部件中作为表单的一部分可用
我该怎么做,请帮助。我建议您使用状态管理,即Bloc或Provider e、 g提供者 制作一个扩展了ChangeNotifierProvider的模型
class MyProviderModel extends ChangeNotifierProvider{
int yourChosenValue;
void updateChosenValue() {
// Your logic
notifyListeners();
}
}
父窗口小部件中的初始化提供程序
Provider(
create: (_) => MyProviderModel(),
child: Consumer<MyProviderModel>(
builder: (_, a, child) {
return // Your Form
},
)
)
提供程序(
创建:()=>MyProviderModel(),
儿童:消费者(
建筑商:(uu,a,child){
返回//您的表格
},
)
)
在子窗口小部件中更新MyProviderModel
context.read<MyProviderModel>().updateChosenValue();
context.read();
父窗口小部件中的Init Provider您能告诉我父窗口小部件中的Init Provider是什么意思吗?检查编辑后的答案
Provider(
create: (_) => MyProviderModel(),
child: Consumer<MyProviderModel>(
builder: (_, a, child) {
return // Your Form
},
)
)