flutter - 挂载小部件后如何显示值?
问题描述
如何显示已保存在共享首选项中的硬币?
我有readCoins
方法可以获取我想要显示的内容。我可以显示currentCoin
然后使用按钮更新它,但我想在将CoinBar 小部件添加到元素树时更新Coins 。
如何在挂载小部件后从 shared_preferences 中读取值。
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: CoinBar(
awardCoin: 4,
),
),
),
),
);
}
}
class CoinBar extends StatefulWidget {
final int awardCoin;
const CoinBar({Key key, this.awardCoin}) : super(key: key);
@override
_CoinBarState createState() => _CoinBarState();
}
class _CoinBarState extends State<CoinBar> {
Future<int> recordedCoin = readCoins();
var currentCoin = 0;
addAwardThenUpdateCurrentCoin() async {
await addAwardToCoin(widget.awardCoin);
final _currentCoinOnSP = await readCoins();
setState(() {
currentCoin = _currentCoinOnSP;
});
}
@override
build(BuildContext context) {
return Row(
children: [
Text("$currentCoin Coin"),
ElevatedButton(
onPressed: () => addAwardThenUpdateCurrentCoin(),
child: Text('update'),
)
],
);
}
}
Future<int> readCoins() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
int coin = prefs.getInt('coin');
return coin;
}
addAwardToCoin(int award) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
int _existingCoins = await readCoins();
await prefs.setInt('coin', ((_existingCoins ?? 0) + award));
}
我需要使用 FutureBuilder 吗?或者是否可以addAwardThenUpdateCurrentCoin
在页面加载时触发方法?
可以在挂载小部件后调用
我习惯于从 vue.js 生命周期钩子中运行方法,但 Flutter 似乎使用了不同的方法。
@override
void initState() {
super.initState();
// CAN NOT GET final _currentCoinOnSP = await readCoins();
currentCoin = _currentCoinOnSP;
}
解决方案
推荐阅读
- image - Vue、TypeScript、多文件组件、图像未得到处理
- javascript - 将html转换为反应组件后JS无法正常工作
- webpack - Webpack - 无法读取未定义的属性“entryOption”
- unity3d - AddRelativeForce() 不相对加力
- angular - .NET 核心 API 控制器从不接收来自 Angular 客户端的正文
- javascript - 我正在用 javascript 制作重力模拟器,但我不知道如何使碰撞工作
- c# - 如何从gridview中获取价值
- java - 如何在运行时注册 WebSecurityConfigs?
- sql - SQL 过滤查询
- python - 将 Python 变量中的值添加到 Cypher 语句