Browse Source

fetch nursery detail if need edit (doing)

master
daivph 5 years ago
parent
commit
51e33af487
5 changed files with 183 additions and 67 deletions
  1. +8
    -8
      lib/data/api/dio_provider.dart
  2. +44
    -0
      lib/presentation/screens/actions/bloc/action_detail_bloc.dart
  3. +14
    -0
      lib/presentation/screens/actions/bloc/action_detail_event.dart
  4. +26
    -0
      lib/presentation/screens/actions/bloc/action_detail_state.dart
  5. +91
    -59
      lib/presentation/screens/actions/nursery/sc_edit_action_nursery.dart

+ 8
- 8
lib/data/api/dio_provider.dart View File

@@ -21,24 +21,24 @@ class HttpLogInterceptor extends InterceptorsWrapper {
var token = await pref.getString(DATA_CONST.TOKEN_KEY);
options.headers["Authorization"] = "Bearer $token";
options.receiveTimeout = 20000;
log("onRequest: ${options.uri}\n"
"data=${options.data}\n"
"method=${options.method}\n"
"headers=${options.headers}\n"
"queryParameters=${options.queryParameters}");
// log("onRequest: ${options.uri}\n"
// "data=${options.data}\n"
// "method=${options.method}\n"
// "headers=${options.headers}\n"
// "queryParameters=${options.queryParameters}");
return options;
}

@override
Future onResponse(Response response) {
log("onResponse: $response");
// log("onResponse: $response");
return super.onResponse(response);
}

@override
Future onError(DioError err) {
log("onError: $err\n"
"Response: ${err.response}");
// log("onError: $err\n"
// "Response: ${err.response}");
return super.onError(err);
}
}

+ 44
- 0
lib/presentation/screens/actions/bloc/action_detail_bloc.dart View File

@@ -0,0 +1,44 @@
import 'dart:async';
import 'dart:convert' as convert;
import 'dart:convert';

import 'package:bloc/bloc.dart';
import 'package:dio/dio.dart';
import 'package:equatable/equatable.dart';
import 'package:farm_tpf/custom_model/Nursery.dart';
import 'package:farm_tpf/data/api/app_exception.dart';
import 'package:farm_tpf/data/api/dio_provider.dart';
import 'package:farm_tpf/data/repository/repository.dart';
import 'package:farm_tpf/utils/const_common.dart';
import 'package:meta/meta.dart';

part 'action_detail_event.dart';
part 'action_detail_state.dart';

class ActionDetailBloc extends Bloc<ActionDetailEvent, ActionDetailState> {
final Repository repository;
ActionDetailBloc({@required this.repository}) : super(ActionDetailInitial());
final dio = DioProvider.instance();

@override
Stream<ActionDetailState> mapEventToState(
ActionDetailEvent event,
) async* {
if (event is FetchData) {
if (!event.isNeedFetchData) {
yield ActionDetailInitial();
} else {
try {
yield ActionDetailLoading();
Response<String> response = await dio.get(
"${ConstCommon.baseUrl}/api/activity-nursery/${event.activityId}");
final jsonData = json.decode(response.data);
yield ActionDetailSuccess(item: jsonData);
} catch (error) {
yield ActionDetailFailure(
errorString: AppException.handleError(error));
}
}
}
}
}

+ 14
- 0
lib/presentation/screens/actions/bloc/action_detail_event.dart View File

@@ -0,0 +1,14 @@
part of 'action_detail_bloc.dart';

abstract class ActionDetailEvent {
const ActionDetailEvent();

@override
List<Object> get props => [];
}

class FetchData extends ActionDetailEvent {
final bool isNeedFetchData;
final int activityId;
FetchData({@required this.isNeedFetchData, @required this.activityId});
}

+ 26
- 0
lib/presentation/screens/actions/bloc/action_detail_state.dart View File

@@ -0,0 +1,26 @@
part of 'action_detail_bloc.dart';

abstract class ActionDetailState {
const ActionDetailState();

@override
List<Object> get props => [];
}

class ActionDetailInitial extends ActionDetailState {}

class ActionDetailLoading extends ActionDetailState {}

class ActionDetailFailure extends ActionDetailState {
final String errorString;
ActionDetailFailure({@required this.errorString});
}

class ActionDetailSuccess<T> extends ActionDetailState {
final T item;

ActionDetailSuccess({this.item});

@override
List<Object> get props => [item];
}

