我如何从不同的页面获取数据并使用 sharedpreferences 在 flutter 中将该数据呈现到另一个页面
How i can get data from the diffrent pages and render that data into another page using shared preferences in flutter
这里我有一个注册流程,当我填写第一页的所有详细信息时,当我按下下一步时,它将存储到共享首选项并转到下一页。填满所有页面和页面末尾后,我想使用共享首选项快速打印所有数据。
这是项目的完整源代码,您可以在其中获取包含代码的所有页面,
https://github.com/rutvikgumasana/signup
我建议您应该只使用一页,并为此使用 PageView
或 IndexedStack
。
使用 IndexedStack
,您一次只能显示一个子窗口小部件,并在单击按钮时切换当前索引。但在这种情况下,您必须自己创建动画,因为 IndexedStack
不提供默认动画。
如果您使用 PageView
,您将拥有默认动画,也可以在单击按钮时切换它。
它还为您提供滑动手势,可以使用
禁用
PageView(physics:new NeverScrollableScrollPhysics())
试试这个,
创建一个对象 class(POJO Class) 并将数据存储在共享首选项中,每当用户单击下一步/提交按钮时。然后,到达最终屏幕后,从首选项中获取数据并显示。
只需将导航中的数据从一个 class 传递到另一个 class,看看下面的代码我做了一些更改
报名模特class
import 'dart:convert';
SignUpModel signUpModelFromJson(String str) => SignUpModel.fromJson(json.decode(str));
String signUpModelToJson(SignUpModel data) => json.encode(data.toJson());
class SignUpModel {
String businessLegalName;
int businessPhoneNo;
int businessYear;
SignUpModel({
this.businessLegalName,
this.businessPhoneNo,
this.businessYear,
});
factory SignUpModel.fromJson(Map<String, dynamic> json) => SignUpModel(
businessLegalName: json["business_legal_name"] == null ? null : json["business_legal_name"],
businessPhoneNo: json["business_phone_no"] == null ? null : json["business_phone_no"],
businessYear: json["business_year"] == null ? null : json["business_year"],
);
Map<String, dynamic> toJson() => {
"business_legal_name": businessLegalName == null ? null : businessLegalName,
"business_phone_no": businessPhoneNo == null ? null : businessPhoneNo,
"business_year": businessYear == null ? null : businessYear,
};
}
BspSignupPage 中的更改 class
SignUpModel model = SignUpModel();
model.businessLegalName = clrbusinessname.text;
model.businessPhoneNo = clrphone.text as int;
model.businessYear = clrestablishedyear.text as int;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BspUnlicensedSignupPage(
signUpModel: model,
),
),
);
BspUnlicensedSignupPage 中的更改
class BspUnlicensedSignupPage extends StatefulWidget {
static const String routeName = "/bspUnlicensedSignup";
final SignUpModel signUpModel;
BspUnlicensedSignupPage({
Key key,
@required this.signUpModel,
}) : super(key: key);
@override
_BspUnlicensedSignupPageState createState() =>
_BspUnlicensedSignupPageState();
}
并处于初始状态方法
@override
void initState() {
// TODO: implement initState
super.initState();
debugPrint('Page1 Data: ${widget.signUpModel.businessLegalName}');
}
这里我有一个注册流程,当我填写第一页的所有详细信息时,当我按下下一步时,它将存储到共享首选项并转到下一页。填满所有页面和页面末尾后,我想使用共享首选项快速打印所有数据。
这是项目的完整源代码,您可以在其中获取包含代码的所有页面, https://github.com/rutvikgumasana/signup
我建议您应该只使用一页,并为此使用 PageView
或 IndexedStack
。
使用 IndexedStack
,您一次只能显示一个子窗口小部件,并在单击按钮时切换当前索引。但在这种情况下,您必须自己创建动画,因为 IndexedStack
不提供默认动画。
如果您使用 PageView
,您将拥有默认动画,也可以在单击按钮时切换它。
它还为您提供滑动手势,可以使用
PageView(physics:new NeverScrollableScrollPhysics())
试试这个, 创建一个对象 class(POJO Class) 并将数据存储在共享首选项中,每当用户单击下一步/提交按钮时。然后,到达最终屏幕后,从首选项中获取数据并显示。
只需将导航中的数据从一个 class 传递到另一个 class,看看下面的代码我做了一些更改
报名模特class
import 'dart:convert';
SignUpModel signUpModelFromJson(String str) => SignUpModel.fromJson(json.decode(str));
String signUpModelToJson(SignUpModel data) => json.encode(data.toJson());
class SignUpModel {
String businessLegalName;
int businessPhoneNo;
int businessYear;
SignUpModel({
this.businessLegalName,
this.businessPhoneNo,
this.businessYear,
});
factory SignUpModel.fromJson(Map<String, dynamic> json) => SignUpModel(
businessLegalName: json["business_legal_name"] == null ? null : json["business_legal_name"],
businessPhoneNo: json["business_phone_no"] == null ? null : json["business_phone_no"],
businessYear: json["business_year"] == null ? null : json["business_year"],
);
Map<String, dynamic> toJson() => {
"business_legal_name": businessLegalName == null ? null : businessLegalName,
"business_phone_no": businessPhoneNo == null ? null : businessPhoneNo,
"business_year": businessYear == null ? null : businessYear,
};
}
BspSignupPage 中的更改 class
SignUpModel model = SignUpModel();
model.businessLegalName = clrbusinessname.text;
model.businessPhoneNo = clrphone.text as int;
model.businessYear = clrestablishedyear.text as int;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BspUnlicensedSignupPage(
signUpModel: model,
),
),
);
BspUnlicensedSignupPage 中的更改
class BspUnlicensedSignupPage extends StatefulWidget {
static const String routeName = "/bspUnlicensedSignup";
final SignUpModel signUpModel;
BspUnlicensedSignupPage({
Key key,
@required this.signUpModel,
}) : super(key: key);
@override
_BspUnlicensedSignupPageState createState() =>
_BspUnlicensedSignupPageState();
}
并处于初始状态方法
@override
void initState() {
// TODO: implement initState
super.initState();
debugPrint('Page1 Data: ${widget.signUpModel.businessLegalName}');
}