首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GestureDetector onTap卡

GestureDetector onTap卡
EN

Stack Overflow用户
提问于 2018-06-03 08:55:51
回答 3查看 21.3K关注 0票数 13
代码语言:javascript
复制
new Expanded(

        child: _searchResult.length != 0 || controller.text.isNotEmpty
            ? new ListView.builder(
                itemCount: _searchResult.length,
                itemBuilder: (context, int i) {

                  return new Card(

                      child: new Column(
                          mainAxisSize: MainAxisSize.min,
                          children: <Widget>[
                        new Row(children: <Widget>[
                          //new GestureDetector(),

                          new Container(

                              width: 45.0,
                              height: 45.0,
                              decoration: new BoxDecoration(
                                  shape: BoxShape.circle,
                                  image: new DecorationImage(
                                      fit: BoxFit.fill,
                                      image: new NetworkImage(
                                          "https://raw.githubusercontent.com/flutter/website/master/_includes/code/layout/lakes/images/lake.jpg")))),
                          new Text(
                              " " +
                                  userDetails[returnTicketDetails[i]
                                      ["user_id"]]["first_name"] +
                                  " " +
                                  (userDetails[returnTicketDetails[i]
                                      ["user_id"]]["last_name"]),
                              style: const TextStyle(
                                  fontFamily: 'Poppins', fontSize: 20.0)),
                        ]),
                        new Column(
                          children: <Widget>[
                            new Align(
                                alignment: FractionalOffset.topRight,
                                child: new FloatingActionButton(
                                  onPressed: () {

                                    groupId = returnTicketDetails[i]["id"];

                                    print(returnTicketDetails[i]["id"]);
                                    print(widget.id);

                                    Navigator.push(
                                        context,
                                        new MaterialPageRoute(
                                            builder: (context) => new Tickets(groupId,widget.id)));

                                  },
                                  heroTag: null,
                                  backgroundColor: Color(0xFF53DD6C),
                                  child: new Icon(Icons.arrow_forward),
                                )),
                            new Padding(padding: new EdgeInsets.all(3.0)),
                          ],
                        )
                      ]));
                },
              )
            : new ListView.builder(
                itemCount: _searchResult.length,
                itemBuilder: (context, int i) {
                  return new Card(
                    child: new ListTile(
                        //title: new Text(userDetails[returnTicketDetails[i]["user_id"]]["first_name"]),
                        ),
                    margin: const EdgeInsets.all(0.0),
                  );
                },
              ),
      ),

大家好!当我在ListView中动态构建一个卡片时,我在想,与其像我已经做的那样将FloatingActionButton保存在每个卡片中,不如在每个卡片中实现一个onTap方法并触发一些东西。换句话说,我希望保持卡尽可能简单,没有太多的小部件。提前谢谢你!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-03 18:38:09

由于Card是“一张材质”,因此您可能希望使用InkWell,它基于最接近的Material祖先,包括材质高亮显示和飞溅效果。

代码语言:javascript
复制
return Card(
  child: InkWell(
    onTap: () {
        // Function is executed on tap.
    },
    child: ..,
  ),
);
票数 40
EN

Stack Overflow用户

发布于 2018-10-17 17:55:38

你真的应该用InkWell而不是卡片来包装孩子:

代码语言:javascript
复制
return Card(
    child: InkWell(onTap: () {}, 
                   child: Text("hello")));

这将使启动动画正确地显示在卡内,而不是卡外。

票数 8
EN

Stack Overflow用户

发布于 2018-06-03 10:49:55

只需使用GestureDetector包装卡片,如下所示:

代码语言:javascript
复制
class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return new ListView.builder(
      itemBuilder: (context, i) {
        new GestureDetector(
          child: new Card(
          ....    
          ),
          onTap: onCardTapped(i),
        );
      },
    );
  }

  onCardTapped(int position) {
    print('Card $position tapped');
  }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50662428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档