Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振:从新屏幕返回数据对象_Flutter_Dart - Fatal编程技术网

Flutter 颤振:从新屏幕返回数据对象

Flutter 颤振:从新屏幕返回数据对象,flutter,dart,Flutter,Dart,我想从第二个屏幕返回数据作为对象。在这个示例中,它们只以字符串的形式发送,若我想以json对象的形式返回数据呢。我尝试过: 我用 课程 class LeaveFilterType { String shortName; String fullName; LeaveFilterType({this.shortName, this.fullName}); factory LeaveFilterType.fromJson(Map<String, dynamic> j

我想从第二个屏幕返回数据作为对象。在这个示例中,它们只以字符串的形式发送,若我想以json对象的形式返回数据呢。我尝试过: 我用

课程

class LeaveFilterType {
   String shortName;
   String fullName;
   LeaveFilterType({this.shortName, this.fullName});
   factory LeaveFilterType.fromJson(Map<String, dynamic> json) => _$LeaveFilterTypeFromJson(json);
   Map<String, dynamic> toJson() => _$LeaveFilterTypeToJson(this);
}
屏幕2

IconButton(
    splashColor: AppColor.white,
    icon: Icon(Icons.check),
    color: AppColor.white,
    onPressed: () async {
        print(leaveRequest.toJson());
        var filterLeave = FilterLeave(type: leaveRequest, startDate: startDateController.text, endDate :endDateController.text);
         Navigator.of(context).pop("${leaveRequest}");
        }
    ),
 )
总是出错

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: FormatException: Unexpected character (at character 1)
 Instance of 'LeaveFilterType'

据我所知,您可以从
Navigator.pop(上下文、结果)

在我的一个项目中,我通过一个对话框做了以下工作:

DialogResponseObject returnValue = await showDialog<DialogResponseObject>(
  context: context,
  builder: (BuildContext context) =>
      CustomDialog(),
);
DialogResponseObject returnValue=Wait showDialog(
上下文:上下文,
生成器:(BuildContext上下文)=>
CustomDialog(),
);
在对话框中:

Navigator.pop<DialogResponse>(context,DialogResponseObject(dialogAnswer));
Navigator.pop(上下文,DialogResponseObject(dialogAnswer));
你的案子也应该如此。 实际上,您可以从第一个屏幕输入Navigator.push,不需要序列化

   FilterLeave result = await Navigator.push<FilterLeave>(context, MaterialPageRoute(builder: (BuildContext context) => FilterView(leaveRequestTypeList: requestTypeList, requestState: RequestState.Supervisor)));


FilterLeave filterLeave = FilterLeave(type: leaveRequest, startDate: startDateController.text, endDate :endDateController.text);
     Navigator.of(context).pop<FilterLeave>(leaveRequest);
filterlave result=await Navigator.push(上下文,MaterialPageRoute(生成器:(BuildContext上下文)=>FilterView(leaveRequestTypeList:requestTypeList,requestState:requestState.Supervisor));
FilterLeave FilterLeave=FilterLeave(类型:leaveRequest,startDate:startDateController.text,endDate:endDateController.text);
Navigator.of(context.pop)(leaveRequest);

“在这个示例中,它们只以字符串的形式发送,如果我想以json对象的形式返回数据该怎么办。”-那么你的意思是
pop(leaveRequest)
?为什么要
弹出
字符串
?我在侧双引号中使用了${…},什么是双引号?它是一个
字符串
不是吗?那么,您是否要返回
字符串
?我想返回leaveRequest对象请参见上面的第一条注释
   FilterLeave result = await Navigator.push<FilterLeave>(context, MaterialPageRoute(builder: (BuildContext context) => FilterView(leaveRequestTypeList: requestTypeList, requestState: RequestState.Supervisor)));


FilterLeave filterLeave = FilterLeave(type: leaveRequest, startDate: startDateController.text, endDate :endDateController.text);
     Navigator.of(context).pop<FilterLeave>(leaveRequest);