【问题标题】:What is the best way to add multiple onTap events in listview flutter?在 listview flutter 中添加多个 onTap 事件的最佳方法是什么?
【发布时间】:2020-01-24 03:59:15
【问题描述】:
Widget _myListView(BuildContext context) {

  final titles = ['bike', 'boat', 'bus', 'car',
    'railway', 'run', 'subway', 'transit', 'walk'];

  final icons = [Icons.directions_bike, Icons.directions_boat,
    Icons.directions_bus, Icons.directions_car, Icons.directions_railway,
    Icons.directions_run, Icons.directions_subway, Icons.directions_transit,
    Icons.directions_walk];

  final ontaps = [ ,] ```how can i add multiple onTap events ```

  return ListView.builder(
    itemCount: titles.length,
    itemBuilder: (context, index) {
      return Card( //                           <-- Card widget
        child: ListTile(
          leading: Icon(icons[index]),
          title: Text(titles[index]),
          onTap: ,
        ),
      );
    },
  );
}

请帮助我如何轻松地为长列表添加 onTap 事件

1.如何以添加图标、标题、子标题的方式添加 onTap 事件使用字符串 2.我是新手,请原谅我的错误..谢谢

【问题讨论】:

  • 您是否针对任何特定的小部件进行点击?

标签: listview flutter


【解决方案1】:

更新的答案,现在如果您选择自行车,它会导航到其他页面:

main.dart

import 'package:flutter/material.dart';
import 'package:prova/page.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      routes: {
        'other_page': (BuildContext context) => Example(),
      },
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Demo'),
      ),
      body: _myListView(context),
    );
  }
}

Widget _myListView(BuildContext context) {
  final titles = [
    'bike',
    'boat',
    'bus',
    'car',
    'railway',
    'run',
    'subway',
    'transit',
    'walk'
  ];

  final icons = [
    Icons.directions_bike,
    Icons.directions_boat,
    Icons.directions_bus,
    Icons.directions_car,
    Icons.directions_railway,
    Icons.directions_run,
    Icons.directions_subway,
    Icons.directions_transit,
    Icons.directions_walk
  ];

  functionBike() {
    Navigator.pushNamed(context, 'other_page');

    print('directions_bike');
  }

  functionBoat() {
    print('directions_boat');
  }

  functionBus() {
    print('directions_bus');
  }

  functionCar() {
    print('directions_car');
  }

  functionRailway() {
    print('directions_railway');
  }

  functionRun() {
    print('directions_run');
  }

  functionSubway() {
    print('directions_subway');
  }

  functionTransit() {
    print('directions_transit');
  }

  functionWalk() {
    print('directions_walk');
  }

  final List<Function> ontaps = [
    functionBike,
    functionBoat,
    functionBus,
    functionCar,
    functionRailway,
    functionRun,
    functionSubway,
    functionTransit,
    functionWalk
  ];

  return ListView.builder(
    itemCount: titles.length,
    itemBuilder: (context, index) {
      return Card(
        //                           <-- Card widget
        child: ListTile(
          leading: Icon(icons[index]),
          title: Text(titles[index]),
          onTap: () {
            ontaps[index]();
          },
        ),
      );
    },
  );
}

希望对您有所帮助。

【讨论】:

  • 我相信你的方法会奏效...但是我会写什么而不是 print (' ') // 我尝试使用 Navigator.push 但它不起作用
  • 它应该可以工作,我有你的项目的工作演示,它导航到路线,将更新我的答案。
  • 非常感谢...您的代码有效...//但我使用了 Navigator.push( context, new MaterialPageRoute(builder: (context) => new RamBike())); } THIS 而不是 NAVIGATOR.PUSHNAMED ////// Navigator.Pushnamed 不适用于此列表视图
  • 使用:functionBike() { Navigator.push( context, MaterialPageRoute(builder: (context) { return RamBike(); }), ); print('directions_bike'); }
  • 很高兴听到,您可以检查答案是否已解决;-)
【解决方案2】:

要为您的 listtile 中的所有小部件添加 onTap 事件,您可以使用以下代码,

             return ListView.builder(
                    itemCount: titles.length,
                    itemBuilder: (context, index) {
                      return Card( //                           <-- Card widget
                        child: ListTile(
                          leading: IconButton(icon: Icon(icons[index]),onPressed: (){
                            // add your code on tap for your iconButton
                          },),
                          title: Text(titles[index]),
                          onTap: (){
                            // add your code on tap for your listview row tile
                          },
                        ),
                      );
                    },
                  );

这对你有用。

【讨论】:

  • 我是一个初学者级别的编码器..我不知道你在说什么...如何在 onTap 中添加多个点击事件?请参阅丹尼尔对我的问题的回答//丹尼尔回答符合我的期望,但我仍然无法使用 Navigator.push 方法添加 onTap 事件
猜你喜欢
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
相关资源
最近更新 更多