Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在三元运算符中使用多个语句时如何避免“避免使用不必要的语句”_Flutter_Dart - Fatal编程技术网

Flutter 在三元运算符中使用多个语句时如何避免“避免使用不必要的语句”

Flutter 在三元运算符中使用多个语句时如何避免“避免使用不必要的语句”,flutter,dart,Flutter,Dart,这就是我想做的: 检查列表是否包含“something”,如果为true=>删除它=>添加“anything”=>打印列表,否则=>添加“something”=>打印列表 List<String> components = List<String>(); ListTile( title: Text('Title'), onTap: () { components.contains('something') ? () { components.r

这就是我想做的: 检查列表是否包含“something”,如果为true=>删除它=>添加“anything”=>打印列表,否则=>添加“something”=>打印列表

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我编辑了我的答案。我不是英语母语&不擅长解释。希望你理解我的解释是的,我现在理解了你编辑过的答案,谢谢,阿洛蒂稍后会尝试这样重构它。谢谢你的建议,我稍后会尝试这样重构它。谢谢你的建议