Dart 如何知道在颤振中点击了哪个按钮?

Dart 如何知道在颤振中点击了哪个按钮?,dart,flutter,Dart,Flutter,我遇到了一个问题: 但是有没有更好的方法来检测哪个按钮被点击了呢? 前任。 我为循环创建了100个按钮,那么怎么知道呢?在iOS中,我们使用的是标记属性,因此如果有这种选项,那么它将非常便于检测 编辑: 下面是我的代码 List<Widget> pageCurrentPageIndicator(int currentIndex, int totoalCount) { List<Widget> tempWidget = new List<Widget>(

我遇到了一个问题:

但是有没有更好的方法来检测哪个按钮被点击了呢? 前任。 我为循环创建了100个按钮,那么怎么知道呢?在iOS中,我们使用的是标记属性,因此如果有这种选项,那么它将非常便于检测

编辑:

下面是我的代码

List<Widget> pageCurrentPageIndicator(int currentIndex, int totoalCount) {
    List<Widget> tempWidget = new List<Widget>();
    for (var i = 0; i < totoalCount; i++) {
      Container container = Container(
        width: 47.0,
        height: 30.0,
        child: FlatButton(
          child: Image.asset(
            (i == currentIndex
                ? 'lib/assets/radioBtnActive.png'
                : 'lib/assets/radioBtn.png'),
            fit: BoxFit.contain), onPressed: () {
              whichButtonistaped(i);              
            },
          )
      );
      tempWidget.add(container);
    }
    return tempWidget;
  }

  void whichButtonistaped(int btnTag){
    print(btnTag);
    setState(() {
        currentBannerIndex = btnTag;               
     });
  }
List pageCurrentPageIndicator(int-currentIndex,int-totoalCount){
List tempWidget=新列表();
对于(变量i=0;i
为每个按钮分配一个不同的回调

void onPress(int id) {
  print('pressed $id');
}

Widget build(BuildContext context) {
  return Row(
    children: [
      RaisedButton(onPressed: () => onPress(0),),
      RaisedButton(onPressed: () => onPress(1),),
    ],
  );
}

为每个按钮分配一个不同的回调

void onPress(int id) {
  print('pressed $id');
}

Widget build(BuildContext context) {
  return Row(
    children: [
      RaisedButton(onPressed: () => onPress(0),),
      RaisedButton(onPressed: () => onPress(1),),
    ],
  );
}

我建议使用小部件的
属性

以下是一个解决方案:

Widget build(BuildContext context) {
  return Row(
    children: [
      TagButton(onPressed: (k) => onPress(k)),
      TagButton(onPressed: (k) => onPress(k)),
    ],
  );
}

void onPress(Key id) {
  print('pressed $id');
}
使用以下自定义小部件:

typedef TagButtonPressedCallBack = void Function(Key key);

class TagButton extends StatelessWidget {
  final TagButtonPressedCallBack onPressed;

  agButton({
    this.onPressed,
  }) : super(key: UniqueKey());

  @override
  Widget build(BuildContext context) {
    return RaisedButton(onPressed: () {
      if (onPressed != null) onPressed(key);
    });
  }
}
输出:

I/flutter ( 6371): pressed [#2ca50]
I/flutter ( 6371): pressed [#2180d]
I/flutter ( 6371): pressed [#2ca50]
该解决方案为您提供
TagButton
小部件的唯一标识符


如果您想在
标记按钮
中找到
RaisedButton
的id,可以在
构建
方法中生成一个
,并将其传递给
RaisedButton
,如下所示:

typedef TagButtonPressedCallBack = void Function(Key key);

class TagButton extends StatelessWidget {
  final TagButtonPressedCallBack onPressed;

  TagButton({
    Key key,
    this.onPressed,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    var k = UniqueKey();
    return RaisedButton(
        key: k,
        onPressed: () {
          if (onPressed != null) onPressed(k);
        });
  }
}

我建议使用小部件的
属性

以下是一个解决方案:

Widget build(BuildContext context) {
  return Row(
    children: [
      TagButton(onPressed: (k) => onPress(k)),
      TagButton(onPressed: (k) => onPress(k)),
    ],
  );
}

void onPress(Key id) {
  print('pressed $id');
}
使用以下自定义小部件:

typedef TagButtonPressedCallBack = void Function(Key key);

class TagButton extends StatelessWidget {
  final TagButtonPressedCallBack onPressed;

  agButton({
    this.onPressed,
  }) : super(key: UniqueKey());

  @override
  Widget build(BuildContext context) {
    return RaisedButton(onPressed: () {
      if (onPressed != null) onPressed(key);
    });
  }
}
输出:

I/flutter ( 6371): pressed [#2ca50]
I/flutter ( 6371): pressed [#2180d]
I/flutter ( 6371): pressed [#2ca50]
该解决方案为您提供
TagButton
小部件的唯一标识符


如果您想在
标记按钮
中找到
RaisedButton
的id,可以在
构建
方法中生成一个
,并将其传递给
RaisedButton
,如下所示:

typedef TagButtonPressedCallBack = void Function(Key key);

class TagButton extends StatelessWidget {
  final TagButtonPressedCallBack onPressed;

  TagButton({
    Key key,
    this.onPressed,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    var k = UniqueKey();
    return RaisedButton(
        key: k,
        onPressed: () {
          if (onPressed != null) onPressed(k);
        });
  }
}

没有太多的解决方案可用于此,可用的是静态按钮,这对我不起作用。以下是我在项目中为多个动态浮动ActionButtons所做的工作

为每个按钮分配动态id的自定义按钮类:

class FAB extends StatelessWidget {
  final int id;
  final Function(int) onPressed;
  final String buttonText;

  const FAB({this.id, this.onPressed, this.buttonText});

  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
        onPressed: () {onPressed(this.id);},
        backgroundColor: Colors.blue,
        child: new Text(this.buttonText,
            style: new TextStyle(fontSize: 25.0))
    );
  }
}
new FAB(
  id: id,
  onPressed: buttonFunction,
  buttonText: 'Button Text'
)
buttonFunction(id) {
  print('Button id: $id');
}
使用上面的类创建按钮:

class FAB extends StatelessWidget {
  final int id;
  final Function(int) onPressed;
  final String buttonText;

  const FAB({this.id, this.onPressed, this.buttonText});

  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
        onPressed: () {onPressed(this.id);},
        backgroundColor: Colors.blue,
        child: new Text(this.buttonText,
            style: new TextStyle(fontSize: 25.0))
    );
  }
}
new FAB(
  id: id,
  onPressed: buttonFunction,
  buttonText: 'Button Text'
)
buttonFunction(id) {
  print('Button id: $id');
}
按钮功能:

class FAB extends StatelessWidget {
  final int id;
  final Function(int) onPressed;
  final String buttonText;

  const FAB({this.id, this.onPressed, this.buttonText});

  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
        onPressed: () {onPressed(this.id);},
        backgroundColor: Colors.blue,
        child: new Text(this.buttonText,
            style: new TextStyle(fontSize: 25.0))
    );
  }
}
new FAB(
  id: id,
  onPressed: buttonFunction,
  buttonText: 'Button Text'
)
buttonFunction(id) {
  print('Button id: $id');
}

参考资料:

这方面的解决方案不多,可用的解决方案是静态按钮,对我不起作用。以下是我在项目中为多个动态浮动ActionButtons所做的工作

为每个按钮分配动态id的自定义按钮类:

class FAB extends StatelessWidget {
  final int id;
  final Function(int) onPressed;
  final String buttonText;

  const FAB({this.id, this.onPressed, this.buttonText});

  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
        onPressed: () {onPressed(this.id);},
        backgroundColor: Colors.blue,
        child: new Text(this.buttonText,
            style: new TextStyle(fontSize: 25.0))
    );
  }
}
new FAB(
  id: id,
  onPressed: buttonFunction,
  buttonText: 'Button Text'
)
buttonFunction(id) {
  print('Button id: $id');
}
使用上面的类创建按钮:

class FAB extends StatelessWidget {
  final int id;
  final Function(int) onPressed;
  final String buttonText;

  const FAB({this.id, this.onPressed, this.buttonText});

  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
        onPressed: () {onPressed(this.id);},
        backgroundColor: Colors.blue,
        child: new Text(this.buttonText,
            style: new TextStyle(fontSize: 25.0))
    );
  }
}
new FAB(
  id: id,
  onPressed: buttonFunction,
  buttonText: 'Button Text'
)
buttonFunction(id) {
  print('Button id: $id');
}
按钮功能:

class FAB extends StatelessWidget {
  final int id;
  final Function(int) onPressed;
  final String buttonText;

  const FAB({this.id, this.onPressed, this.buttonText});

  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
        onPressed: () {onPressed(this.id);},
        backgroundColor: Colors.blue,
        child: new Text(this.buttonText,
            style: new TextStyle(fontSize: 25.0))
    );
  }
}
new FAB(
  id: id,
  onPressed: buttonFunction,
  buttonText: 'Button Text'
)
buttonFunction(id) {
  print('Button id: $id');
}

参考资料:

请查看我的更新。我知道这种方法,但还有其他方法可用吗?不,这是唯一的方法。为什么当0和1来自循环中的索引时,这种方法不起作用?请检查我的更新。我知道这种方法,但还有其他方法吗?不,这是唯一的方法。为什么当0和1来自循环中的索引时,这种方法不起作用?