gpt4 book ai didi

ios - 等价于 Flutter 中的 viewWillAppear()

转载 作者:行者123 更新时间:2023-12-01 15:23:15 36 4
gpt4 key购买 nike

我正在使用 Flutter 重建一个 iOS 应用程序,流程如下:
每次用户登陆主页时,都会从后端重新加载用户数据以检查是否有任何变化。

我在 Swift/iOS 中实现这一点的方法是使用 viewDidLoad() 函数。

我的 Flutter 代码是这样的:

class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
User user = User();

@override
void dispose() {
super.dispose();
}

@override
void initState() {
super.initState();
_fetchData(context);
}

@override
Widget build(BuildContext context) {
return Container(
color: RColor.COLOR_main,
child: Column(
children: [
Container(
height: MediaQuery.of(context).size.height / 7,
width: MediaQuery.of(context).size.width,
padding: EdgeInsets.all(20),
child: Container(
child: Text("This is the homepage"),
alignment: Alignment.bottomCenter,
),
),
],
));
}

Future _fetchData(BuildContext context) async {
_fetchUserAPI(context);
}

Future _fetchUserAPI(BuildContext context) async {
try {
SharedPreferences prefs = await SharedPreferences.getInstance();
var accessToken = prefs.getString("access_token");
var url = RConstants.API_BASE_URL + "/v1/users/self";
Response response = await Dio()
.get(url, options: Options(headers: {"Authorization": accessToken}));
setState(() {
user = User.fromJson(response.data);
});
} catch (e) {
print(e.toString());
Alert(
context: context,
title: "Something Went Wrong",
desc: "Something went wrong while fetching your user data",
type: AlertType.error)
.show();
}
}
}

但是,void initState() 不会在每次用户登陆主页时触发。实现这一目标的正确方法是什么?

最佳答案

好吧,这实际上取决于您所说的“每次用户登陆主页”的确切含义。
如果用户从 HomePage 导航通过Navigator.push查看其他 View 然后通过Navigator.pop返回然后 HomePage的状态保持不变,当然 initState方法不触发。
如果您想在 HomePage 上获得通知如果在导航器中它上面的路线被弹出,那么你需要使用 this方法,覆盖它,然后在其中你将能够调用 _fetchData()并更新主页的状态。
还有一件事:当你有一些像 _fetchData() 这样的异步调用时在 initState() 中调用它是错误的模式。或任何其他框架方法。因为它将被调用并且 build()几乎总是在异步调用的结果返回之前立即调用您状态的方法。处理这种情况的正确方法是使用 FutureBuilder小部件。
如果“每次用户登陆主页”意味着其他东西,例如应用程序在后台并被带到前台,或者当支持实现推送通知并且用户单击通知并打开应用程序时 - 这种情况也可以处理,但这是一个更广泛的主题。

关于ios - 等价于 Flutter 中的 viewWillAppear(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56511527/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com