Flutter:使用共享首选项并为变量设置最小值和最大值

Flutter: Using Shared Preferences and set min and max value for a variable

我正在使用一个名为“int _progs1 = 0;”的变量。我可以使用“if 语句”将此变量设置为最大值和最小值,它不会超过或低于指定值。

int _progs1 = 0;

TextButton(
       onPressed: () {
        if (_progs1 < 3)
         setState(() {
           _progs1 += 1;
             });
              debugPrint(' $_progs1 Up');
             },

TextButton(
       onPressed: () {
        if (_progs1 > 0)
         setState(() {
           _progs1 -= 1;
             });
              debugPrint(' $_progs1 Down');
             },

尝试对共享首选项使用相同的方法来存储它给我的错误值。

“未为类型 'Future' 定义运算符“<”。尝试定义运算符“<”。“

  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
  Future<int> _progs1;

  Future<void> _decrementProgS1() async {
    final SharedPreferences prefs = await _prefs;
    final int progs1 = (prefs.getInt('progs1') ?? 0) - 1;
    if (_progs1 < 3)
    setState(() {
      _progs1 = prefs.setInt("progs1", progs1).then((bool success) {
        return progs1;
      });
    });
  }

我做错了什么?我的方法错了吗?有更好的方法吗?能够使用定义值之间的变量上下移动并同时存储它。

提前致谢

只需使用简单的 int _progs1; 出现错误是因为您将 int 用于 future 并且您不能对 futures 执行逻辑运算符,因为它们的值是未知的。

 Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
 int _progs1;

  Future<void> _decrementProgS1() async {
    final SharedPreferences prefs = await _prefs;
    final int progs1 = await ((prefs.getInt('progs1') ?? 0) - 1);
    if (_progs1 < 3)
    {
      _progs1 = prefs.setInt("progs1", progs1).then((bool success) {
        return progs1;
      });
    }
  }

您也不需要 setState。当你想使用函数 _decrementProgS1() 时,请使用 await ,如下所示:

_progs1 = await _decrementProgS1()

感谢 Huthaifa 的帮助。我尝试了您的建议,并且编译没有错误。不幸的是,当我 运行 应用程序按下按钮时出现异常错误。

我尝试在屏幕上设置 3 个按钮来更改 0 和 3 之间的值。按钮 1 向上,按钮 2 向下,按钮 3 置零。

下面的代码是我保存值但没有设置值的最大值和最小值的代码。

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

class MyTest5Body extends StatefulWidget {
  @override
  _MyTest5BodyState createState() => _MyTest5BodyState();
}

class _MyTest5BodyState extends State<MyTest5Body> {
  final scaffoldKey = GlobalKey<ScaffoldState>();
  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
  Future<int> _progs1;

  Future<void> _incrementProgS1() async {
    final SharedPreferences prefs = await _prefs;
    final int progs1 = (prefs.getInt('progs1') ?? 0) + 1;

      setState(() {
        _progs1 = prefs.setInt("progs1", progs1).then((bool success) {
          return progs1;
        }) ;
      });
  }

  Future<void> _decrementProgS1() async {
    final SharedPreferences prefs = await _prefs;
    final int progs1 = 0;
    setState(() {
      _progs1 = prefs.setInt("progs1", progs1).then((bool success) {
        return progs1;
      }) ;
    });
  }

  Future<void> _resetProgS1() async {
    final SharedPreferences prefs = await _prefs;
    final int progs1 = 0;
    setState(() {
      _progs1 = prefs.setInt("progs1", progs1).then((bool success) {
        return progs1;
      }) ;
    });
  }

  @override
  void initState() {
    super.initState();
    _progs1 = _prefs.then((SharedPreferences prefs) {
      return (prefs.getInt('progs1') ?? 0);
    }) ;
  }

  @override
  Widget build(BuildContext context) {
    return CustomScrollView(
      slivers: <Widget>[
        SliverList(
          delegate: SliverChildListDelegate(
            [
              // Program Auswahl-------------------------------------------
              Container(
                height: 50.0,
                child: Row(children: <Widget>[
                  Container(
                    margin: const EdgeInsets.all(0),
                    child: TextButton(
                      onPressed: _incrementProgS1,
                      child: const Icon(Icons.arrow_upward, size: 30.0),
                      style: TextButton.styleFrom(
                        primary: Colors.orangeAccent[400],
                      ),
                    ),
                  ),
                  Container(
                      margin: const EdgeInsets.all(0),
                      child: TextButton(
                        onPressed: _decrementProgS1,
                        child: const Icon(Icons.arrow_downward, size: 30.0),
                        style: TextButton.styleFrom(
                            primary: Colors.greenAccent[700]),
                      )),
                  Container(
                      margin: const EdgeInsets.all(0),
                      child: TextButton(
                        onPressed: _resetProgS1,
                        child: const Icon(Icons.restore, size: 30.0),
                        style: TextButton.styleFrom(primary: Colors.blue[700]),
                      )),
                  Container(
                      padding: const EdgeInsets.symmetric(
                          horizontal: 5.0, vertical: 5.0),
                      child: FutureBuilder<int>(
                          future: _progs1,
                          builder: (BuildContext context,
                              AsyncSnapshot<int> snapshot) {
                        switch (snapshot.connectionState) {
                          case ConnectionState.waiting:
                            return const CircularProgressIndicator();
                          default:
                            return Text(
                              '${snapshot.data} Program ',
                              style: TextStyle(
                                fontSize: 25.0,
                                fontWeight: FontWeight.bold,
                                letterSpacing: 2.0,
                                color: Colors.blueGrey[500],
                              ),
                            );
                        }
                      })),
                ]),
              ),
            ],
          ),
        ),
      ],
    );
  }
}