即使用户重新启动应用Flutter,也只在应用中显示一次弹出窗口活动

hgb9j2n6  于 2023-03-03  发布在  Flutter
关注(0)|答案(3)|浏览(175)

我希望在用户完成调查后,在应用生命周期中只显示一次弹出式调查,这意味着当用户重新启动应用时,弹出式调查不会再次显示。现在的情况是,如果用户重新启动应用,弹出式调查仍会再次显示。
我们会感激你的帮助
我的代码弹出

void showGenexPopup() {
    WidgetsBinding.instance.addPostFrameCallback((_) {
      final GenexViewModel genexViewModel =
          Provider.of<GenexViewModel>(context, listen: false);

      if (!genexViewModel.videoTrigger) {
        genexViewModel.showSurvey(
          context: context,
          pageId: GenexPageId.SearchPage,
          duration: const Duration(seconds: 5),
        );
      }
    });
  }

我称之为:

@override
  void initState() {
    super.initState();
    showGenexPopup();
  }

我正在调用一个网页视图中的弹出窗口,我不知道它是否会对我想要实现的目标产生任何影响。
我有可能做到吗?

f8rj6qna

f8rj6qna1#

正如@amir_a14建议的那样,你应该使用共享首选项,在那里你保存一个键,指示用户在完成调查后接受了调查。然后在你调用show survey之前,在SharedPref中检查这个键,看看这个值是否设置为正确的值或者是否存在
一般来说是这样的

final prefs = await SharedPreferences.getInstance();

void showGenexPopup()async {
//get the key in sharedPref here 
final didUserTookSurvey = prefs.getBool('repeat');

  WidgetsBinding.instance.addPostFrameCallback((_) {
    final GenexViewModel genexViewModel =
      Provider.of<GenexViewModel>(context, listen: false);

    //check the key in sharedPref here 
  if (!genexViewModel.videoTrigger && !(didUserTookSurvey??false)) {
    genexViewModel.showSurvey(
      context: context,
      pageId: GenexPageId.SearchPage,
      duration: const Duration(seconds: 5),
      //Call this when the user completed the survey successfully
      onComplete:onCompleteSurvey;
    }
   });
  }

onCompleteSurvey(){
  try{
     await prefs.setBool('didUserTookSurvey', true);
  }catch(e){
   Log(e.toString());       
  }
}
y53ybaqx

y53ybaqx2#

Use SharedPrefrence library

import 'package:shared_preferences/shared_preferences.dart';

//showGenexPopup
 void showGenexPopup() async {

 final prefs = await SharedPreferences.getInstance();
 bool isSeen=await prefs.setBool('isSeen')??false;
   
  if(isSeen)
  {
  WidgetsBinding.instance.addPostFrameCallback((_) {
  final GenexViewModel genexViewModel =
      Provider.of<GenexViewModel>(context, listen: false);

  if (!genexViewModel.videoTrigger) {
    genexViewModel.showSurvey(
      context: context,
      pageId: GenexPageId.SearchPage,
      duration: const Duration(seconds: 5),
    );
     }
   await prefs.setBool('isSeen', true);
   });
  }
   }
js4nwp54

js4nwp543#

谢谢你们的回复。你们真的帮助我使用sharedPreference得到了我的答案。
这是对我有效的方法:

void showGenexPopup(BuildContext context) async {
   SharedPreferences prefs = await SharedPreferences.getInstance();
   bool? isFirstLoaded =
       prefs.getBool('is_first_loaded');
   if (isFirstLoaded == null) {
     WidgetsBinding.instance.addPostFrameCallback((_) {
       final GenexViewModel genexViewModel =
           Provider.of<GenexViewModel>(context, listen: false);

       if (!genexViewModel.videoTrigger) {
         genexViewModel.showSurvey(
           context: context,
           pageId: GenexPageId.SearchPage,
           duration: const Duration(seconds: 5),
         );
       }
     });
     prefs.setBool('is_first_loaded', false);
   }
 }

相关问题