作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
对于导航,我构建了一个简单的工厂类,它生成一个将路由推送到 Navigator 的 ListTile:
static Widget simpleNavRow(String text, BuildContext context, String route) {
return Column(
children: <Widget>[
ListTile(
title: Text(text),
onTap: () {
Navigator.pushNamed(context, route);
},
),
Divider(),
],
);
}
但是,我很快意识到支持推送小部件也很方便(或者如果可能的话从它们的类中实例化)。我无法弄清楚如何使“路由”参数接受字符串或小部件,因此我创建了一个用这两种类型之一进行初始化的类。此代码有效,但是否有更好的方法来实现此目的?
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()))
最佳答案
由于您期望的是多种类型中的一种,那么使用 dynamic
怎么样,然后在 NavTo 的 push 方法中,您可以检查类型:
class NavTo {
dynamic route;
push(BuildContext context) {
if (route is String) {
...
} else if (route is Widget) {
...
}
}
}
关于function - 有没有办法在 Dart 中与两种类型进行争论?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53236840/
我是一名优秀的程序员,十分优秀!