如何在小部件内创建多个 BuildContext
How to create multiple BuildContext inside widget
这是我的代码
Widget homeDashBoardCards(title, image, BuildContext context) {
return GestureDetector(
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DashBoardScreen(),
),
),
);
}
我只需要能够更改此 context 以选择页面,而不是创建大量 Widgets。
homeDashBoardCards('Categories', 'chii-icon.png', context),
喜欢在这个案例中创建 2 个或更多案例...
builder: (context) => DashBoardScreen
举个例子:
builder: (context) => case "1" = DashBoardScreen
case "2" = FavoriteScreen
谢谢大家...
1。我认为问题是什么
你想要的不是 100% 从问题中清楚,但我认为你只是想要一个函数,里面有一个 switch
返回用户应该去哪个页面?
在这种情况下,您可能需要查看:
2。一种可能的解决方案
创建一个 switch
函数来决定要切换到哪个页面。我强烈建议不要使用 String
s,而是使用 enum
s。但两者皆有可能。
enum Screens {dashboard, favorite}
Widget screenSwitcher(Screens screenEnum) {
switch (screenEnum) {
case Screens.dashboard:
return DashBoardScreen();
case Screens.favorite:
return FavoriteScreen();
default:
throw Exception;
}
}
请注意,如果您有一个以 return
、throw
或 continue
结尾的非空 case
子句,则不需要 break
。 default
子句不需要 break
.
- Return 通过调用切换器函数进行路由时的屏幕 — 如果需要,您显然可以为函数创建更多参数 —:
Widget homeDashBoardCards(title, image, Screens screenEnum, BuildContext context) {
return GestureDetector(
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => screenSwitcher(screenEnum),
),
),
);
}
3。延伸阅读
如果您使用命名路由,您的代码将更加简单易读,如本答案第一部分所述。此外,如果路由对您的应用非常重要且复杂,您可能需要考虑在 pub.dev 包主机中查找或创建包。
如果您接受我上面分享的解决方案代码,您将通过不同的小部件传递变量,这不是很面向对象,也不是 Flutter 方式。然后你应该考虑状态共享包来解决这个问题。最著名的两个是 Fireship 的 BLoC and the Provider packages, but you can also do it with rxdart
and the get_it
package, check this video 摘要。
这是我的代码
Widget homeDashBoardCards(title, image, BuildContext context) {
return GestureDetector(
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DashBoardScreen(),
),
),
);
}
我只需要能够更改此 context 以选择页面,而不是创建大量 Widgets。
homeDashBoardCards('Categories', 'chii-icon.png', context),
喜欢在这个案例中创建 2 个或更多案例...
builder: (context) => DashBoardScreen
举个例子:
builder: (context) => case "1" = DashBoardScreen
case "2" = FavoriteScreen
谢谢大家...
1。我认为问题是什么
你想要的不是 100% 从问题中清楚,但我认为你只是想要一个函数,里面有一个 switch
返回用户应该去哪个页面?
在这种情况下,您可能需要查看:
2。一种可能的解决方案
创建一个
switch
函数来决定要切换到哪个页面。我强烈建议不要使用String
s,而是使用enum
s。但两者皆有可能。enum Screens {dashboard, favorite} Widget screenSwitcher(Screens screenEnum) { switch (screenEnum) { case Screens.dashboard: return DashBoardScreen(); case Screens.favorite: return FavoriteScreen(); default: throw Exception; } }
请注意,如果您有一个以
return
、throw
或continue
结尾的非空case
子句,则不需要break
。default
子句不需要break
.- Return 通过调用切换器函数进行路由时的屏幕 — 如果需要,您显然可以为函数创建更多参数 —:
Widget homeDashBoardCards(title, image, Screens screenEnum, BuildContext context) { return GestureDetector( onTap: () => Navigator.push( context, MaterialPageRoute( builder: (context) => screenSwitcher(screenEnum), ), ), ); }
3。延伸阅读
如果您使用命名路由,您的代码将更加简单易读,如本答案第一部分所述。此外,如果路由对您的应用非常重要且复杂,您可能需要考虑在 pub.dev 包主机中查找或创建包。
如果您接受我上面分享的解决方案代码,您将通过不同的小部件传递变量,这不是很面向对象,也不是 Flutter 方式。然后你应该考虑状态共享包来解决这个问题。最著名的两个是 Fireship 的 BLoC and the Provider packages, but you can also do it with rxdart
and the get_it
package, check this video 摘要。