dart 为什么每次我进入页面都会出现警报?

q43xntqr  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(149)

所以我在主页上有警报,欢迎新用户注册后/在,但每次当我再次回到主页时,它会显示我警报。

@override
  void initState() {
    super.initState();
    Timer.run(() => showAlert(context: context));
  }

  void showAlert({required BuildContext context}) {
    showDialog(
      context: context,
      builder: (context) {
        return BackdropFilter(
          filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
          child: CustomAnnounceCard(
            title: '⚙️ Welcome to Beta test',
            positiveTap: () => Navigator.of(context).pop(),
          ),
        );
      },
    );
  }

Here you can see alert by itself
伙计们,帮我做一次提醒,所以新用户只能在登录后才能看到

wlsrxk51

wlsrxk511#

您必须在服务器端或移动设备中保存一个状态,使用共享首选项存储一个标志,指示警报是否已显示。然后有条件地显示警报。
在下面的代码中,我使用了共享首选项来说明我的意思。

@override
void initState() {
  super.initState();
  Timer.run(() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    bool shown = prefs.getBool('alertShown') ?? false;
    if (!shown) {
      showAlert(context: context);
      prefs.setBool('alertShown', true);
    }
  });
}
gfttwv5a

gfttwv5a2#

有很多方法可以解决这个问题,我会给予你最简单的。在类StatefullWidget中声明一个bool,将其命名为isNew,并通过在bool后添加?使其可为空,就像这样bool? isNew;。然后为你声明的bool创建一个构造函数,之后用下面的代码替换你的函数initState()

@override
  void initState() {
    super.initState();
    if(widget.isNew)Timer.run(() => showAlert(context: context));
  }

然后转到您的注册页面,并在导航功能中添加主页类isNew: true,如以下代码:

Navigator.of(context).push(MaterialPageRoute(builder: (context) => HomePage(isNew: true)));

相关问题