+ 91
- 59
lib/presentation/screens/actions/nursery/sc_edit_action_nursery.dart View File

@@ -4,7 +4,9 @@ import 'package:farm_tpf/custom_model/Nursery.dart';
import 'package:farm_tpf/custom_model/NurseryDetail.dart';
import 'package:farm_tpf/data/repository/repository.dart';
import 'package:farm_tpf/models/index.dart';
import 'package:farm_tpf/presentation/custom_widgets/widget_loading.dart';
import 'package:farm_tpf/presentation/custom_widgets/widget_media_picker.dart';
import 'package:farm_tpf/presentation/screens/actions/bloc/action_detail_bloc.dart';
import 'package:farm_tpf/presentation/screens/actions/nursery/bloc/expansion_list_bloc.dart';
import 'package:farm_tpf/presentation/screens/resources/sc_resource_helper.dart';
import 'package:farm_tpf/utils/bloc/bloc/status_add_form_bloc.dart';
@@ -475,71 +477,101 @@ class _EditActionNurseryState extends State<EditActionNurseryScreen> {
),
BlocProvider<StatusAddFormBloc>(
create: (context) => StatusAddFormBloc(),
)
),
BlocProvider<ActionDetailBloc>(
create: (context) => ActionDetailBloc(
repository: Repository())
..add(
FetchData(isNeedFetchData: true, activityId: 1)))
],
child: Form(
key: _formKey,
autovalidate: _autoValidate,
child: SingleChildScrollView(
padding: EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
Container(
width: double.infinity,
child: Text(
"Ngày thực hiện",
style: TextStyle(
color: Colors.black54, fontSize: 13.0),
),
),
_btnExecuteTimePicker(),
SizedBox(
height: 8.0,
),
Container(
width: double.infinity,
child: Text(
"Tên giống",
style: TextStyle(
color: Colors.black54, fontSize: 13.0),
),
),
_btnSelectSeed(),
SizedBox(
height: 8.0,
),
_seedLengthField(),
SizedBox(
height: 8.0,
),
_quantityField(),
SizedBox(
height: 8.0,
),
_seedIncubationTimeField(),
SizedBox(
height: 8.0,
),
_desciptionField(),
SizedBox(
height: 8.0,
),
_btnAddWorker(),
SizedBox(
height: 8.0,
),
_buildListAddWorker(),
SizedBox(
height: 8.0,
),
WidgetMediaPicker(onChangeFiles: (filePaths) {
Get.find<ChangeFileController>()
.addAllFile(filePaths);
// setState(() {
// filePaths = filePaths;
// });
})
],
child: BlocConsumer<ActionDetailBloc,
ActionDetailState>(
listener: (context, state) {
if (state is ActionDetailFailure) {
print("fail");
LoadingDialog.hideLoadingDialog(context);
} else if (state is ActionDetailSuccess) {
LoadingDialog.hideLoadingDialog(context);
print("success");
_nursery = Nursery.fromJson(state.item);
_quantityController.text =
"sfdf ${_nursery.id}";
} else if (state is ActionDetailInitial) {
print("init");
} else if (state is ActionDetailLoading) {
print("loading");
LoadingDialog.showLoadingDialog(context);
}
},
builder: (context, state) {
return Column(
children: <Widget>[
Container(
width: double.infinity,
child: Text(
"Ngày thực hiện",
style: TextStyle(
color: Colors.black54,
fontSize: 13.0),
),
),
_btnExecuteTimePicker(),
SizedBox(
height: 8.0,
),
Container(
width: double.infinity,
child: Text(
"Tên giống",
style: TextStyle(
color: Colors.black54,
fontSize: 13.0),
),
),
_btnSelectSeed(),
SizedBox(
height: 8.0,
),
_seedLengthField(),
SizedBox(
height: 8.0,
),
_quantityField(),
SizedBox(
height: 8.0,
),
_seedIncubationTimeField(),
SizedBox(
height: 8.0,
),
_desciptionField(),
SizedBox(
height: 8.0,
),
_btnAddWorker(),
SizedBox(
height: 8.0,
),
_buildListAddWorker(),
SizedBox(
height: 8.0,
),
WidgetMediaPicker(
onChangeFiles: (filePaths) {
Get.find<ChangeFileController>()
.addAllFile(filePaths);
// setState(() {
// filePaths = filePaths;
// });
})
],
);
},
),
))))));
@override

Loading…
Cancel
Save