Browse Source

resource helper screen

master
daivph 5 years ago
parent
commit
f6e2555d76
7 changed files with 217 additions and 6 deletions
  1. +6
    -0
      jsons/ResourceHelper.json
  2. +16
    -0
      lib/models/ResourceHelper.dart
  3. +23
    -0
      lib/models/ResourceHelper.g.dart
  4. +2
    -0
      lib/models/index.dart
  5. +17
    -0
      lib/presentation/screens/home/view/home_page.dart
  6. +147
    -0
      lib/presentation/screens/resources/sc_resource_helper.dart
  7. +6
    -6
      pubspec.lock

+ 6
- 0
jsons/ResourceHelper.json View File

@@ -0,0 +1,6 @@
{
"id" : 1,
"name" : "name",
"description": "description",
"isSelected": true
}

+ 16
- 0
lib/models/ResourceHelper.dart View File

@@ -0,0 +1,16 @@
import 'package:json_annotation/json_annotation.dart';

part 'ResourceHelper.g.dart';

@JsonSerializable()
class ResourceHelper {
ResourceHelper();

num id;
String name;
String description;
bool isSelected;
factory ResourceHelper.fromJson(Map<String,dynamic> json) => _$ResourceHelperFromJson(json);
Map<String, dynamic> toJson() => _$ResourceHelperToJson(this);
}

+ 23
- 0
lib/models/ResourceHelper.g.dart View File

@@ -0,0 +1,23 @@
// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'ResourceHelper.dart';

// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************

ResourceHelper _$ResourceHelperFromJson(Map<String, dynamic> json) {
return ResourceHelper()
..id = json['id'] as num
..name = json['name'] as String
..description = json['description'] as String
..isSelected = json['isSelected'] as bool;
}

Map<String, dynamic> _$ResourceHelperToJson(ResourceHelper instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'description': instance.description,
'isSelected': instance.isSelected
};

+ 2
- 0
lib/models/index.dart View File

@@ -0,0 +1,2 @@
export 'Plot.dart' ;
export 'ResourceHelper.dart' ;

+ 17
- 0
lib/presentation/screens/home/view/home_page.dart View File

@@ -2,6 +2,7 @@ import 'package:farm_tpf/presentation/screens/actions/nursery/sc_nursery.dart';
import 'package:farm_tpf/presentation/screens/actions/plant/sc_plant.dart';
import 'package:farm_tpf/presentation/screens/plot/sc_plot.dart';
import 'package:farm_tpf/presentation/screens/plot_detail/sc_plot_detail.dart';
import 'package:farm_tpf/presentation/screens/resources/sc_resource_helper.dart';
import 'package:flutter/material.dart';

class HomePage extends StatelessWidget {
@@ -42,6 +43,22 @@ class HomePage extends StatelessWidget {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => PlotListScreen()));
}),
MaterialButton(
child: Text("ResourceHelperScreen"),
onPressed: () {
Navigator.of(context)
.push(MaterialPageRoute(
builder: (_) => ResourceHelperScreen(
resourceName: "test",
selectedPlotId: 1531,
),
fullscreenDialog: false))
.then((value) {
if (value != null) {
print("Home: $value");
}
});
}),
],
),
),

+ 147
- 0
lib/presentation/screens/resources/sc_resource_helper.dart View File

@@ -0,0 +1,147 @@
import 'package:farm_tpf/data/repository/repository.dart';
import 'package:farm_tpf/models/index.dart';
import 'package:farm_tpf/presentation/custom_widgets/bottom_loader.dart';
import 'package:farm_tpf/presentation/custom_widgets/loading_list_page.dart';
import 'package:farm_tpf/utils/bloc/infinity_scroll_bloc.dart';
import 'package:farm_tpf/utils/const_string.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

class ResourceHelperScreen extends StatefulWidget {
final String resourceName;
final int selectedPlotId;
ResourceHelperScreen(
{@required this.resourceName, @required this.selectedPlotId});
@override
_ResourceHelperScreenState createState() => _ResourceHelperScreenState();
}

