Flutter 颤振群-颤振群状态未更新

Flutter 颤振群-颤振群状态未更新,flutter,dart,state,bloc,Flutter,Dart,State,Bloc,我才刚开始学习颤振阵营。 我试图使状态,但它总是去最初的。解决办法是什么 集团 类VisiMisiBloc扩展了Bloc{ VisiMisiBloc(this.visimisirepositional):super(VisiMisiInitial()); 最后一次视力恢复视力恢复视力恢复视力恢复; @凌驾 Stream mapEventToState(VisiMisiEvent事件)异步*{ if(事件为GetVisiMisiList){ 收益*_getVisiMisi(事件、状态); } }

我才刚开始学习颤振阵营。 我试图使状态,但它总是去最初的。解决办法是什么

集团

类VisiMisiBloc扩展了Bloc{
VisiMisiBloc(this.visimisirepositional):super(VisiMisiInitial());
最后一次视力恢复视力恢复视力恢复视力恢复;
@凌驾
Stream mapEventToState(VisiMisiEvent事件)异步*{
if(事件为GetVisiMisiList){
收益*_getVisiMisi(事件、状态);
}
}
流_getVisiMisi(VisiMisiEvent事件,Visimistate状态)异步*{
产生可视性阅读();
试一试{
ResponseModel response=wait visimisRespository.getVisiMisi();
打印(回复);
如果(response.statusCode==0){
int insertedId=wait visimisireposition.insertVisiMisi(response.data);
打印(插入);
List visiMisiList=等待VISIMISIREposition.getAllVisiMisi();
VisiMisiLoaded产量(visiMisiList);
}否则{
产生VisiMisiError(response.errorMessage);
}
}关于异常捕获(e){
屈服可视错误(例如toString());
}
}
}
陈述

visi_misi_bloc.dart'的一部分;
抽象类VisiMiState扩展了Equalable{
const visimistate();
}
类VisiMisIIInitial扩展了VisiMisiState{
常量VisiMisiInitial();
@凌驾
Listget道具=>[];
}
类VisiMisiLoading扩展了VisiMisiState{
const VisiMisiLoading();
@凌驾
Listget道具=>[];
}
类VisiMisiLoaded扩展了VisiMisiState{
最终列表visiMisiModel;
const visimisioladed(this.visiMisiModel);
@凌驾
列表获取道具=>[visiMisiModel];
}
类VisiMisiError扩展VisiMisiState{
最终字符串消息;
const VisiMisiError(此消息);
@凌驾
Listget道具=>[message];
}
事件

visi_misi_bloc.dart'的一部分;
抽象类VisiMisiEvent扩展了Equalable{
const VisiMisiEvent();
}
类GetVisiMisiList扩展了VisiMisiEvent{
@凌驾
列表获取道具=>[];
}
存储库

abstract class VisiMisiRepository {
  Future<int> insertVisiMisi(VisiMisiModel todo);
  Future<ResponseModel<VisiMisiModel>> getVisiMisi();
  Future<List<VisiMisiModel>> getAllVisiMisi();
}
抽象类visimisrepository{
Future insertVisiMisi(VisiMisiModel todo);
未来的getVisiMisi();
未来getAllVisiMisi();
}
存储库IMPL

class VisiMisiRepositoryImpl extends VisiMisiRepository {
  final NetworkInfoImpl networkInfo;
  final RemoteDataSource remoteDatasource;
  final VisiMisiDao dao;

  VisiMisiRepositoryImpl(this.networkInfo, this.remoteDatasource, this.dao);

  @override
  Future<ResponseModel<VisiMisiModel>> getVisiMisi() {
    return remoteDatasource.visiMisi();
  }

  @override
  Future<int> insertVisiMisi(VisiMisiModel todo) {
    return dao.upsert(todo);
  }

  @override
  Future<List<VisiMisiModel>> getAllVisiMisi() {
    return dao.getAll(userTABLE, VisiMisiModel.fromJson);
  }
}
类VisiMisIrespositoryImpl扩展了VisiMisIrespository{
最终网络信息impl networkInfo;
最终RemoteDataSource RemoteDataSource;
最后一次访问米斯多道;
visimisirepositionimpl(this.networkInfo、this.remoteDatasource、this.dao);
@凌驾
未来的getVisiMisi(){
返回remoteDatasource.visiMisi();
}
@凌驾
Future insertVisiMisi(VisiMisiModel todo){
返回道。向上插入(todo);
}
@凌驾
未来的getAllVisiMisi(){
返回dao.getAll(userTABLE,VisiMisiModel.fromJson);
}
}
远程数据源

Future<ResponseModel<VisiMisiModel>> visiMisi() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String auth_token = prefs.getString("auth_token");
    try {
      final response = await httpClient.get(ServiceUrl.visiMisi, auth_token);

      if(response.statusCode != 200){
        throw new Exception('Error getting visi misi');
      }

      return ResponseModel<VisiMisiModel>.fromJson(response, VisiMisiModel.fromJson);
    }catch(e){
      print(e);
    }
  }
Future visiMisi()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
String auth_token=prefs.getString(“auth_token”);
试一试{
最终响应=等待httpClient.get(ServiceUrl.visiMisi,auth_令牌);
如果(response.statusCode!=200){
抛出新异常(“获取visi misi时出错”);
}
返回ResponseModel.fromJson(response,VisiMisiModel.fromJson);
}捕获(e){
印刷品(e);
}
}
看法

