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

Flutter自定义泛型Switch组件onChange回调类型不匹配怎么解决?

问题根因
  • 泛型传递缺失:你定义的CustomSwitch<T>带泛型参数,但对应的State类没有绑定泛型,声明的是class _CustomSwitchState extends State<CustomSwitch>,未指定父组件的泛型T,导致State内部访问widget属性时,所有泛型相关的类型都会被推导为dynamic,onChange的类型就变成了Function(dynamic)?,和外部传入的具体类型(比如Function(String)?、Function(int)?)不匹配,所以触发类型错误。
  • 调用参数错误:你调用组件时拼写错了参数名,把choice1写成了choise1,还重复声明了两次choise1,第二个应该是choice2,这个问题会导致编译不通过,需要同步修正。
修复步骤
  1. 给State类绑定泛型,保证父组件的泛型参数能正确传递到State内部
  2. 修正组件调用时的参数拼写错误

修复后的完整组件代码:

import 'package:flutter/material.dart';
import 'package:flutter_switch/flutter_switch.dart';

class CustomSwitch<T> extends StatefulWidget {
  final T choice1;
  final T choice2;
  final T? value;
  final Function(T)? onChange;

  const CustomSwitch({
    required this.choice1,
    required this.choice2,
    this.value,
    this.onChange,
  });

  // 修正createState返回的State类绑定泛型
  @override
  _CustomSwitchState<T> createState() => _CustomSwitchState<T>();
}

// 修正State类绑定父组件的泛型T
class _CustomSwitchState<T> extends State<CustomSwitch<T>> {
  bool value = true;

  @override
  void initState() {
    super.initState();
    value = widget.value == widget.choice1 || widget.value == null;
  }

  @override
  Widget build(BuildContext context) {
    return FlutterSwitch(
      value: value,
      activeText: widget.choice1.toString(),
      inactiveText: widget.choice2.toString(),
      onToggle: (bool value) {
        setState(() {
          this.value = value;
          if (widget.onChange != null) {
            // 此时widget.choice1、widget.choice2都是T类型,和onChange的参数类型匹配
            widget.onChange!.call(value ? widget.choice1 : widget.choice2);
          }
        });
      },
    );
  }
}

修正后的组件调用代码:

CustomSwitch<String>(
    choice1: 'Active',
    choice2: 'Inactive',
    value: 'Active',
    onChange: (value) {
      print('value: $value');
    }
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:18:02