颤振块;预期有 1 个位置参数,但找到了 0 个

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

颤振版本:2.1.0

Flutter Bloc 版本:^7.0.1

飞镖:2.13.0

出现此错误:预期有 1 个位置参数,但找到了 0 个。尝试添加缺少的arguments.dart(not_enough_positional_arguments)。

我有什么错吗

enter image description here

我的侧边栏布局发生错误的位置:

 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;
    }
  }
}

我在做什么?

flutter bloc flutter-navigation
2个回答
1
投票

您不必将状态传递给块构造函数,这应该可以工作


NavigationBloc() : super(LandingScreenBody());

在 flutter_bloc 7.0.0 中,不再有

initialState
getter,所以你也必须删除它


0
投票

您遇到的错误是因为 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(),
    ],
  ),
),
© www.soinside.com 2019 - 2024. All rights reserved.