使用用户的偏好设置进行计算

时间:2019-07-20 12:52:33

标签: flutter

不了解Internet上关于Flutter中共享偏好的所有这些解释,经过三天的搜索和尝试,我有些沮丧(一点都不正确)。所以我在这里喊我的英雄。

我正在使用Flutter的第一个应用程序工作。用于计算用户项目所需重量的体积。

我有4个屏幕,通过底部的栏激活。 1屏幕是设置屏幕,如果要测量体积(ml)的重量(gr),用户可以输入其(1)混合比,(2)液体重量和(3)布尔值。如果他们正在使用音量,则不需要的选项2会被隐藏。

我希望他们将其填写为设置。这些设置是我在其他页面之一上需要的公式。如果它们什么也没填,我有默认值。我不希望他们每次都必须填写这些设置,而只需填写一次。如果使用其他液体,则两次。 :-)

我已经尝试过SQFLITE软件包,但是我认为该软件包需要SHARED PREFERENCES。我已经在YouTube上观看了所有这些视频,我已经在Google上搜索并阅读并尝试了很多内容,但是我仍然不知道该怎么做以及将代码放置在什么地方。看来,如果我重新输入专家输入的内容,那我将是唯一失败的人。

是的,我是初学者(你们都曾经),现在我正在为这个话题而苦苦挣扎。 我对您的问题: 1.共享的软件包是我应用程序的最佳解决方案吗? 2.在哪里放置用于写入数据库的设置。 3.如何首次在此数据库中放置默认值。 4.是否可以在“设置”屏幕上设置一个值,然后在不使用导航的情况下在另一页上获取该值(因为我使用的是底部栏)。

当你读到最后时:谢谢!

    import 'package:flutter/material.dart';
import 'constants.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:async';

class SettingsPage extends StatefulWidget {
  @override
  SettingsPageState createState() => SettingsPageState();
}

class SettingsPageState extends State<SettingsPage> {
  int mixingRatio = 50;
  int liquidGravity = 115;
  bool weight = true;

  @override
  void initState() {
    super.initState();
  }

 Future<int> _getIntFromSharedPref() async {
   final prefs = await SharedPreferences.getInstance();
   final mixingRatio = prefs.getInt('mixingRatio');
   if (mixingRatio == null) {
     return 50;
   }
    return mixingRatio;
  }

  Future<void> _resetMixingRatio() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setInt('mixingRatio', 50);
}

   -----------------

                          onPressed: () {
                        setState(
                          () {
                            weight = true;
                            weightOrVolume = 'GR';
                          },
                        );
                      },

1 个答案:

答案 0 :(得分:1)

回答您的问题。

  1.   

    该软件包是否为我的应用程序提供了最佳解决方案?

对于保存设置,当然这是最好的软件包。

  1.   

    我在哪里放置用于写入数据库的设置。

您可以使用SharedPreference实例将设置保存在任何地方,例如:

sharedPrefs.putInt("key", 10);
  1.   

    如何首次在此数据库中放置默认值

您可以使用dart语法??

来获取它
int savedValue = sharedPrefs.getInt("key") ?? 0; // default value will be 0
  1.   

    是否可以在“设置”屏幕上设置一个值,并在另一个页面上获取该值,而无需使用导航。

是的,您可以通过在当前屏幕上使用全局变量或使用getInt进行检索来实现。