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

Flutter RadioListTile点击跳转EditScreen失效问题求助

解决Flutter中RadioListTile包裹InkWell无法跳转的问题

问题核心是RadioListTile本身自带交互逻辑,会拦截外层InkWell的点击事件,导致InkWell的onTap无法触发。以下是两种可行解决方案:

方案一:直接使用RadioListTile的onTap属性(推荐)

RadioListTile内置onTap参数,可直接在这里处理页面跳转,同时保留onChanged处理选中状态,逻辑清晰且符合组件设计:

import 'package:flutter/material.dart';
import 'package:flutter_application_1/Edit_Screen.dart';

class RadioListExample extends StatefulWidget {
  @override
  _RadioListExampleState createState() => _RadioListExampleState();
}

class _RadioListExampleState extends State<RadioListExample> {
  int _selectedValue = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        RadioListTile(
          title: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text(
                'Heading',
                style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
              ),
              Text(
                'This is my subheading for test',
                style: TextStyle(fontSize: 14),
              ),
              Container(
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(6),
                  border: Border.all(width: 1.0),
                ),
                padding: const EdgeInsets.all(6.0),
                child: Text(
                  'Today 06:00 PM',
                  style: TextStyle(color: Colors.blue),
                ),
              ),
            ],
          ),
          value: 1,
          groupValue: _selectedValue,
          onChanged: (value) {
            setState(() {
              _selectedValue = value as int;
            });
          },
          // 在这里处理页面跳转
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => const EditScreen()),
            );
          },
          secondary: Icon(
            Icons.star,
            color: Colors.blue,
          ),
        ),
      ],
    );
  }
}

方案二:保留InkWell并阻止RadioListTile拦截点击(不推荐)

如果一定要保留外层InkWell,可用AbsorbPointer包裹RadioListTile阻止其拦截点击,但需要手动处理选中状态:

import 'package:flutter/material.dart';
import 'package:flutter_application_1/Edit_Screen.dart';

class RadioListExample extends StatefulWidget {
  @override
  _RadioListExampleState createState() => _RadioListExampleState();
}

class _RadioListExampleState extends State<RadioListExample> {
  int _selectedValue = 0;

  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(builder: (context) => const EditScreen()),
        );
        // 手动更新选中状态
        setState(() {
          _selectedValue = 1;
        });
      },
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          AbsorbPointer(
            absorbing: true,
            child: RadioListTile(
              title: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    'Heading',
                    style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
                  ),
                  Text(
                    'This is my subheading for test',
                    style: TextStyle(fontSize: 14),
                  ),
                  Container(
                    decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(6),
                      border: Border.all(width: 1.0),
                    ),
                    padding: const EdgeInsets.all(6.0),
                    child: Text(
                      'Today 06:00 PM',
                      style: TextStyle(color: Colors.blue),
                    ),
                  ),
                ],
              ),
              value: 1,
              groupValue: _selectedValue,
              onChanged: null, // 被拦截后无需处理
              secondary: Icon(
                Icons.star,
                color: Colors.blue,
              ),
            ),
          ),
        ],
      ),
    );
  }
}

方案一更简洁且符合Flutter组件设计逻辑,建议优先使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:44:55