Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Can';t将抽象类的子类型作为参数传递到函数中_Flutter_Dart_Inheritance_Bloc - Fatal编程技术网

Flutter Can';t将抽象类的子类型作为参数传递到函数中

Flutter Can';t将抽象类的子类型作为参数传递到函数中,flutter,dart,inheritance,bloc,Flutter,Dart,Inheritance,Bloc,我遵循了BloC教程,并按照他们所做的,我有一个BloC,它有这个方法 @override Stream<FridgeState> mapEventToState(FridgeEvent event) async* { .. } 在小部件中实例化bloc并传入FridgeEvent的子类时,我得到一个错误,即无法分配参数类型。我做错了什么 根据要求,这是集团的代码 import 'package:flutter_bloc/flutter_bloc.dart'; import

我遵循了BloC教程,并按照他们所做的,我有一个BloC,它有这个方法

  @override Stream<FridgeState> mapEventToState(FridgeEvent event) async* { .. }
在小部件中实例化bloc并传入
FridgeEvent
的子类时,我得到一个错误,即无法分配参数类型。我做错了什么

根据要求,这是集团的代码

import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:foodey_flutter/domain/fridge/entity/Fridge.dart';
import 'package:foodey_flutter/domain/fridge/usecase/CreateFridgeUseCase.dart';
import 'package:foodey_flutter/factory/FridgeFactory.dart';
import 'package:foodey_flutter/ui/fridge/create//event.dart';
import 'package:foodey_flutter/ui/fridge/create//state.dart';

class FridgeBloc extends Bloc<FridgeEvent, FridgeState> {
  CreateFridgeUseCase? createFridgeUseCase;

  FridgeBloc(FridgeState initialState) : super(initialState) {
    FridgeFactory.inject(this);
  }

  @override
  Stream<FridgeState> mapEventToState(FridgeEvent event) async* {
    if (event is CreateFridgeEvent) {
      Fridge? result = await createFridgeUseCase?.execute(event.lat, event.lng);
      if (result != null)
        yield FridgeSuccessfullyLoadedState(result);
      else
        yield FridgeErrorState(
            exception: Exception("Failed to create a fridge"));
    } else {
      yield FridgeErrorState(exception: Exception("Operation not supported"));
    }
  }
}

更新:在复制粘贴代码并检查完整性后,我发现了问题。对于面临相同问题的任何人:在bloc代码中导入事件在路径中包含两个
/
。删除一个
/
后,编译器不再抱怨传递了错误的类型。不知道第二个
/
是如何添加的,也不知道为什么编译器根本没有对此抱怨。显然,从
。//event.dart
导入时,在
。//event.dart

中定义的对象不同。在复制粘贴代码并检查完整性后,我发现了问题。对于面临相同问题的任何人:在bloc代码中导入事件在路径中包含两个
/
。删除一个
/
后,编译器不再抱怨传递了错误的类型。不知道第二个
/
是如何添加的,也不知道为什么编译器根本没有对此抱怨。
显然,从
。//event.dart
导入时,在
。//event.dart

中定义的对象可能与导入时的对象不同。你能分享你的bloc文件和widget文件吗(导入的完整代码)?请提供一个。更新,谢谢提示
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:foodey_flutter/domain/fridge/entity/Fridge.dart';
import 'package:foodey_flutter/domain/fridge/usecase/CreateFridgeUseCase.dart';
import 'package:foodey_flutter/factory/FridgeFactory.dart';
import 'package:foodey_flutter/ui/fridge/create//event.dart';
import 'package:foodey_flutter/ui/fridge/create//state.dart';

class FridgeBloc extends Bloc<FridgeEvent, FridgeState> {
  CreateFridgeUseCase? createFridgeUseCase;

  FridgeBloc(FridgeState initialState) : super(initialState) {
    FridgeFactory.inject(this);
  }

  @override
  Stream<FridgeState> mapEventToState(FridgeEvent event) async* {
    if (event is CreateFridgeEvent) {
      Fridge? result = await createFridgeUseCase?.execute(event.lat, event.lng);
      if (result != null)
        yield FridgeSuccessfullyLoadedState(result);
      else
        yield FridgeErrorState(
            exception: Exception("Failed to create a fridge"));
    } else {
      yield FridgeErrorState(exception: Exception("Operation not supported"));
    }
  }
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:foodey_flutter/ui/fridge/create/FridgeBloc.dart';
import 'package:foodey_flutter/ui/fridge/create/event.dart';

class CreateFridgeWidget extends StatefulWidget {
  @override
  _CreateFridgeState createState() => _CreateFridgeState();
}

class _CreateFridgeState extends State<CreateFridgeWidget> {
  late FridgeBloc _bloc;

  @override
  void initState() {
    super.initState();
    this._bloc = BlocProvider.of<FridgeBloc>(context);
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      key: widget.key,
      alignment: Alignment.center,
      padding: EdgeInsets.all(8),
      child: Column(
        children: [
          Text("Are you sure you want to create your fridge?"),
          Row(
            children: [
              TextButton(
                key: widget.key,
                onPressed: () {
                  _bloc.add(CreateFridgeEvent(lat: 0, lng: 1));
                },
                child: Text("Yes"),
              ),
              TextButton(
                key: widget.key,
                onPressed: () => {},
                child: Text("No"),
              ),
            ],
          )
        ],
      ),
    );
  }
}
abstract class FridgeEvent {
  const FridgeEvent();
}

class CreateFridgeEvent extends FridgeEvent {
  final double lat, lng;

  CreateFridgeEvent({required this.lat, required this.lng});
}

class DeleteFridgeEvent extends FridgeEvent {}