为了导航,我创建了一个简单的工厂类,用于生成一个ListTile,以向Navigator推送一个路由:
static Widget simpleNavRow(String text, BuildContext context, String route) {
return Column(
children: <Widget>[
ListTile(
title: Text(text),
onTap: () {
Navigator.pushNamed(context, route);
},
),
Divider(),
],
);
}
然而,我很快意识到支持推送widget(或尽可能从它们的类实例化)将是方便的。我无法弄清如何使“route”参数接受字符串或widget,因此创建了一个使用这两种类型之一初始化的类。这段代码可以工作,但是否有更好的方法来实现这个目的?
class NavTo {
String route;
Widget widget;
NavTo.route(this.route);
NavTo.widget(this.widget);
push(BuildContext context) {
if (route != null) {
Navigator.pushNamed(context, route);
}
if (widget != null) {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return widget;
}));
}
}
}
class ListHelper {
static final padding = EdgeInsets.all(12.0);
static Widget simpleNavRow(String text, BuildContext context, NavTo navTo) {
return Column(
children: <Widget>[
ListTile(
title: Text(text),
onTap: () {
navTo.push(context);
},
),
Divider(),
],
);
}
}
// usage:
// ListHelper.simpleNavRow('MyWidget', context, NavTo.widget(MyWidget()))
MaterialApp#onGenerateRoute
怎么样?这样你就可以使用pushNamed
,同时仍然有自由返回任何你想要的Route
。 - pskink