颤振版本:2.1.0
Flutter Bloc 版本:^7.0.1
飞镖:2.13.0
出现此错误:预期有 1 个位置参数,但找到了 0 个。尝试添加缺少的arguments.dart(not_enough_positional_arguments)。
我有什么错吗
我的侧边栏布局发生错误的位置:
body: BlocProvider<NavigationBloc>(
create: (context) => NavigationBloc(),
child: Stack(
children: [
BlocBuilder<NavigationBloc, NavigationStates>(
builder: (context, NavigationState) {
return NavigationState as Widget;
}),
SideBar(),
],
),
),
我的区块导航文件:
import '/Pages/DeviceLocation/DeviceLocation.dart';
import '/Pages/Devices/DeviceLanding.dart';
import '../../LandingScreen/components/body.dart';
import '../../SensorScreen/charts/GasChart.dart';
import '../../SensorScreen/charts/HumChart.dart';
import '../../SensorScreen/charts/MoisChart.dart';
import '../../SensorScreen/charts/NurChart.dart';
import '../../SensorScreen/charts/PhChart.dart';
import '../../SensorScreen/charts/TemChart.dart';
import '../../SensorScreen/charts/chartComponents/NurCard.dart';
import 'package:bloc/bloc.dart';
enum NavigationEvents {
// DashboardClickEvent,
LandingScreenBodyClickEvent,
TemChartClickEvent,
HumChartClickEvent,
MoisChartClickEvent,
PhChartClickEvent,
NurChartClickEvent,
GasChartClickEvent,
DevicesClickEvent,
DevicesLocationClickEvent,
AccountClickEvent,
SettingsClickEvent
}
abstract class NavigationStates {}
class NavigationBloc extends Bloc<NavigationEvents, NavigationStates> {
NavigationBloc(NavigationStates initialState) : super(initialState);
@override
NavigationStates get initialState => LandingScreenBody();
@override
Stream<NavigationStates> mapEventToState(NavigationEvents event) async* {
switch (event) {
case NavigationEvents.LandingScreenBodyClickEvent:
yield LandingScreenBody();
break;
case NavigationEvents.TemChartClickEvent:
yield TemChart();
break;
case NavigationEvents.HumChartClickEvent:
yield HumChart();
break;
case NavigationEvents.MoisChartClickEvent:
yield MoisChart();
break;
case NavigationEvents.PhChartClickEvent:
yield PhChart();
break;
case NavigationEvents.NurChartClickEvent:
yield NurChart();
break;
case NavigationEvents.GasChartClickEvent:
yield GasChart();
break;
case NavigationEvents.DevicesClickEvent:
yield DeviceLanding();
break;
case NavigationEvents.DevicesLocationClickEvent:
yield DevicesLocation();
break;
}
}
}
我在做什么?
您不必将状态传递给块构造函数,这应该可以工作
NavigationBloc() : super(LandingScreenBody());
在 flutter_bloc 7.0.0 中,不再有
initialState
getter,所以你也必须删除它
您遇到的错误是因为 NavigationBloc 的构造函数需要一个位置参数,但您没有将其传入。具体来说,您的 NavigationBloc 构造函数需要一个初始状态 (NavigationStates initialState),但在实例化 NavigationBloc 时缺少该状态。 任何继承自 NavigationStates 的状态都可以作为参数传递。在本例中,我使用 LandingScreenBody() 作为初始状态的示例。
NavigationBloc(LandingScreenBody()),
因此,您更新后的代码将如下所示:
BlocProvider<NavigationBloc>(
create: (context) => NavigationBloc(LandingScreenBody()), // Pass the initial state
child: Stack(
children: [
BlocBuilder<NavigationBloc, NavigationStates>(
builder: (context, NavigationState) {
return NavigationState as Widget;
},
),
SideBar(),
],
),
),