我有一个CheckboxListTile字段,在用户选择它之后,他将移至新页面以查看一些详细信息。用户移至下一页后出现的问题。用户的选择被删除。返回上一页后,找不到用户先前选择的选项。如何保存用户的选择数据,以便用户可以在返回上一页后看到自己的选择?
完整代码
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'LawsOfNewUser.dart';
void main() {
runApp(
EasyLocalization(
saveLocale: true,
supportedLocales: [Locale('en', 'US'),
],
path: 'assets/translations',
fallbackLocale: Locale('en', 'US'),
child: NewMembership(),
),
);
}
class NewMembership extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: LoginScreen(),
);
}
}
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SingleChildScrollView(
child: Container(
child: Column(
children: [
Card(
child: Column(
children: [
CheckboxListTile(
title: Text('Terms'.tr()),
value: false,
onChanged: (bool newValue) {
Navigator.push(context, new MaterialPageRoute(builder: (context) => new LawsUser()
),
);
}
),
],
),
),
],
),
),
),
),
);
}
}
我尝试使用shared_preferences,但不知道该怎么做。 如果有人知道解决此问题的方法,请帮助我。
答案 0 :(得分:0)
State managment是一个广泛的话题。这个想法是,当您执行Navigator.push...
时,您将创建一个新的小部件,因此该小部件处于其原始状态,并且没有任何状态恢复。但是route的真正威力在于,如果您使用Navigator.push...
,则实际上会创建一个小部件堆栈。因此,您的旧小部件仍在这里,但在新小部件之后。要删除新的并返回上一个,可以使用Navigator.pop
。
这是一个可行的示例:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(home: NewMembership()));
}
class NewMembership extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: LoginScreen(),
);
}
}
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
bool termsAccepted = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: SingleChildScrollView(
child: Container(
child: Column(
children: [
Card(
child: Column(
children: [
CheckboxListTile(
title: Text('Terms'),
value: termsAccepted,
onChanged: (bool newValue) {
termsAccepted = !termsAccepted;
setState(() {});
if (termsAccepted) {
Navigator.push(
context,
new MaterialPageRoute(builder: (context) => new SimplePage()),
);
}
}),
],
),
),
],
),
),
),
),
);
}
}
class SimplePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.pop(
context,
new MaterialPageRoute(builder: (context) => new LoginScreen()),
);
},
),
);
}
}
但是请注意,尽管在这种情况下可以很好地工作,但通常不足以处理整个应用程序状态。为此,您应该查看我在回答开始时给您的链接。