Flutter 将函数传递给列表视图生成器的项目

Flutter pass functions to items for list view builder

我想做的是我有一个带有图标和东西的 ListView,它们就像应用程序中最常用功能的小快捷方式。

    List _shortcuts = [
    {
      'name': 'HORN',
      'icon': Icons.circle_outlined,
      'selection': false,
      'func': (String dummy) {
        // do something
        print('I did it!' + dummy);
      },
    },
  ].toList();

所以我的问题是...是否可以在 Listviews 生成器方法中调用每个项目的唯一函数?

类似于 _shortcuts[i]['func']('wow') ?

我认为这应该在 php 中完成。 Dart 做不到。

void main() {
  List<Map<String, dynamic>> _short = [
  {
     'name': 'HORN',
      'icon': "Icons.circle_outlined",
      'selection': false,
      'func': (String dummy) { 
       print('I did it! \t' + dummy);
      },
  }
];
  
_short[0]["func"]("hello");
    
}

希望对您有所帮助。

您应该创建一个 class,它将在您的 _shortcuts 列表中使用。请参阅以下示例:

// The ShortCut class.
class ShortCut {
  final String name;
  final IconData icon;
  final bool selection;
  final void Function(String) func;

  const ShortCut({
    required this.name,
    required this.icon,
    required this.selection,
    required this.func,
  });
}

此 class 可以在小部件中使用,并且可以从 ListView 小部件的构建器方法中访问该函数,如下所示:


class App extends StatefulWidget {
  @override
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  /// The is your list with custom shortcuts.
  final _shortCuts = <ShortCut>[
    ShortCut(
      name: 'HORN',
      icon: Icons.circle_outlined,
      selection: false,
      func: (String dummy) {
        // do something
        print('I did it!' + dummy);
      },
    ),
  ];

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: _shortCuts.length,
      itemBuilder: (context, index) {
        final _shortCut = _shortCuts[index];

        // Call the function here.
        _shortCut.func('dummy');

        return Container();
      },
    );
  }
}

希望这就是您要找的!