Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects
Verified Commit 1f941bc4 authored by Sage Muhammad Abdullah's avatar Sage Muhammad Abdullah
Browse files

Implement list institusi

parent c5964831
Branches
No related tags found
2 merge requests!10New version number and Enabling Agregasi Kebutuhan Page,!6First Version go to master
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:to_string/to_string.dart';
part 'institusi.g.dart';
@JsonSerializable()
@ToString()
class Institusi extends Equatable {
final String nama;
final String alamat;
final String info1;
final String info2;
Institusi({
this.nama,
this.alamat,
this.info1,
this.info2,
});
factory Institusi.fromJson(Map<String, dynamic> json) =>
_$InstitusiFromJson(json);
Map<String, dynamic> toJson() => _$InstitusiToJson(this);
@override
List<Object> get props => [nama, alamat];
@override
String toString() => _$InstitusiToString(this);
}
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'institusi.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
Institusi _$InstitusiFromJson(Map<String, dynamic> json) {
return Institusi(
nama: json['nama'] as String,
alamat: json['alamat'] as String,
info1: json['info1'] as String,
info2: json['info2'] as String,
);
}
Map<String, dynamic> _$InstitusiToJson(Institusi instance) => <String, dynamic>{
'nama': instance.nama,
'alamat': instance.alamat,
'info1': instance.info1,
'info2': instance.info2,
};
// **************************************************************************
// ToStringGenerator
// **************************************************************************
String _$InstitusiToString(Institusi o) {
return """Institusi{nama: ${o.nama}, alamat: ${o.alamat}, info1: ${o.info1}, info2: ${o.info2}}""";
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/widgets.dart';
import 'package:mobile_apps/src/models/institusi.dart';
class InstitusiRepository {
CollectionReference get institusiCollections =>
Firestore.instance.collection('waspada/covid19/institusi');
Stream<QuerySnapshot> get institusiSnapshots =>
institusiCollections.snapshots();
List<Institusi> semuaInstitusi(AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData || snapshot.hasError) return [];
return snapshot.data.documents
.map<Institusi>((document) => Institusi.fromJson(document.data))
.toList();
}
}
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:mobile_apps/src/common/constants.dart';
import 'package:mobile_apps/src/screens/home/institusi/list_institusi.dart';
import 'package:mobile_apps/src/screens/home/inventories/inventories.dart';
import 'package:mobile_apps/src/services/auth_service.dart';
import 'package:provider/provider.dart';
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
......@@ -33,6 +33,10 @@ class HomeScreen extends StatelessWidget {
padding: EdgeInsets.only(top: 24.0),
child: InventoriesWidget(),
),
Padding(
padding: EdgeInsets.only(top: 24.0),
child: ListInstitusiWidget(),
),
],
),
),
......
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:mobile_apps/src/models/institusi.dart';
class InstitusiWidget extends StatelessWidget {
final Institusi institusi;
const InstitusiWidget(this.institusi, {Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
ListTile(
title: Text(institusi.nama,
style: Theme.of(context)
.textTheme
.headline6
.copyWith(fontWeight: FontWeight.bold)),
subtitle: Text('${institusi.alamat}',
style: Theme.of(context).textTheme.subtitle1),
trailing: FlatButton(
color: Colors.red,
textColor: Colors.white,
disabledColor: Colors.grey,
disabledTextColor: Colors.black,
padding: EdgeInsets.all(16.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(32)),
splashColor: Colors.redAccent,
onPressed: () {},
child: Text(
'Detail Kebutuhan',
style: TextStyle(fontSize: 12.0, fontWeight: FontWeight.bold),
),
),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 16.0),
child: Text('${institusi.info1} | ${institusi.info2}',
style: Theme.of(context)
.textTheme
.subtitle2
.copyWith(color: Colors.black54))),
Padding(
padding: EdgeInsets.all(16.0),
child: ClipRRect(
borderRadius: BorderRadius.circular(16.0),
child: Container(
height: 16,
child: LinearProgressIndicator(
backgroundColor: Colors.pink[300],
value: 0.3,
valueColor:
AlwaysStoppedAnimation<Color>(Colors.red[700])),
)))
]));
}
}
import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'package:mobile_apps/src/repositories/institusi_repository.dart';
// Extension import
import 'package:mobile_apps/src/extensions/scaffold_extension.dart';
import 'institusi.dart';
class ListInstitusiWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final repository = InstitusiRepository();
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(bottom: 12.0),
child: Text(
'Institusi Siaga Wabah',
style: Theme.of(context).textTheme.headline5,
)),
StreamBuilder(
stream: repository.institusiCollections.snapshots(),
builder: (_, snapshot) {
if (snapshot.hasError) {
SchedulerBinding.instance.addPostFrameCallback((_) {
Scaffold.of(context).showErrorSnackBar(
'Oops! Ada sesuatu yang salah, mohon coba lagi ya.');
});
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
}
final semuaInstitusi = repository.semuaInstitusi(snapshot).take(5);
return Column(
children: [
...semuaInstitusi
.map((institusi) => InstitusiWidget(institusi))
.toList(),
FlatButton(
child: Text('Lihat Semua'),
onPressed: () {},
),
],
);
},
)
],
);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment