Flutter:找不到 FutureBuilder 上面的 Provider
Flutter: could not find the Provider above FutureBuilder
我正在尝试导航到一个屏幕,其中取决于 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
我只需要用 StreamProvider 包装整个 MaterialApp
我正在尝试导航到一个屏幕,其中取决于 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
我只需要用 StreamProvider 包装整个 MaterialApp