[英]How to save checkboxListTile in flutter
我有一個 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 但不知道如何執行此操作。 如果有人知道這個問題的解決方案,請幫助我。
國家管理是一個廣闊的話題。 這個想法是,當您執行Navigator.push...
您創建了一個新的小部件,因此小部件處於其原始狀態並且您沒有任何狀態恢復。 然而,路由的真正威力在於,如果您使用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()),
);
},
),
);
}
}
但是請注意,雖然這在這種情況下效果很好,但通常不足以處理整個應用程序狀態。 為此,您應該查看我在本答案開頭提供的鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.