Flutter 颤振错误:提供程序无法访问导航中的路由
当我运行此程序时,我不断收到相同的错误,请协助Flutter 颤振错误:提供程序无法访问导航中的路由,flutter,dart,provider,Flutter,Dart,Provider,当我运行此程序时,我不断收到相同的错误,请协助 Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(App()); } class App extends StatelessWidget { final Color primar
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(App());
}
class App extends StatelessWidget {
final Color primaryColor = Color(0xff18203d);
@override
Widget build(BuildContext context) {
// ignore: todo
// TODO: implement build
return MultiProvider(
providers: [
Provider<AuthenticationService>(
create: (_) => AuthenticationService(FirebaseAuth.instance),
),
StreamProvider(
create: (_context) =>
_context.read<AuthenticationService>().authStateChanges,
initialData: null,
),
],
child: MaterialApp(
title: 'Mboka Horticulture',
theme: ThemeData(
primaryColor: primaryColor,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: AuthenticationWrapper(),
));
}
}
class AuthenticationWrapper extends StatelessWidget {
const AuthenticationWrapper({
Key? key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
// ignore: todo
// TODO: implement build
final firebaseuser = context.watch<User>();
if (firebaseuser != null) {
return Dashboard();
}
return Login();
}
}
Future main()异步{
WidgetsFlutterBinding.ensureInitialized();
等待Firebase.initializeApp();
runApp(App());
}
类应用程序扩展了无状态小部件{
最终颜色primaryColor=颜色(0xff18203d);
@凌驾
小部件构建(构建上下文){
//忽略:todo
//TODO:实现构建
回程多供应商(
供应商:[
提供者(
创建:()=>AuthenticationService(FirebaseAuth.instance),
),
流提供者(
创建:(_上下文)=>
_context.read().authStateChanges,
initialData:null,
),
],
孩子:MaterialApp(
标题:“姆博卡园艺”,
主题:主题数据(
primaryColor:primaryColor,
视觉密度:视觉密度。自适应平台密度,
),
主页:AuthenticationWrapper(),
));
}
}
类AuthenticationWrapper扩展了无状态小部件{
const AuthenticationWrapper({
钥匙?,钥匙,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
//忽略:todo
//TODO:实现构建
final firebaseuser=context.watch();
if(firebaseuser!=null){
返回仪表板();
}
返回登录名();
}
}
这是我一直犯的错误,我不明白
**提供者是“有范围的”。所以,如果在
那么路线呢
其他路由将无法访问该提供商
- You used a `BuildContext` that is an ancestor of the provider you are trying to read.
Make sure that AuthenticationWrapper is under your MultiProvider/Provider<User>.
This usually happens when you are creating a provider and trying to read it immediately.
For example, instead of:**
-您使用了“BuildContext”,它是您试图读取的提供程序的祖先。
确保AuthenticationWrapper位于MultiProvider/Provider下。
这通常发生在创建提供者并尝试立即读取它时。
例如,而不是:**
这是供应商吗?AuthenticationWrapper,添加此pleaseAuthenticationWrapper的代码段是一个无状态widgetdo检查此post@griffins AuthenticationWrapper是一个无状态Widget您正在创建和使用的提供程序都在同一个小部件主窗口中,因此所有内容都在同一个BuildContext上,并且在运行context.watch()时;Flatter将尝试在您的小部件树中查找模型,但由于您刚刚创建了模型,所以它找不到模型