我正在try 创建一个通用的使用者小部件,以便于将ViewModel传递给它的子级.因此,我有两个函数.一个在初始化ViewModel之后具有函数(T),另一个用于将模型传递给子Widget.
泛型类中是ChangeNotifier的子类,在我想要在两个函数中发送T值之前,它工作得很好.
然后,我得到以下错误:
type '(OnBoardingViewModel) => Null' is not a subtype of type '(ChangeNotifier) => void'
和
type '(BuildContext, OnBoardingViewModel, Widget) => Scaffold' is not a subtype of type '(BuildContext, ChangeNotifier, Widget) => Widget'
但是,当我将扩展类型从ChangeNotifier更改为OnBoardingViewModel时,一切工作正常.
can someone help me 和 or explain why this ain't working??
import 'package:flutter/material.dart';
import 'package:get_it/get_it.dart';
import 'package:provider/provider.dart';
class StateFullConsumerWidget<T extends ChangeNotifier> 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<T> createState() => _StateFullConsumerWidgetState<T>();
}
class _StateFullConsumerWidgetState<T extends ChangeNotifier> extends State<StateFullConsumerWidget>{
T _viewModel;
@override
void initState() {
// assign the model once when state is initialised
_viewModel = GetIt.instance.get<T>();
widget.onPostViewModelInit(_viewModel);
super.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<T>(
builder: (context) => _viewModel,
child: Consumer<T>(
builder: widget.builder,
child: widget.child,
),
);
}
}
我的小部件
StateFullConsumerWidget<OnBoardingViewModel>(
onPostViewModelInit: (viewModel){
buildIntroList(viewModel);
viewModel.maxPages = _introWidgetsList.length;
},
builder: (context,viewModel,child) {
return Scaffold(
key: widget.scaffoldKey,
body: SafeArea(
child: Container(),
),
),
);
},
);
我的视图模型
import 'package:flutter/material.dart';
class OnBoardingViewModel extends ChangeNotifier{
OnBoardingViewModel(){
}
}