flutter - 如何创造未来成为数组可用的常规 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
解决方案
您收到错误是因为您没有使用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());
}
}
);
}
我希望这有帮助。
推荐阅读
- php - 在 PHP 中,如何获得两个时间戳之间的准确(非近似)总周数、月数和年数?
- node.js - 如何使用 react native fs 将选定的文件发送到节点服务器?
- amazon-web-services - AWS Cognito 从用户池中删除所有用户
- flutter - Flutter中如何实现Scroll Controller(Scroll Widget)?
- active-directory - 如何使用ldp.exe中的搜索功能搜索类(用户)属性(必须包含)
- javascript - taggingJS 在输入时抛出错误。又名句号
- python - 如何在 Python 中选择任何网站的所有 XPATH
- kotlin - 嵌套在泛型父类中的类构造函数的函数参考
- android - Android SQlite 数据库我收到此错误:E/SQLiteLog: (1) 表 tbl_Individual_Registration 没有名为 Long2 的列
- php - 无法加载请求文件