1

我正在尝试导航到取决于 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

你能解释一下错误并给我一个解决方案。感谢:D

4

1 回答 1

0

我只需要用 StreamProvider 包装整个 MaterialApp

于 2020-10-01T08:57:49.253 回答