You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter:如何实现两列按钮点击后自动触发按键值对比?

解决方案

要实现点击两列按钮后对比数值的功能,核心是保存每次点击的按钮值,并在每次点击后检查是否已收集到两列的选中值,再触发对比逻辑。具体步骤如下:

1. 添加状态变量存储选中值

在你的State类中定义两个可空整数变量,用来分别保存第一列和第二列的选中值:

int? _selectedFromColumn1;
int? _selectedFromColumn2;

2. 修改按钮点击处理函数

原来的_column1和_column2函数仅返回值,没有保存状态的逻辑,需要修改为更新状态并触发检查:

void _column1(int keyColumn1) {
  _selectedFromColumn1 = keyColumn1;
  // 每次点击后检查是否可以对比
  _triggerComparison();
}

void _column2(int keyColumn2) {
  _selectedFromColumn2 = keyColumn2;
  _triggerComparison();
}

3. 编写触发对比的逻辑

新增一个函数,判断两列是否都已选中值,若都有值则执行对比,对比完成后可重置选中值以便下次操作:

void _triggerComparison() {
  // 确保两列都已选中值
  if (_selectedFromColumn1 != null && _selectedFromColumn2 != null) {
    _unionKeyFunction(_selectedFromColumn1!, _selectedFromColumn2!);
    // 可选:对比后清空选中值,支持下一轮点击对比
    _selectedFromColumn1 = null;
    _selectedFromColumn2 = null;
  }
}

4. 保留原对比函数

你的_unionKeyFunction可以直接沿用,无需修改:

void _unionKeyFunction(int key1ForUnion, int key2ForUnion){
  if( key1ForUnion == key2ForUnion ) {
     print("Equal");
  }
  else {
    print("Not equal");
  }
}

完整示例代码

整合后的完整State类示例:

class YourWidget extends StatefulWidget {
  const YourWidget({super.key});

  @override
  State<YourWidget> createState() => _YourWidgetState();
}

class _YourWidgetState extends State<YourWidget> {
  int? _selectedFromColumn1;
  int? _selectedFromColumn2;

  void _column1(int keyColumn1) {
    _selectedFromColumn1 = keyColumn1;
    _triggerComparison();
  }

  void _column2(int keyColumn2) {
    _selectedFromColumn2 = keyColumn2;
    _triggerComparison();
  }

  void _triggerComparison() {
    if (_selectedFromColumn1 != null && _selectedFromColumn2 != null) {
      _unionKeyFunction(_selectedFromColumn1!, _selectedFromColumn2!);
      _selectedFromColumn1 = null;
      _selectedFromColumn2 = null;
    }
  }

  void _unionKeyFunction(int key1ForUnion, int key2ForUnion){
    if( key1ForUnion == key2ForUnion ) {
       print("Equal");
    }
    else {
      print("Not equal");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Row( 
      crossAxisAlignment: CrossAxisAlignment.center,
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children:[
        Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () =>_column1(1), 
              child: const Text("1")),
            const SizedBox(height: 40,),
            ElevatedButton(
              onPressed: () =>_column1(2), 
              child: const Text("2")),
          ],
        ),
        Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: ()=>_column2(2), 
              child: const Text("2")),
            const SizedBox(height: 40,),
            ElevatedButton(
              onPressed: ()=>_column2(1), 
              child: const Text("1")),
          ],
        ),
      ]
    );
  }
}

逻辑说明

  • 每次点击任意一列的按钮,都会先把对应的值存入状态变量,然后检查是否两列都有选中值。
  • 当两列都有选中值时,自动触发对比函数,输出结果后重置状态,等待下一轮点击。

内容的提问来源于stack exchange,提问作者Verc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:45:29