首页 > 解决方案 > 如何创造未来成为数组可用的常规 int 吗?

问题描述

我正在尝试保留一个共享首选项计数器来跟踪我的应用程序中的数组。我遇到的错误是我正在返回 Future 的值并尝试使用它来定义数组索引。

这是代码:

var titles = [];

  Future<int> getCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    int currentCount = prefs.getInt('counter');
    print('Current Count: $currentCount');
    return currentCount;
  }

  getValue() async {
    final value = await getCounter();
    return value;
  }

  Widget _displayPage()
  {
    int index = getValue();

    titles[index] = 'text';
    return ListView.builder(
      itemCount: 1,
      itemBuilder: (BuildContext context, int index) {
        assert(context != null);
        return new ListTile(
          title: Text('Temp Text'),
          onTap: () async {
            //getCounter();
          }
        );
      }
      );
  }

当我尝试构建此页面时,我得到的确切错误是:“类型 Future 不是 int 的子类型”

我尝试过的事情: 1. 像上面的代码一样,我尝试制作多个函数将其更改为常规 int 2. 我尝试在数组索引的定义中直接使用 getCounter() 的返回值,如下所示:

titles[getCounter()] = 'text

标签: flutterdart

解决方案


您收到错误是因为您没有使用FutureBuilder. 尝试使用FutureBuilder. displayPage()您可以通过用下面的代码替换您的小部件来解决它。检查下面的代码:它工作得很好。

 Widget _displayPage()
  {
    // use a future builder
    return FutureBuilder<int>(
      // assign a function to it (your getCounter method)
      future: getCounter(),
        builder: (context, snapshot) {
        if(snapshot.hasData){
          // print your integer value
          print(snapshot.data);
          return new ListTile(
              title: Text('Temp Text'),
              onTap: () {
              }
          );
        } else {
          return Text(snapshot.error.toString());
        }
        }
    );
  }

我希望这有帮助。


推荐阅读