如何将弹出 window 中的值保存到其他 class 的实例中?
How to save values from popup window into an instance to other class?
我设计了一个 flutter 屏幕,其中我有一个按钮,按下 Button A
我得到一个弹出窗口 window,其中有 Button 1
添加新的文本字段,我们可以添加任意数量的文本字段,为此我使用了 flutter_form_bloc
依赖示例。然后在弹出窗口 window 中有另一个按钮,即 Button 2
,按下它会处理输入到文本字段中的数据并退出弹出窗口 window.
现在,当我再次按 Button A
打开弹出窗口时 window 所有文本字段都消失了,数据也消失了。我不希望发生这种情况。我希望那些应该在那里,直到主 flutter 屏幕存在或不存在。
此外,在弹出窗口 window 中按下 Button 2
后,数据应该被传递到 Button A
主屏幕的 class 并且应该存储在实例中,以便可以进一步处理传递的数据。
以下是获得想法的屏幕截图
[Image 1]1 [Image 2]2
代码
FormBlocListener<ListFieldFormBloc2, String, String>(
onSubmitting: (context, state) {
},
onSuccess: (context, state) {
String name1;
var parsedData = json.decode(state.successResponse);
List members = parsedData['members'];
members.forEach((member){
name1 = member['step'];
List<String> _step = [];
_step.add(member["step"]);
_AddStepsState().getsteps(members);
});
_AddStepsState(steps: members);
Navigator.pop(context);
},
onFailure: (context, state) {
Scaffold.of(context).showSnackBar(
SnackBar(content: Text(state.failureResponse)));
},
child: SingleChildScrollView(
physics: ClampingScrollPhysics(),
child: Column(
children: <Widget>[
BlocBuilder<ListFieldBloc<MemberFieldBloc2>,
ListFieldBlocState<MemberFieldBloc2>>(
bloc: formBloc.members,
builder: (context, state) {
if (state.fieldBlocs.isNotEmpty) {
return ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: state.fieldBlocs.length,
itemBuilder: (context, i) {
return MemberCard2(
memberIndex: i,
memberField: state.fieldBlocs[i],
onRemoveMember: () =>
formBloc.removeMember(i),
);
},
);
}
return Container();
},
),
RaisedButton(
color: Colors.blue[100],
onPressed: formBloc.addMember,
child: Text('ADD STEP'),
),
],
),
),
),
我试图通过 _AddStepsState(steps: members);
和 _AddStepsState().getsteps(members);
这些方式将生成的 LIST 传递给另一个 class 但两次都失败了。
我想将生成的文本字段中的值列表传递给另一个 class
而且我还希望当用户在 Image 1
中的 Screen1 中时,如果字段像 image 2
中那样被编辑,并且如果用户再次打开弹出屏幕,则字段应该保留在那里并且未删除。
我该如何实现?
如果需要更多信息,请告诉我
link 所使用的依赖项在这里 flutter form bloc
我最近创建了一个处理大量表单的应用程序,我采用的解决方案如下:
- 有一个名为
data_center.dart
的文件,您可以在其中定义 classes 来表示由表单创建的数据/显示在“评论”页面中。
class MyFormData{
String firstField;
String secondField;
int quantity;
// more attributes
// optional constructor
MyFormData({this.firstField, this.secondField, this.quantity});
}
- 创建一个变量来保存
data_center.dart
中 class 的实例
MyFormData currentMyFormDataInstance; // assign an instance every time a new form starts
- 在对话框中创建实例(例如)
import 'data_center.dart' as DataCenter;
// code removed for brevity
return showDialog(
context: context,
builder: (BuildContext context) {
// create an instance to hold the current form data
currentMyFormDataInstance = DataCenter.MyFormData();
return AlertDialog(...);
]);
});
- 实例中的存储控制器(假设我们有一个
TextFormField
)值
TextFormField(
controller: _myController,
onChanged: (String _incomingValue){
DataCenter.currentMyFormDataInstance.firstField = _incomingValue;
}
)
我不知道是否会出现任何严重缺陷或效率低下,但到目前为止,它对我来说效果很好,因为它让我可以轻松管理我收集的所有不同类型的数据组来自 UI.
此外,将这些数据存储为对象而不是像 Map
s 这样的数据类型让我可以通过添加命名构造函数或额外的方法轻松地转换它们,这些方法可以让我轻松地对我的数据进行常见和频繁的操作数据.
例如,如果您使用的是 Cloud Firestore。我可以添加以下命名构造函数来轻松地将 DocumentSnapshot
s 映射到 class 属性。
MyFormData.fromDocumentSnapshot(){...}
我设计了一个 flutter 屏幕,其中我有一个按钮,按下 Button A
我得到一个弹出窗口 window,其中有 Button 1
添加新的文本字段,我们可以添加任意数量的文本字段,为此我使用了 flutter_form_bloc
依赖示例。然后在弹出窗口 window 中有另一个按钮,即 Button 2
,按下它会处理输入到文本字段中的数据并退出弹出窗口 window.
现在,当我再次按 Button A
打开弹出窗口时 window 所有文本字段都消失了,数据也消失了。我不希望发生这种情况。我希望那些应该在那里,直到主 flutter 屏幕存在或不存在。
此外,在弹出窗口 window 中按下 Button 2
后,数据应该被传递到 Button A
主屏幕的 class 并且应该存储在实例中,以便可以进一步处理传递的数据。
以下是获得想法的屏幕截图 [Image 1]1 [Image 2]2
代码
FormBlocListener<ListFieldFormBloc2, String, String>(
onSubmitting: (context, state) {
},
onSuccess: (context, state) {
String name1;
var parsedData = json.decode(state.successResponse);
List members = parsedData['members'];
members.forEach((member){
name1 = member['step'];
List<String> _step = [];
_step.add(member["step"]);
_AddStepsState().getsteps(members);
});
_AddStepsState(steps: members);
Navigator.pop(context);
},
onFailure: (context, state) {
Scaffold.of(context).showSnackBar(
SnackBar(content: Text(state.failureResponse)));
},
child: SingleChildScrollView(
physics: ClampingScrollPhysics(),
child: Column(
children: <Widget>[
BlocBuilder<ListFieldBloc<MemberFieldBloc2>,
ListFieldBlocState<MemberFieldBloc2>>(
bloc: formBloc.members,
builder: (context, state) {
if (state.fieldBlocs.isNotEmpty) {
return ListView.builder(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: state.fieldBlocs.length,
itemBuilder: (context, i) {
return MemberCard2(
memberIndex: i,
memberField: state.fieldBlocs[i],
onRemoveMember: () =>
formBloc.removeMember(i),
);
},
);
}
return Container();
},
),
RaisedButton(
color: Colors.blue[100],
onPressed: formBloc.addMember,
child: Text('ADD STEP'),
),
],
),
),
),
我试图通过 _AddStepsState(steps: members);
和 _AddStepsState().getsteps(members);
这些方式将生成的 LIST 传递给另一个 class 但两次都失败了。
我想将生成的文本字段中的值列表传递给另一个 class
而且我还希望当用户在 Image 1
中的 Screen1 中时,如果字段像 image 2
中那样被编辑,并且如果用户再次打开弹出屏幕,则字段应该保留在那里并且未删除。
我该如何实现?
如果需要更多信息,请告诉我
link 所使用的依赖项在这里 flutter form bloc
我最近创建了一个处理大量表单的应用程序,我采用的解决方案如下:
- 有一个名为
data_center.dart
的文件,您可以在其中定义 classes 来表示由表单创建的数据/显示在“评论”页面中。
class MyFormData{
String firstField;
String secondField;
int quantity;
// more attributes
// optional constructor
MyFormData({this.firstField, this.secondField, this.quantity});
}
- 创建一个变量来保存
data_center.dart
中 class 的实例
MyFormData currentMyFormDataInstance; // assign an instance every time a new form starts
- 在对话框中创建实例(例如)
import 'data_center.dart' as DataCenter;
// code removed for brevity
return showDialog(
context: context,
builder: (BuildContext context) {
// create an instance to hold the current form data
currentMyFormDataInstance = DataCenter.MyFormData();
return AlertDialog(...);
]);
});
- 实例中的存储控制器(假设我们有一个
TextFormField
)值
TextFormField(
controller: _myController,
onChanged: (String _incomingValue){
DataCenter.currentMyFormDataInstance.firstField = _incomingValue;
}
)
我不知道是否会出现任何严重缺陷或效率低下,但到目前为止,它对我来说效果很好,因为它让我可以轻松管理我收集的所有不同类型的数据组来自 UI.
此外,将这些数据存储为对象而不是像 Map
s 这样的数据类型让我可以通过添加命名构造函数或额外的方法轻松地转换它们,这些方法可以让我轻松地对我的数据进行常见和频繁的操作数据.
例如,如果您使用的是 Cloud Firestore。我可以添加以下命名构造函数来轻松地将 DocumentSnapshot
s 映射到 class 属性。
MyFormData.fromDocumentSnapshot(){...}