【问题标题】:how to save state of added IconButtons after restarting the app in flutter重新启动应用程序后如何保存添加的图标按钮的状态
【发布时间】:2021-10-09 02:10:11
【问题描述】:

我是 dart 和 Flutter 的初学者,目前正在开发 Android 上的 Flutter 应用程序

我想让用户通过单击浮动添加按钮将文件夹形状的图标按钮添加到应用程序,但重新启动应用程序后我将无法访问添加的文件夹 (IconButton);拯救我的状态的最佳方法是什么? 这是返回新文件夹的类:

import 'package:flutter/material.dart';
 class Folder extends StatelessWidget {
  final String name;
  Folder(this.name);


  @override
  Widget build(BuildContext context) {
    return Container(
      // decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), color: Colors.red),
      child: Column(children: [
        IconButton(
            icon: const Icon(
              Icons.folder,
              color: Colors.red,
            ),
            iconSize: 80,
            onPressed: null),
        Text(name),
      ]),
    );
  }
}

这是我认为应该存储在共享首选项中的文件夹对象列表:

List<Widget> A = [
    Column(
      children: [
        IconButton(
            icon: const Icon(Icons.folder, color: Colors.deepPurple),
            iconSize: 80,
            onPressed: null),
        Text("A")
      ],
    ),
    Column(
      children: [
        IconButton(
            icon: const Icon(
              Icons.folder,
              color: Colors.lightBlueAccent,
            ),
            iconSize: 80,
            onPressed: null),
        Text("B")
      ],
    ),
  ];

我还提供了它应该如何工作的屏幕截图,我真的需要知道如何保存我的更改。 提前谢谢你。

before after

【问题讨论】:

    标签: android flutter dart


    【解决方案1】:

    App重启时使用该包保存和加载数据或状态

    https://pub.dev/packages/shared_preferences

    这是共享首选项类

    import 'package:shared_preferences/shared_preferences.dart';
        
    class UserDefault {
      static UserDefault instance = UserDefault._internal();
      factory UserDefault() => instance;
    
      UserDefault._internal();
      late SharedPreferences _prefs;
    
      init() async {
        _prefs = await SharedPreferences.getInstance();
      }
      
      set folder(List<String> folderList) {
        String folderListJsonString = jsonEncode(folderList);
        _prefs.setString("folder", folderListJsonString);
      }
    
      List<String> get folder {
        final jsonString = _prefs.getString("folder") ?? "";
        if (jsonString.isEmpty) return [];
        final folderList = jsonDecode(jsonString).cast<String>();
        return folderList;
      }
    
    }
    

    这是您需要使用或保存时的代码。

    //save (maybe folder name)
    UserDefault().folder = ["newfolder", "newfolder_two"];
    
    //use
    print(UserDefault().folder);
    

    别忘了 pubspec.yaml 需要添加 shared_preferences 依赖项

    【讨论】:

    • 是的,我听说过它,但由于它是一个包含文件夹项目的列表,我不知道如何保存它。您知道将其存储在共享首选项中的方法吗?
    • 您好,谢谢,但我认为您只是在设置和接收字符串,它不适用于对象列表,而是字符串列表。我编辑了这个问题,希望现在更清楚。
    • 您可以使用.cast&lt;YourObject&gt; 而不是.cast&lt;String&gt;,因为它应该这样工作
    猜你喜欢
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多