[英]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.