gpt4 book ai didi

function - 有没有办法在 Dart 中与两种类型进行争论?

转载 作者:IT王子 更新时间:2023-10-29 06:37:13 26 4
gpt4 key购买 nike

对于导航,我构建了一个简单的工厂类,它生成一个将路由推送到 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com