class _ResourceHelperScreenState extends State<ResourceHelperScreen> {
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) =>
InfinityScrollBloc(repository: Repository())..add(DataFetched()),
child: HoldInfinityWidget(
selectedPlotId: widget.selectedPlotId,
),
);
}
}

class HoldInfinityWidget extends StatelessWidget {
final int selectedPlotId;
HoldInfinityWidget({@required this.selectedPlotId});
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(title: Text("Chọn danh sách")),
body: InfinityView(
selectedPlotId: selectedPlotId,
));
}
}

class InfinityView extends StatefulWidget {
final int selectedPlotId;
InfinityView({@required this.selectedPlotId});
@override
_InfinityViewState createState() => _InfinityViewState();
}

class _InfinityViewState extends State<InfinityView> {
final _scrollController = ScrollController();
final _scrollThreshold = 250.0;
InfinityScrollBloc _infinityScrollBloc;

@override
void initState() {
_scrollController.addListener(() {
final maxScroll = _scrollController.position.maxScrollExtent;
final currentScroll = _scrollController.position.pixels;
if (maxScroll - currentScroll < _scrollThreshold) {
_infinityScrollBloc.add(DataFetched());
}
});
_infinityScrollBloc = BlocProvider.of<InfinityScrollBloc>(context);
super.initState();
}

@override
Widget build(BuildContext context) {
return BlocBuilder<InfinityScrollBloc, InfinityScrollState>(
builder: (context, state) {
if (state is InfinityScrollFailure) {
return Center(child: Text(label_error_get_data));
}
if (state is InfinityScrollSuccess) {
if (state.items.isEmpty) {
return Center(child: Text(label_list_empty));
}

Plot selectedPlot;
List<Plot> plots = state.items.map((e) => e as Plot).toList();
plots.forEach((plot) {
plot.id == widget.selectedPlotId ? selectedPlot = plot : Plot();
});
return RefreshIndicator(
child: ListView.builder(
itemBuilder: (BuildContext context, int index) {
return index >= state.items.length
? BottomLoader()
: ItemInfinityWidget(
item: state.items[index],
selectedPlot: selectedPlot,
);
},
itemCount: state.hasReachedMax
? state.items.length
: state.items.length + 1,
controller: _scrollController,
),
onRefresh: () async {
_infinityScrollBloc.add(OnRefresh());
});
}
return Center(
child: LoadingListPage(),
);
},
);
}

@override
void dispose() {
_scrollController.dispose();
super.dispose();
}
}

class ItemInfinityWidget extends StatelessWidget {
final Plot item;
final Plot selectedPlot;

const ItemInfinityWidget({Key key, @required this.item, this.selectedPlot})
: super(key: key);

@override
Widget build(BuildContext context) {
return GestureDetector(
child: Card(
color: item.id % 3 == 0 ? Colors.white : Colors.greenAccent[100],
child: Material(
child: RadioListTile(
title: Text(item.activityExecuteDate.toString()),
subtitle: Text(item.id.toString()),
value: item,
groupValue: selectedPlot,
onChanged: (Plot value) {
print("selected value: ${value.id}");
Navigator.of(context).pop(value.id);
}),
)),
onTap: () {});
}
}

+ 6
- 6
pubspec.lock View File

@@ -7,14 +7,14 @@ packages:
name: _fe_analyzer_shared
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.0"
version: "7.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
url: "https://pub.dartlang.org"
source: hosted
version: "0.39.16"
version: "0.39.17"
archive:
dependency: transitive
description:
@@ -84,7 +84,7 @@ packages:
name: build_resolvers
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.10"
version: "1.3.11"
build_runner:
dependency: "direct dev"
description:
@@ -133,7 +133,7 @@ packages:
name: cli_util
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.4"
version: "0.2.0"
code_builder:
dependency: transitive
description:
@@ -358,7 +358,7 @@ packages:
name: json_serializable
url: "https://pub.dartlang.org"
source: hosted
version: "3.3.0"
version: "3.4.0"
keyboard_dismisser:
dependency: "direct main"
description:
@@ -643,7 +643,7 @@ packages:
name: stream_transform
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "0.0.20"
string_scanner:
dependency: transitive
description:

Loading…
Cancel
Save