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

升级Flutter 2后Stream<dynamic>无法转为Stream<Color>报错如何解决

报错原因

Flutter 2 默认启用了严格的静态类型检查,你声明_streamListController变量时没有指定泛型参数,即使初始化时调用了StreamController<Color>.broadcast(),Dart 仍然会以变量声明时的类型为准,将该控制器识别为StreamController<dynamic>类型,因此它的stream属性类型为Stream<dynamic>,和你定义colorStream时标注的返回值类型Stream<Color>不匹配,就触发了该报错。

解决方案

只需要给_streamListController变量加上明确的Color泛型声明即可,同时建议也给colorSink加上对应类型标注,避免后续出现隐式类型隐患,修改后的完整代码如下:

class ColorBloc extends BlocBase {
// streams of Color
  StreamController<Color> _streamListController = StreamController<Color>.broadcast();
// sink
  Sink<Color> get colorSink => _streamListController.sink;
// stream
  Stream<Color> get colorStream => _streamListController.stream;


// function to change the color
  changeColor(String chosenColour) {
    switch(chosenColour) {
      case 'blackTheme':
        {
          colorSink.add(AppState.blackTheme);
        }
        break;

      case 'blueTheme':
        {
          colorSink.add(AppState.blueTheme);
        }
        break;

      case 'greenTheme':
        {
          colorSink.add(AppState.greenTheme);
        }
        break;

      case 'redTheme':
        {
          colorSink.add(AppState.redTheme);
        }
        break;

      case 'whiteTheme':
        {
          colorSink.add(AppState.whiteTheme);
        }
        break;
    }

  }

  @override
  dispose() {
    _streamListController.close();
  }
}

修改后控制器的泛型明确为Color,其sink和stream的类型都会自动匹配对应泛型,即可解决类型不匹配的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:57:00