- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 onGenerateRoute 中使用我的 UserProvider?
我想检查用户是否是使用 UserProvider.isLogged() 的记录器,但是当我尝试获取 Userprovider 时,我必须传递我在路由器中没有的上下文。
我已经尝试将 generateRoute 更改为非静态并通过构造函数将上下文传递给 Router 但它抛出错误。
main.dart
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: <SingleChildCloneableWidget>[
ChangeNotifierProvider(builder: (_) => BottomNavigationBarProvider()),
ChangeNotifierProvider(builder: (_) => UserProvider()),
],
child: MaterialApp(
initialRoute: '/',
onGenerateRoute: Router.generateRoute,
title: 'Title,
theme: ThemeData(
primarySwatch: Colors.blue,
),
),);
}
}
class Router {
static Route<dynamic> generateRoute(RouteSettings settings) {
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (_) => HomePage());
break;
case '/login':
return MaterialPageRoute(builder: (_) => LoginPage());
break;
case '/register':
return MaterialPageRoute(builder: (_) => RegisterPage());
break;
case '/terms':
return MaterialPageRoute(builder: (_) => TermsPage());
break;
case '/home':
return MaterialPageRoute(builder: (_) {
return HomePage();
});
break;
default:
return MaterialPageRoute(
builder: (_) => Scaffold(
body: Center(
child: Text('No route defined for ${settings.name}')),
));
break;
}
}
}
onGenerateRoute: Router(context).generateRoute,
class Router {
Router(this.context);
BuildContext context;
Route<dynamic> generateRoute(RouteSettings settings) {
final UserProvider userProvider = Provider.of<UserProvider>(context);
userProvider.isLogged();
switch (settings.name) {
case '/':
return MaterialPageRoute(builder: (_) => HomePage());
break;
case '/login':
return MaterialPageRoute(builder: (_) => LoginPage());
break;
case '/register':
return MaterialPageRoute(builder: (_) => RegisterPage());
break;
case '/terms':
return MaterialPageRoute(builder: (_) => TermsPage());
break;
case '/home':
return MaterialPageRoute(builder: (_) {
return HomePage();});
break;
default:
return MaterialPageRoute(
builder: (_) => Scaffold(
body: Center(
child: Text('No route defined for ${settings.name}')),
));
break;
}
}
}
最佳答案
在这种情况下 context
不包括提供者。所以可以通过将MaterailApp放入MultiProvider的builder方法中来实现,例如:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context1) {
return MultiProvider(
providers: <SingleChildCloneableWidget>[
ChangeNotifierProvider(builder: (_) => BottomNavigationBarProvider()),
ChangeNotifierProvider(builder: (_) => UserProvider()),
],
builder: (context2, _) => MaterialApp(
initialRoute: '/',
onGenerateRoute: Router(context2).generateRoute,
title: 'Title',
theme: ThemeData(
primarySwatch: Colors.blue,
),
),
);
}
}
现在
UserProvider
可以从
context2
访问调用
Provider.of<UserProvider>(context2)
关于flutter - 如何在 onGenerateRoute 中使用 provider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57275594/
在我的主要方法中,我有 onGenerateRoute: (route) { print(route); return Router.generateRoute(rou
如何在 onGenerateRoute 中使用我的 UserProvider? 我想检查用户是否是使用 UserProvider.isLogged() 的记录器,但是当我尝试获取 Userprovid
onGenerateRoute的好处或用例是什么?和 Flutter 中的路由。 在我的应用程序第一页里面 MaterialApp我们可以为我们的应用程序定义路由,就像我们可以用 onGenerate
在MaterialApp的onGenerateRoute方法中,每次创建Widgets看起来很浪费,route改变了Widget也会失去context。这些小部件 new Desktop(sugar)
我正在使用 MaterialApp 中的 onGenerateRoute 在我的 flutter 应用程序中实现导航。 对于其中一条路线,当我按下 Appbar 中 Flutter 提供的后退按钮时出
我有一个包含多个页面的 Flutter 应用程序,有些页面需要用户登录才能访问该页面。 我遇到的主要问题是,对于我的 kDashboardRoute我需要调用 async检查用户是否登录并设置bool
在任何给定情况下是否有任何理由使用一个而不是另一个?我试图弄清楚为什么有两种方法可以做到这一点。我指的是“带参数导航”食谱食谱: https://flutter.dev/docs/cookbook/n
我为我的应用程序启用了 firebase 分析,我正在尝试让 firebase 调试 View 显示我的页面更改。使用下面的代码,目前没有跟踪任何内容,我不明白为什么。我已经按照 firebase 文
我在 MaterialApp 上使用 onGenerateRoute 参数进行路由。 MaterialApp( ... onGenerateRoute: Router.generateRout
我是一名优秀的程序员,十分优秀!