Flutter 在三元运算符中使用多个语句时如何避免“避免使用不必要的语句”
这就是我想做的: 检查列表是否包含“something”,如果为true=>删除它=>添加“anything”=>打印列表,否则=>添加“something”=>打印列表Flutter 在三元运算符中使用多个语句时如何避免“避免使用不必要的语句”,flutter,dart,Flutter,Dart,这就是我想做的: 检查列表是否包含“something”,如果为true=>删除它=>添加“anything”=>打印列表,否则=>添加“something”=>打印列表 List<String> components = List<String>(); ListTile( title: Text('Title'), onTap: () { components.contains('something') ? () { components.r
List<String> components = List<String>();
ListTile(
title: Text('Title'),
onTap: () {
components.contains('something')
? () {
components.removeWhere((item) => item == 'something');
components.add('anything');
}
: components.add('something');
print(components);
}
)
它说“避免使用不必要的语句。避免使用不必要的语句”。有没有更好的方法来实现我的目标?像这样试试,有很多方法可以更有效地实现这一目标
List<String> components = List<String>();
void fun1(int index, dynamic otherData) {
components.removeWhere((item) => item == 'something');
components.add('anything');
print('sflbknsfb');
}
void fun2 () {
print('ssvskfjfsflbknsfb');
components.add('something');
}
ListTile(
title: Text('Title'),
// onTap: () {
// components.contains('something') ? fun1() : fun2();
// },
//Or
onTap:() => components.contains('something') ? fun1() : fun2(),
),
试着这样做,有很多方法可以更有效地做到这一点
List<String> components = List<String>();
void fun1(int index, dynamic otherData) {
components.removeWhere((item) => item == 'something');
components.add('anything');
print('sflbknsfb');
}
void fun2 () {
print('ssvskfjfsflbknsfb');
components.add('something');
}
ListTile(
title: Text('Title'),
// onTap: () {
// components.contains('something') ? fun1() : fun2();
// },
//Or
onTap:() => components.contains('something') ? fun1() : fun2(),
),
普通函数定义如下所示
myFunction(){
...
...
}
这只是一种声明而已
要执行它们,必须像从somwhere调用myFunction一样调用它
同样,匿名函数的定义如下
() { //without name
..
..
}
因此,要执行,需要在末尾添加
您仅在?之后给出函数定义?。您必须通过在末尾添加来调用该函数
ListTile(
title: Text('Title'),
onTap: () {
components.contains('something')
? () {
components.removeWhere((item) => item == 'something');
components.add('anything');
}() //TODO: Make it as function call
: components.add('something');
print(components);
},
)
普通函数定义如下所示
myFunction(){
...
...
}
这只是一种声明而已
要执行它们,必须像从somwhere调用myFunction一样调用它
同样,匿名函数的定义如下
() { //without name
..
..
}
因此,要执行,需要在末尾添加
您仅在?之后给出函数定义?。您必须通过在末尾添加来调用该函数
ListTile(
title: Text('Title'),
onTap: () {
components.contains('something')
? () {
components.removeWhere((item) => item == 'something');
components.add('anything');
}() //TODO: Make it as function call
: components.add('something');
print(components);
},
)
为了保持代码可读性和可维护性,最好执行以下操作:
ListTile(
title: Text('Title'),
onTap: _onTapTitle,
);
void _onTapTitle() {
if (components.contains('something')) {
components.removeWhere((item) => item == 'something');
components.add('anything');
} else {
components.add('something');
}
print(components);
}
如果需要将一些数据传递给_onTapTitle,可以执行以下操作:
onTap: () => _onTapTitle(data),
此外,如果您使用bloc模式,那么最好将_onTapTitle逻辑移动到bloc。为了保持代码可读性和可维护性,最好执行以下操作:
ListTile(
title: Text('Title'),
onTap: _onTapTitle,
);
void _onTapTitle() {
if (components.contains('something')) {
components.removeWhere((item) => item == 'something');
components.add('anything');
} else {
components.add('something');
}
print(components);
}
如果需要将一些数据传递给_onTapTitle,可以执行以下操作:
onTap: () => _onTapTitle(data),
此外,如果您使用bloc模式,最好将_onTapTitle逻辑移动到bloc。实际的小部件树要复杂得多,ListTile本身在ListView.builder中,函数需要索引,但感谢您的回复。那么复杂的是什么呢?您可以将索引作为参数传递给函数,并可以对Listview的索引平铺执行任何操作。ListView是从ShowModalBottom调用的函数返回的值,其中一些值在该函数中初始化。稍后我将尝试重构它,因为您建议实际的小部件树要复杂得多,ListTile本身在ListView.builder中,函数需要索引,但是感谢回复,那么复杂的是什么呢?您可以将索引作为参数传递给函数,并可以对Listview的索引平铺执行任何操作。ListView是从ShowModalBottom调用的函数返回的值,其中一些值在该函数中初始化。我稍后会尝试重构它,正如你所建议的那样。这完全正确地回答了我的问题,谢谢。但是你能解释一下我为什么需要补充一点吗,这似乎是不对的me@FederickJonathan我编辑了我的答案。我不是英语母语&不擅长解释。希望你能理解我的解释是的,我现在理解了你编辑的答案,谢谢。这回答了我的问题,非常正确,谢谢。但是你能解释一下我为什么需要补充一点吗,这似乎是不对的me@FederickJonathan我编辑了我的答案。我不是英语母语&不擅长解释。希望你理解我的解释是的,我现在理解了你编辑过的答案,谢谢,阿洛蒂稍后会尝试这样重构它。谢谢你的建议,我稍后会尝试这样重构它。谢谢你的建议