关闭 BottomSheet Flutter 时如何将数据保留在其中?

问题描述 投票:0回答:1

我对 Flutter(和编程)还很陌生。

我有一个 BottomSheet,其中包含 ChoiceChips 和一些开关。一切都很好,但是当我关闭 BottomSheet 时,它不会保存开关和选择芯片的状态。 我正在尝试找到一种方法,即使在关闭 BottomSheet 时也能保留我的选择和开关状态。

flutter bottom-sheet persist
1个回答
0
投票

即使关闭 BottomSheet 时也要保存数据,即保存用户数据,例如用户选择执行此操作的值。如果您不使用任何类型的状态管理(如 Provider),则必须将数据保存在父窗口小部件中flutter_bloc等 此代码将为您提供如何执行此操作的一个很好的示例,然后您可以在代码中使用您的自定义

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Bottom Sheet Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> selectedChips = [];
  bool switchValue = false;

  final chipOptions = ['Item 1', 'Item 2', 'Item 3'];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          child: Text('Open BottomSheet'),
          onPressed: () {
            showModalBottomSheet(
                context: context,
                builder: (context) {
                  return Column(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Wrap(
                        children: chipOptions.map((item) {
                          return ChoiceChip(
                            label: Text(item),
                            selected: selectedChips.contains(item),
                            selectedColor: Colors.green,
                            onSelected: (selected) {
                              setState(() {
                                selected
                                    ? selectedChips.add(item)
                                    : selectedChips.remove(item);
                              });
                            },
                          );
                        }).toList(),
                      ),
                      Switch(
                        value: switchValue,
                        onChanged: (value) {
                          setState(() {
                            switchValue = value;
                          });
                        },
                      ),
                      ElevatedButton(
                        child: Text('Close'),
                        onPressed: () {
                          Navigator.pop(context);
                        },
                      )
                    ],
                  );
                });
          },
        ),
      ),
    );
  }
}

如果我的回答有帮助,请不要忘记投票🙏️并使其成为接受的答案

© www.soinside.com 2019 - 2024. All rights reserved.