簡體   English   中英

如何在 flutter 中使用 hydated_bloc 保留 state?

[英]How to keep the state using hydated_bloc in flutter?

I'm trying keep the state using the library hydrated_bloc, the problem is what all example of the this library are very basic and i want to maintain the state by consuming an example api rest but I still can't implement the logic of this example :

userbloc_bloc.dart

import 'dart:async';
import 'package:di/users/model/user.dart';
import 'package:di/users/repository/cloud_api_repository.dart';
import 'package:equatable/equatable.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';

part 'userbloc_event.dart';
part 'userbloc_state.dart';

class UserblocBloc extends HydratedBloc<UserblocEvent, UserblocState> {
  @override
  UserblocState get initialState {
     return super.initialState ?? UserblocInitial();

  }

    @override
  UserblocState fromJson(Map<String, dynamic> json) {
    try {
      final usermodel = UserModel.fromJson(json);
      return UserblocLoaded(usermodel);
    } catch (_) {
      return null;
    }
  }

  @override
  Map<String, dynamic> toJson(UserblocState state) {

    if (state is UserblocLoaded) {
      return state.userModel.toJson();
    }else{
      return null;
    }

  }

  @override
  Stream<UserblocState> mapEventToState(
    UserblocEvent event,
  ) async* {

  }


}

userbloc_state.dart

part of 'userbloc_bloc.dart';


abstract class UserblocState extends Equatable {
  UserblocState([List props = const[]]);
}

class UserblocInitial extends UserblocState {
   CloudApiRepository _cloudApiRepository;
  @override
  List<Object> get props => null;
  Future<UserModel> getlistUser() => _cloudApiRepository.getlistUser();
}

    class UserblocLoading extends UserblocState {
      @override
      Li

st<Object> get props => null;
}
class UserblocLoaded extends UserblocState {
  final UserModel userModel;
  UserblocLoaded(this.userModel);

  @override
  List<Object> get props => null;

}

HomeUser.dart

import 'package:di/users/bloc/userbloc/userbloc_bloc.dart';
import 'package:di/users/model/user.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
class HomeUser extends StatefulWidget {
  HomeUser({Key key}) : super(key: key);

  @override
  _HomeUserState createState() => _HomeUserState();
}

class _HomeUserState extends State<HomeUser> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
          body: BlocProvider(create: (context) => UserblocBloc(),
          child: BlocBuilder<UserblocBloc, UserblocState>(
            builder: (BuildContext context, UserblocState state) {
              if (state is UserblocInitial) {
                return showanytext();
              } else if (state is UserblocLoading) {
                return buildLoading();
              } else if (state is UserblocLoaded) {
                return buildColumnWithData(state.userModel.data);
              }
            },
          ),
        ),
    );
  }
}

Widget buildColumnWithData(List<User> users){
  final user = users;

  return ListView.builder(
    itemCount: users.length,
    itemBuilder: (BuildContext context, int i){

      return Container(
        padding: EdgeInsets.all(15),
        child: Text("${user[i].firstName}", style: TextStyle(color:Colors.white),),
        decoration: BoxDecoration(
          color: Colors.black
        ),
      );
    });
}
Widget buildLoading(){

  return Center(
    child: Container(
      child: CircularProgressIndicator(),
    ),
  );
}

Widget showanytext(){

  return Center(
    child: Container(
      child: Text("Construyendo el widget"),
    ),
  );
}

關於如何保持我的墊子的 state 消耗 api 的一些想法,如果我關閉應用程序並在上次離開她時在同一個地方重新打開它,我關閉她

好問題 - 我有一個非常相似的問題。

簡而言之 - 我的 Cubit 狀態反映了填寫表格並將其發送到 API 的階段: - 初始, - 開始, - 勾選, - 完成和 - 發送。

Since it is impossible to determine which state should be returned by the Hydrated Bloc functionality I am actually adding the state property to the Cubit State as an enum to reflect the state in which the Cubit 'was last seen' and on some conditions return the same state 來自存儲庫。 有了它,最后填寫的字段將被提取。 這聽起來和看起來像是一種冗余,但我想不出更好的解決方案。 我很樂意聽到一些想法:)

這是Cubit的State class聲明:

part of 'job_realization_cubit.dart';

enum Status {
  initial,
  started,
  tick,
  completed,
  sent,
}

abstract class JobRealizationState extends Equatable {
  const JobRealizationState({
    this.status,
    this.timeLeft,
    this.jobRealization,
    this.message,
  });
  final Status status;
  final int timeLeft;
  final JobRealization jobRealization;
  final String message;

  @override
  List<Object> get props => [status, timeLeft, jobRealization, message];
}

class JobRealizationInitial extends JobRealizationState {
  const JobRealizationInitial();
}

class JobRealizationStarted extends JobRealizationState {
  const JobRealizationStarted({status, timeLeft, jobRealization, message})
      : super(
          status: status,
          timeLeft: timeLeft,
          jobRealization: jobRealization,
          message: message,
        );
}

//Timekeeping after start of Realization
class JobRealizationTick extends JobRealizationState {
  const JobRealizationTick({status, timeLeft, jobRealization, message})
      : super(
          status: status,
          timeLeft: timeLeft,
          jobRealization: jobRealization,
          message: message,
        );
}


class JobRealizationDone extends JobRealizationState {
  const JobRealizationDone({status, timeLeft, jobRealization, message})
      : super(
          status: status,
          timeLeft: timeLeft,
          jobRealization: jobRealization,
          message: message,
        );
}

class JobRealizationSent extends JobRealizationState {
  const JobRealizationSent({status, timeLeft, jobRealization, message})
      : super(
          status: status,
          timeLeft: timeLeft,
          jobRealization: jobRealization,
          message: message,
        );
}

class JobRealizationSendError extends JobRealizationState {
  const JobRealizationSendError({status, timeLeft, jobRealization, message})
      : super(
          status: status,
          timeLeft: timeLeft,
          jobRealization: jobRealization,
          message: message,
        );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM