【问题标题】:How to user string interpolation in Flutter to call a function如何在 Flutter 中使用字符串插值来调用函数
【发布时间】:2019-10-30 02:38:21
【问题描述】:

我有 2 个方法,tappedNext()tappedPrevious(),我需要通过传递字符串变量来调用此函数,例如 onTap: tapped + part + (),是否可以像 tapped${part}() 一样为此进行字符串插值?

【问题讨论】:

    标签: string flutter dart string-interpolation


    【解决方案1】:

    要将表达式的值放入字符串中,请使用${expression}。如果表达式是标识符,则可以省略{}

    下面是一些使用字符串插值的例子:

    String  '${3 + 2}'  =   Result '5'
    
    String  '${"word".toUpperCase()}'   = Result = 'WORD'
    
    String  '$myObject' = Result - The value of myObject.toString()
        
    

    代码示例

    下面的函数接受两个整数作为参数。使其返回一个字符串,其中包含两个用空格分隔的整数。例如,stringify(2, 3) 应该返回 '2 3'

    String stringify(int x, int y) {
      return '$x $y';
    }
    

    【讨论】:

      【解决方案2】:

      我当然不建议您这样做。相反,请使用简单的 if 语句。 但是既然你问有没有可能..

      简短回答,不(仅具有功能)。除非你在谈论方法,否则我们可以使用一些镜像。

      你需要导入镜像包,在dartpad上不行,所以在本地测试一下:

      import 'dart:mirrors';
      
      class MyClass {
        tappedNext() {
          print('Next Function');
        }
      
        tappedPrevious() {
          print('Previous Function');
        }
      }
      

      现在你必须从类中创建一个对象,创建它的镜像,然后使用Symbol以反射方式调用该方法。

      void main() {
        final clazz = MyClass();
        final mirror = reflect(clazz);
      
        final function = 'Next';
      
        Symbol s = Symbol('tapped$function');
        mirror.invoke(s, []).reflectee;
      }
      

      就是这样,控制台会打印:

      下一个函数

      【讨论】:

      • 非常感谢,我用了 if... else 绝对是个愚蠢的主意。
      猜你喜欢
      • 2019-07-28
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 2022-12-06
      相关资源
      最近更新 更多