错误:类型参数“T”不符合“GetIt.call”上类型变量“T”的绑定“对象”。迁移到 Null Safety 后

Swi*_*ese 10 dart flutter dart-null-safety

我正在将一个大型项目迁移到空安全的过程中,遇到一个奇怪的错误,我不完全确定如何修复。

“错误:类型参数‘T’不符合‘GetIt.call’上类型变量‘T’的绑定‘对象’。”

class BaseView<T extends BaseProvider?> extends StatefulWidget {
  final Widget Function(BuildContext context, T value, Widget? child)? builder;
  final Function(T)? onModelReady;

  BaseView({this.builder, this.onModelReady});

  @override
  _BaseViewState<T> createState() => _BaseViewState<T>();
}

class _BaseViewState<T extends BaseProvider?> extends State<BaseView<T?>> {
  T model = locator<T>(); <---- This is throwing it

  @override
  void initState() {
    if (widget.onModelReady != null) {
      widget.onModelReady!(model);
    }

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<T?>(
      create: (context) => model,
      child: Consumer<T>(builder: widget.builder!),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我找不到有关此错误的太多信息,到目前为止我尝试过的任何方法都没有成功。有人可以帮忙吗?

我使用 Provider 进行状态管理,而 BaseView 是在构建过程中包装所有其他视图的;例如:

class EquipmentMainView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BaseView<EquipmentProvider>(
      onModelReady: (model) async {
        model.getAllFunctions();
      },..
Run Code Online (Sandbox Code Playgroud)

Swi*_*ese 6

在这里发布给将来可能最终遇到此问题的其他人,只需通过更改来更改 jamesdlin 建议的 BaseProvider 的可空性

class BaseView<T extends BaseProvider?>
Run Code Online (Sandbox Code Playgroud)

class BaseView<T extends BaseProvider>
Run Code Online (Sandbox Code Playgroud)