Flutter/Dart - 元素类型无法分配给列表类型'Bloc<dynamic>

问题描述 投票:0回答:1

我对

Flutter/Dart
完全陌生,我正在设计一个应用程序,以便我可以练习。我遇到了一个我在这里没有找到的错误,
ChatGPT
都不能给我一个正确的解决方案。 请问这是怎么回事?

main.dart

import 'package:bloc_pattern/bloc_pattern.dart';
import 'package:flutter/material.dart';
import 'package:you_flu/blocs/videos_bloc.dart';
import 'package:you_flu/screens/home.dart';

void main() => runApp(const YouFlu());

class YouFlu extends StatelessWidget {
  const YouFlu({super.key});

  @override
  Widget build(BuildContext context) {
    return BlocProvider(
      blocs: [VideosBloc()], //Error here
      dependencies: const [],
      child: const MaterialApp(
        debugShowCheckedModeBanner: false,
        title: 'YouFlu',
        home: Home(),
      ),
    );
  }
}

错误指出此处:

blocs: [VideosBloc()],
The element type 'VideosBloc' can't be assigned to the list type 'Bloc<dynamic>'.dartlist_element_type_not_assignable

我已经尝试过:

blocs: VideosBloc(),

带括号和不带括号都是如此。

这是我的

VideosBloc class

import 'dart:ui';

import 'package:bloc_pattern/bloc_pattern.dart';
import 'package:you_flu/api.dart';
import 'dart:async';

import 'package:you_flu/models/video.dart';

class VideosBloc implements BlocBase {
  late Api api;
  late List<Video> videos;

  final StreamController _videosController = StreamController();
  Stream get outVideos => _videosController.stream;

  final StreamController _searchController = StreamController();
  Sink get inSearch => _searchController.sink;

  VideosBloc() {
    api = Api();

    _searchController.stream.listen(_search as void Function(dynamic event)?);
  }

  void _search(String search) async {
    videos = await api.search(search);
  }

  @override
  void dispose() {
    _videosController.close();
    _searchController.close();
  }

  @override
  void addListener(VoidCallback listener) {}

  @override
  bool get hasListeners => throw UnimplementedError();

  @override
  void notifyListeners() {}

  @override
  void removeListener(VoidCallback listener) {}
}

ChatGPT
告诉我
VideosBloc
类的实现看起来不错。

哦,在我忘记之前:这是我的

pubspec.yaml
,以便你们可以检查我正在使用的版本:

name: you_flu
description: "Youtube Flutter"
publish_to: 'none'
version: 0.1.0

environment:
  sdk: '>=3.3.4 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  
  cupertino_icons: ^1.0.8
  youtube_player_flutter: ^9.0.1
  http: ^1.2.1
  shared_preferences: ^2.2.3
  rxdart: ^0.27.7
  bloc_pattern: ^3.0.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  flutter_lints: ^3.0.0

flutter:
  uses-material-design: true
  assets:
   - images/

那么,为什么我不能将我的

VideosBloc
类分配给
blocs
上的
BlocProvider
属性?

谢谢!

flutter dart bloc
1个回答
0
投票

嗯...我找到了答案,而且非常非常简单:

return BlocProvider(
  blocs: [
    Bloc((i) => VideosBloc())
  ],
  // other stuff...
  ),
);

使用方括号创建一个列表,然后使用

function
类中的
Bloc
将我的
VideosBloc
类分配给
Bloc

© www.soinside.com 2019 - 2024. All rights reserved.