我正在尝试创建一个通用的消费者小部件,以方便其子视图模型。因此,我有两个功能。一个在ViewModel初始化后具有功能(T),另一个用于将模型传递给其子Widget。

泛型类中的ChangeChangeifier的子级,并且可以正常工作,直到我想在两个函数中发送T值为止。

然后我得到以下错误:

类型’(OnBoardingViewModel)=> Null’不是类型’(ChangeNotifier)=> void’的子类型

类型’(BuildContext,OnBoardingViewModel,Widget)=>脚手架’不是类型’(BuildContext,ChangeNotifier,Widget)=>

Widget’的子类型

但是,当我将扩展类型从ChangeNotifier更改为OnBoardingViewModel时,一切正常。

有人可以帮助我,或解释为什么这不起作用吗?

import 'package:flutter/material.dart';

import 'package:get_it/get_it.dart';

import 'package:provider/provider.dart';

class StateFullConsumerWidget extends StatefulWidget{

StateFullConsumerWidget({@required this.builder,Key key,this.onPostViewModelInit,this.child}) : super(key : key);

final Widget Function(BuildContext context, ChangeNotifier value, Widget child) builder;

final Widget child;

final void Function(T) onPostViewModelInit;

@override

_StateFullConsumerWidgetState createState() => _StateFullConsumerWidgetState();

}

class _StateFullConsumerWidgetState extends State{

T _viewModel;

@override

void initState() {

// assign the model once when state is initialised

_viewModel = GetIt.instance.get();

widget.onPostViewModelInit(_viewModel);

super.initState();

}

@override

Widget build(BuildContext context) {

return ChangeNotifierProvider(

builder: (context) => _viewModel,

child: Consumer(

builder: widget.builder,

child: widget.child,

),

);

}

}

我的小部件

StateFullConsumerWidget(

onPostViewModelInit: (viewModel){

buildIntroList(viewModel);

viewModel.maxPages = _introWidgetsList.length;

},

builder: (context,viewModel,child) {

return Scaffold(

key: widget.scaffoldKey,

body: SafeArea(

child: Container(),

),

),

);

},

);

我的ViewModel

import 'package:flutter/material.dart';

class OnBoardingViewModel extends ChangeNotifier{

OnBoardingViewModel(){

}

}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