如何在flutter中保存checkboxListTile

时间:2020-10-23 19:44:10

标签: 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,但不知道该怎么做。 如果有人知道解决此问题的方法,请帮助我。

1 个答案:

答案 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()),
          );
        },
      ),
    );
  }
}

但是请注意,尽管在这种情况下可以很好地工作,但通常不足以处理整个应用程序状态。为此,您应该查看我在回答开始时给您的链接。