0

这是我的代码。

我想在此代码中使用 shared_preferences 以便用户可以选择自己的字体大小,并且该字体大小适用于整个应用程序。

但是,我被困在使用 shared_preferences 保存它的部分。我尝试参考下面链接中的文章,但没有保存。仍然返回空值。

Flutter,如何将字体大小选项保存到 sharedpreference 中?

如何使用 shared_preferences 保存字体大小?

class MyApp2 extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp2> {
  int? _changeFontSize;
  final List<int> _fontSizeList = [10, 11,12,13,14,15];

  @override
  void initState() {
    WidgetsBinding.instance!.addPostFrameCallback((_) {
      //Retrieving font size
      getFontSize().then((value) => setState(() {
        _changeFontSize = value as int?;
      }));
    });
    super.initState();
  }

  void addDefaultValueToSharedPreferences() async {
    final sharedPreferences = await SharedPreferences.getInstance();
    await sharedPreferences.setInt('fontsize', 1);
  }
  Future<int?> getFontSize() async {
    final sharedPreferences = await SharedPreferences.getInstance();
    sharedPreferences.getInt('fontsize');
  }

  Future<void> updateFontSize(int updatedSize) async {
    final sharedPreferences = await SharedPreferences.getInstance();
    await sharedPreferences.setInt('fontsize', updatedSize);
  }



  @override
  Widget build(BuildContext context) {
    print(_changeFontSize);
    print(SharedPreferences.getInstance());
    return Center(
          child: Column(
            children: [
              Card(
                margin: EdgeInsets.only(bottom: 3),
                child: ListTile(
                  title: Text("Font Size"),
                  trailing: DropdownButtonHideUnderline(
                    child: DropdownButton(
                      isExpanded: false,
                      value: _changeFontSize,
                      items: _fontSizeList.map((myFontSize) {
                        return DropdownMenuItem(
                          child: Text(myFontSize.toString()),
                          value: myFontSize,
                        );
                      }).toList(),
                      onChanged: (value) async {
                        setState(() {
                          _changeFontSize = value as int?;
                        });
                        //Updating font size
                        await updateFontSize(value as int);
                      },
                      hint: Text("Select FontSize"),
                    ),
                  ),
                ),
              ),
            ],
          ),
        );
  }
}
4

1 回答 1

0

您必须将return添加到 getFontSize 方法

Future<int?> getFontSize() async {
    final sharedPreferences = await SharedPreferences.getInstance();
    return sharedPreferences.getInt('fontsize');
  }
于 2021-11-17T20:01:24.910 回答