类VisiMisiPage扩展StatefulWidget{
@凌驾
_VisiMisIpGestate createState()=>\u VisiMisIpGestate();
}
类_visimisipagentate扩展状态{
可视化存储库;
@凌驾
void initState(){
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回安全区(
孩子:脚手架(
背景颜色:AppColor.white,
appBar:appBar(
标题:文本(“VISI&MISI”,样式:TextStyle(fontSize:16,颜色:AppColor.deepCerulean)),
背景颜色:Colors.white,
海拔:0,
自动嵌入:false,
亮度:亮度,亮度,
领先:IconButton(
图标:新图标(Icons.arrow\u back,颜色:AppColor.deepCerulean,),
onPressed:()=>Navigator.of(context.pop(),
),
),
正文:BlocProvider(
创建:()=>VisiMisiBloc(存储库),
孩子:BlocBuilder(
生成器:(上下文、状态){
如果(状态为VisiMisiInitial){
//(context.add)的BlocProvider.of(getvisimilist());
返回中心(子项:文本(state.toString()),);
}else if(状态为VisiMisiLoading){
返回中心(子项:CircularProgressIndicator(),);
}否则如果(状态为VisiMisiLoaded){
返回SingleChildScrollView(
子:容器(
子:列(
mainAxisAlignment:mainAxisAlignment.start,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
_visiWidget(上下文、状态),
尺寸箱(高度:20,),
_misiWidget(上下文),
尺寸箱(高度:30,),
_footerWidget(上下文)
],
),
),
);
}否则,如果(状态为VisiMisiError){
返回中心(子项:文本(state.message));
}
}
)
),
)
);
}
void\u onWidgetDidBuild(函数回调){
WidgetsBinding.instance.addPostFrameCallback((){
回调();
});
}
}
我得到一个未处理的异常:未处理的错误NoSuchMethodError:对null调用了方法“getVisiMisi”


在视图中,状态显示在VisiMisiInitial中,并且不希望更新为VisiMisiLoading

尝试如下初始化存储库:

class _VisiMisiPageState extends State<VisiMisiPage> {
  VisiMisiRepository repository;

  @override
  void initState(){
    super.initState();
    repository = VisiMisiRepositoryImpl( parameters here ); // add this one
  }
cla
class VisiMisiRepositoryImpl extends VisiMisiRepository {
  final NetworkInfoImpl networkInfo;
  final RemoteDataSource remoteDatasource;
  final VisiMisiDao dao;

  VisiMisiRepositoryImpl(this.networkInfo, this.remoteDatasource, this.dao);

  @override
  Future<ResponseModel<VisiMisiModel>> getVisiMisi() {
    return remoteDatasource.visiMisi();
  }

  @override
  Future<int> insertVisiMisi(VisiMisiModel todo) {
    return dao.upsert(todo);
  }

  @override
  Future<List<VisiMisiModel>> getAllVisiMisi() {
    return dao.getAll(userTABLE, VisiMisiModel.fromJson);
  }
}
Future<ResponseModel<VisiMisiModel>> visiMisi() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String auth_token = prefs.getString("auth_token");
    try {
      final response = await httpClient.get(ServiceUrl.visiMisi, auth_token);

      if(response.statusCode != 200){
        throw new Exception('Error getting visi misi');
      }

      return ResponseModel<VisiMisiModel>.fromJson(response, VisiMisiModel.fromJson);
    }catch(e){
      print(e);
    }
  }
class VisiMisiPage extends StatefulWidget {
  @override
  _VisiMisiPageState createState() => _VisiMisiPageState();
}

class _VisiMisiPageState extends State<VisiMisiPage> {
  VisiMisiRepository repository;

  @override
  void initState(){
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
          backgroundColor: AppColor.white,
          appBar: AppBar(
            title: Text("VISI & MISI", style: TextStyle(fontSize: 16, color: AppColor.deepCerulean),),
            backgroundColor: Colors.white,
            elevation: 0,
            automaticallyImplyLeading: false,
            brightness: Brightness.light,
            leading: IconButton(
              icon: new Icon(Icons.arrow_back, color: AppColor.deepCerulean,),
              onPressed: () => Navigator.of(context).pop(),
            ),
          ),
          body: BlocProvider<VisiMisiBloc>(
            create: (_) => VisiMisiBloc(repository),
            child: BlocBuilder<VisiMisiBloc, VisiMisiState>(
                  builder: (context, state) {
                    if (state is VisiMisiInitial) {
                      //BlocProvider.of<VisiMisiBloc>(context).add(GetVisiMisiList());
                      return Center(child: Text(state.toString()),);
                    } else if (state is VisiMisiLoading) {
                      return Center(child: CircularProgressIndicator(),);
                    } else if (state is VisiMisiLoaded) {
                      return SingleChildScrollView(
                        child: Container(
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.start,
                            crossAxisAlignment: CrossAxisAlignment.start,
                            children: [
                              _visiWidget(context, state),
                              SizedBox(height: 20,),
                              _misiWidget(context),
                              SizedBox(height: 30,),
                              _footerWidget(context)
                            ],
                          ),
                        ),
                      );
                    } else if (state is VisiMisiError) {
                      return Center(child: Text(state.message),);
                    }
                  }
              )
            ),
          )
    );
  }

  void _onWidgetDidBuild(Function callback) {
    WidgetsBinding.instance.addPostFrameCallback((_) {
      callback();
    });
  }
}
class _VisiMisiPageState extends State<VisiMisiPage> {
  VisiMisiRepository repository;

  @override
  void initState(){
    super.initState();
    repository = VisiMisiRepositoryImpl( parameters here ); // add this one
  }
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiRepositoryProvider(
        providers: [
          RepositoryProvider<UserRepository>(
            create: (context) => UserRepository(),
          ),
        ],
        child: MultiBlocProvider(
            providers: [
              BlocProvider<LoginBloc>(
                create: (context) => LoginBloc(context.read<UserRepository>()),
              ),
            ],
            child: Widget()));
  }
}