I would say it's just a convention. The above can be re-written as
readLocal() async {
prefs = await SharedPreferences.getInstance();
setState(() {
id = prefs.getString('id') ?? '';
if (id.hashCode <= peerId.hashCode) {
groupChatId = '$id-$peerId';
} else {
groupChatId = '$peerId-$id';
}
});
}
Both will do the same thing. Calling setState(() {})
after mutating the state variable
looks neat and reabable.
As per the implementation section of setState
, it will below things in order.
- Assertions. If any assert fails, throws exception and stops there.
- Execute the callback function (
final dynamic result = fn() as dynamic;
)
- Ask framework to rebuild(
_element.markNeedsBuild();
)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…