Laporan Flutter Dan Android Studio - 1815051088
Laporan Flutter Dan Android Studio - 1815051088
Tugas Laporan
Disusun Oleh :
SINGARAJA
2020
1. Tampilan Splash Screen
2. Tampilan Tambah Data (Form Add)
3. Tampilan Change data
SOURCE CODE :
1. Main.dart
import 'package:crud/src/app.dart';
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
home: new App(),
));
}
2. app.dart
import 'package:crud/src/ui/formadd/form_add_screen.dart';
import 'package:crud/src/ui/home/home_screen.dart';
import 'package:flutter/material.dart';
3. homescreen.dart
import 'package:flutter/material.dart';
import 'package:crud/src/api/api_service.dart';
import 'package:crud/src/model/profile.dart';
import 'package:crud/src/ui/formadd/form_add_screen.dart';
@override
void initState() {
super.initState();
apiService = ApiService();
}
@override
Widget build(BuildContext context) {
this.context = context;
return SafeArea(
child: FutureBuilder(
future: apiService.getProfiles(),
builder: (BuildContext context, AsyncSnapshot<List<Profile>> snapshot) {
if (snapshot.hasError) {
return Center(
child: Text(
"Something wrong with message: ${snapshot.error.toString()}"),
);
} else if (snapshot.connectionState == ConnectionState.done) {
List<Profile> profiles = snapshot.data;
return _buildListView(profiles);
} else {
return Center(
child: CircularProgressIndicator(),
);
}
},
),
);
}
FormAddScreen({this.profile});
@override
_FormAddScreenState createState() => _FormAddScreenState();
}
@override
void initState() {
if (widget.profile != null) {
_isFieldNameValid = true;
_controllerName.text = widget.profile.name;
_isFieldEmailValid = true;
_controllerEmail.text = widget.profile.email;
_isFieldAgeValid = true;
_controllerAge.text = widget.profile.age.toString();
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldState,
appBar: AppBar(
iconTheme: IconThemeData(color: Colors.white),
title: Text(
widget.profile == null ? "Form Add" : "Change Data",
style: TextStyle(color: Colors.white),
),
),
body: Stack(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
_buildTextFieldName(),
_buildTextFieldEmail(),
_buildTextFieldAge(),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: RaisedButton(
child: Text(
widget.profile == null
? "Submit".toUpperCase()
: "Update Data".toUpperCase(),
style: TextStyle(
color: Colors.white,
),
),
onPressed: () {
if (_isFieldNameValid == null ||
_isFieldEmailValid == null ||
_isFieldAgeValid == null ||
!_isFieldNameValid ||
!_isFieldEmailValid ||
!_isFieldAgeValid) {
_scaffoldState.currentState.showSnackBar(
SnackBar(
content: Text("Please fill all field"),
),
);
return;
}
setState(() => _isLoading = true);
String name = _controllerName.text.toString();
String email = _controllerEmail.text.toString();
int age = int.parse(_controllerAge.text.toString());
Profile profile =
Profile(name: name, email: email, age: age);
if (widget.profile == null) {
_apiService.createProfile(profile).then((isSuccess) {
setState(() => _isLoading = false);
if (isSuccess) {
Navigator.pop(_scaffoldState.currentState.context);
} else {
_scaffoldState.currentState.showSnackBar(SnackBar(
content: Text("Submit data failed"),
));
}
});
} else {
profile.id = widget.profile.id;
_apiService.updateProfile(profile).then((isSuccess) {
setState(() => _isLoading = false);
if (isSuccess) {
Navigator.pop(_scaffoldState.currentState.context);
} else {
_scaffoldState.currentState.showSnackBar(SnackBar(
content: Text("Update data failed"),
));
}
});
}
},
color: Colors.orange[600],
),
)
],
),
),
_isLoading
? Stack(
children: <Widget>[
Opacity(
opacity: 0.3,
child: ModalBarrier(
dismissible: false,
color: Colors.grey,
),
),
Center(
child: CircularProgressIndicator(),
),
],
)
: Container(),
],
),
);
}
Widget _buildTextFieldName() {
return TextField(
controller: _controllerName,
keyboardType: TextInputType.text,
decoration: InputDecoration(
labelText: "Full name",
errorText: _isFieldNameValid == null || _isFieldNameValid
? null
: "Full name is required",
),
onChanged: (value) {
bool isFieldValid = value.trim().isNotEmpty;
if (isFieldValid != _isFieldNameValid) {
setState(() => _isFieldNameValid = isFieldValid);
}
},
);
}
Widget _buildTextFieldEmail() {
return TextField(
controller: _controllerEmail,
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
labelText: "Email",
errorText: _isFieldEmailValid == null || _isFieldEmailValid
? null
: "Email is required",
),
onChanged: (value) {
bool isFieldValid = value.trim().isNotEmpty;
if (isFieldValid != _isFieldEmailValid) {
setState(() => _isFieldEmailValid = isFieldValid);
}
},
);
}
Widget _buildTextFieldAge() {
return TextField(
controller: _controllerAge,
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: "Age",
errorText: _isFieldAgeValid == null || _isFieldAgeValid
? null
: "Age is required",
),
onChanged: (value) {
bool isFieldValid = value.trim().isNotEmpty;
if (isFieldValid != _isFieldAgeValid) {
setState(() => _isFieldAgeValid = isFieldValid);
}
},
);
}
}
5. api_service.dart
import 'package:crud/src/model/profile.dart';
import 'package:http/http.dart' show Client;
class ApiService {
final String baseUrl = "http://api.bengkelrobot.net:8001";
Client client = Client();
Link Github :
https://github.com/mariomartin134/Flutter-API.git