Flutter:找不到FutureBuilder上方的提供者

时间:2020-10-01 08:27:02

标签: flutter provider flutter-futurebuilder

我正尝试转到一个屏幕,该屏幕取决于3个因素:

  1. 应用是否已运行
  2. 用户是否为空
  3. 电子邮件是否经过验证。

import 'package:client/providers/auth_provider.dart';
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';

import '../screens/home_screen.dart';
import '../screens/login_screen.dart';

class Wrapper extends StatefulWidget {
  @override
  _WrapperState createState() => _WrapperState();
}

class _WrapperState extends State<Wrapper> {
  FirebaseAuth auth = FirebaseAuth.instance;

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

  @override
  Widget build(BuildContext ctx) {
    return FutureBuilder(
        future: hasAlreadyStarted(),
        builder: (ctx, snapshot) {
          return Provider.of<User>(ctx) != null &&
                  snapshot.data == true &&
                  AuthProvider().isEmailVerified
              ? HomeScreen()
              : LoginScreen();
        });
  }

  Future<bool> hasAlreadyStarted() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    try {
      if (prefs.getBool("hasRun") == null) {
        await AuthProvider().logout();
        setState(() {
          prefs.setBool("hasRun", true);
        });
        return true;
      } else {
        return true;
      }
    } catch (error) {
      setState(() {
        prefs.setBool("hasRun", null);
      });
      return false;
    }
  }
}

屏幕本身可以正常工作,但是当我从另一个屏幕Navigate Could not find the correct Provider<User> above this FutureBuilder<bool> Widget 时会出现错误。

www.foo.com

您能解释一下错误并给我解决方法吗?谢谢:D

1 个答案:

答案 0 :(得分:0)

我只需要用StreamProvider包装整个MaterialApp