簡體   English   中英

如何在flutter中保存checkboxListTile

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM