Home > OS >  Flutter: get bool value from snapshot
Flutter: get bool value from snapshot

Time:08-03

I am trying to show an on-boarding screen so to do so I call an async function where I get a Future<bool> weather this is the first time the user launched the app. Since its a Future value I have decided to use FutureBuilder.

Here is part of the code of what I am trying to do:

@override
Widget build(BuildContext context) {
return GetMaterialApp(
  home: FutureBuilder(
    future: firstLaunch, //Future<bool> value
    builder: (context, snapshot) {
      if (snapshot.hasData) {
        // What I would like to do is use either one of these lines
        // return _firstLaunch ? const OnboardingScreen() : const WelcomePage();
        // return snapshot.data ? const OnboardingScreen() : const WelcomePage();
      } else {
        return const WelcomePage();
      }
    },
  ),
);
}

The issue is that I am unable to use _firstLaunch within the FutureBuilder since its still considered a future value and snapshot.data does give me the correct value when I print it but the type is AsyncSnapshot<Object?> so I also cant seem to use it.

Does anyone have suggestions on how to solve this or possibly know of a better way to show the on-boarding screen?

CodePudding user response:

Prefer documentation:

https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html

Try this:

@override
Widget build(BuildContext context) {
return GetMaterialApp(
  home: FutureBuilder<bool>(
    future: firstLaunch, //Future<bool> value
    builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
      if (snapshot.hasData) {
        return snapshot.data ? const OnboardingScreen() : const WelcomePage();
      } else {
        return const WelcomePage();
      }
    },
  ),
);
}

CodePudding user response:

Use a bool inside has data

if (snapshot.hasData) {
    bool check = snapshot.data;
        return check ? const OnboardingScreen() : const WelcomePage();
      }

  • Related