Professional Documents
Culture Documents
'Package:flutter/material - Dart' 'Package:pageview - App/src/app - Dart'
'Package:flutter/material - Dart' 'Package:pageview - App/src/app - Dart'
'Package:flutter/material - Dart' 'Package:pageview - App/src/app - Dart'
import 'package:flutter/material.dart';
import 'package:pageview_app/src/app.dart';
void main() {
runApp(new MaterialApp(
home: App(),
));
}
import 'package:flutter/material.dart';
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(child: PageView.builder(
itemBuilder: (context, index) {
return Container(
color: index % 2 == 0 ? Colors.pink : Colors.blueAccent,
);
},
));
}
}
import 'package:flutter/material.dart';
import 'package:infinitelistview_app/src/app.dart';
void main() {
runApp(new MaterialApp(
home: App(),
));
}
import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';
@override
Widget build(BuildContext context) {
void pushSaved() {
Navigator.push(
context,
MaterialPageRoute(builder: (context) {
final tiles = saved
.map((pair) => ListTile(
title: Text(pair.asCamelCase),
))
.toList();
return Scaffold(
appBar: AppBar(
title: Text("Guardado"),
),
body: ListView(
children: tiles,
),
);
}),
);
}
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
english_words: ^3.1.5
import 'package:drawer_app1/screens/battery.dart';
import 'package:drawer_app1/screens/home.dart';
import 'package:drawer_app1/screens/settings.dart';
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(home: Home(), routes: <String, WidgetBuilder>{
Settings.routeName: (BuildContext context) => Settings(),
Bettery.routeName: (BuildContext context) => Bettery(),
}));
}
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
void main() {
runApp(new MaterialApp(
home: Contact(),
));
}
import 'package:flutter/material.dart';
class ContactModel {
String email = "";
String name = "";
ContactModel({this.name, this.email});
}
import 'package:flutter/material.dart';
import 'package:listview1/src/model/contact_model.dart';
import 'package:flutter/material.dart';
import 'package:listview1/src/screens/contact_item.dart';
import 'model/contact_model.dart';
List<ContacItem> buildContactList() {
return buildList()
.map<ContacItem>((Contact) => ContacItem(contact: Contact))
.toList();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Center(
child: Text("Contactos"),
),
),
body: ListView(
children: buildContactList(),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:navigator_app1/src/app.dart';
void main() {
runApp(new MaterialApp(
home: App(),
));
}
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:navigator_app1/screens/second.dart';
void main() {
runApp(MaterialApp(home: MyButton()));
}
import 'package:flutter/material.dart';
void onPressButton() {
setState(() {
juanferStyle = collections[index];
index = index < 3 ? index + 1 : 0;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Center(
child: Text("SEGUNDO PROYECTO"),
),
backgroundColor: Colors.orangeAccent,
),
body: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
juanferStyle,
style: TextStyle(fontSize: 45),
),
Padding(padding: EdgeInsets.all(10.0)),
RaisedButton(
child: Text(
"Actualizar",
style: TextStyle(color: Colors.white),
),
color: Colors.blueAccent,
onPressed: onPressButton,
)
],
),
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:stateless_app1/src/app.dart';
void main() {
runApp(MaterialApp(
home: MyApp(),
));
}
MyCard({this.title, this.icon});
@override
Widget build(BuildContext context) {
return Card(
child: Container(
padding: EdgeInsets.all(20.0),
child: Center(
child: Column(
children: <Widget>[this.title, this.icon],
),
),
),
);
}
}
import 'package:flutter/material.dart';
MyCard({this.title, this.icon});
@override
Widget build(BuildContext context) {
return Card(
child: Container(
padding: EdgeInsets.all(20.0),
child: Center(
child: Column(
children: <Widget>[this.title, this.icon],
),
),
),
);
}
}
import 'package:flutter/material.dart';
import '../main.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:tabs_app1/src/screens/contact.dart';
import 'package:tabs_app1/src/screens/home.dart';
import 'package:tabs_app1/src/screens/video.dart';
void main() {
runApp(new MaterialApp(
home: MyTabs(),
));
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:tabsdesafio1/src/screens/alarma.dart';
import 'package:tabsdesafio1/src/screens/relog.dart';
import 'package:tabsdesafio1/src/screens/vuelo.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MaterialApp(
home: MyDialogoField(),
));
}
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Center(
child: Text("TextField Widget 1"),
),
),
body: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
TextField(
decoration: InputDecoration(
hintText: "Ingrese el texto aqui",
),
onSubmitted: onSubMitted,
controller: controller,
),
Text(inputText)
],
),
),
);
}
}
import 'package:flutter/material.dart';
import 'package:form_app/src/app.dart';
void main() {
runApp(new MaterialApp(
home: App(),
));
}
import 'package:flutter/material.dart';
import 'package:form_app/src/screens/login_screen.dart';
import 'package:flutter/material.dart';
import 'package:form_app/src/mixins/validate_mixin.dart';
Widget passwordField() {
return TextFormField(
obscureText: true,
decoration:
InputDecoration(labelText: "Contraseña", hintText: "Password"),
validator: validatePassword,
onSaved: (String value) {
print("save " + value);
},
);
}
Widget submitField() {
return RaisedButton(
child: Text("Enviar"),
onPressed: () {
if (formKey.currentState.validate()) {
formKey.currentState.save();
}
//formKey.currentState.reset();
});
}
}
class ValidateMixins {
String validateEmail(String value) {
if (!value.contains("@")) return "Email invalido";
return null;
}
dependencies:
flutter:
sdk: flutter
dev_dependencies:
flutter_test:
sdk: flutter
import 'dart:async';
import 'package:login_bloc/src/bloc/validators.dart';
import 'package:rxdart/rxdart.dart';
submit() {
final valedEmail = _emailController.value;
final valedPass = _passwordController.value;
print('Email $valedEmail');
print('Password $valedPass');
}
import 'dart:async';
class Validators {
final validaEmail =
StreamTransformer<String, String>.fromHandlers(handleData: (email, sink) {
if (email.contains('@')) {
sink.add(email);
} else {
sink.addError('Email invalido');
}
});
final validaPassword = StreamTransformer<String, String>.fromHandlers(
handleData: (password, sink) {
if (password.length > 5) {
sink.add(password);
} else {
sink.addError('Password invalido');
}
});
}
import 'package:flutter/material.dart';
import 'package:login_bloc/src/bloc/bloc.dart';
import 'package:provider/provider.dart';
import 'package:flutter/material.dart';
import 'package:login_bloc/src/screens/login_screen.dart';
import 'package:provider/provider.dart';
import 'package:login_bloc/src/bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'package:login_bloc/src/app.dart';
void main() {
runApp(new MaterialApp(
home: App(),
));
}
android/app
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
android {
compileSdkVersion 28
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID
(https://developer.android.com/studio/build/application-id.html).
applicationId "com.juanfertech.panaschat"
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.google.firebase:firebase-analytics:17.5.0'
implementation 'com.android.support:multidex:1.0.3'
}
android/
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
name: juanferchat_app
description: A new Flutter project.
# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at
https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as
CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/
InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.3
firebase_core: ^0.5.0
cloud_firestore: ^0.14.0+2
firebase_auth: ^0.18.0+1
modal_progress_hud: ^0.1.3
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
class Validation_Mixins {
String validateEmail(String value) {
if (!value.contains('@')) {
return "Email invalido";
return null;
}
}
String validatePassword(String value) {
if (value.length < 6) {
return "Password invalido";
return null;
}
}
}
class AuthenticationRequest {
bool success = false;
String errorMessage;
}
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:juanferchat_app/src/services/authentication.dart';
import 'package:juanferchat_app/src/services/message_service.dart';
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: AppBar(
title: Text('Chat Screen'),
actions: <Widget>[
IconButton(
icon: Icon(Icons.power_settings_new),
onPressed: () {
Authentication().singOut();
Navigator.pop(context);
})
],
),
body: SafeArea(
child: Column(
children: <Widget>[
StreamBuilder<QuerySnapshot>(
stream: MessageService().getMessageStream(),
// ignore: missing_return
builder: (context, snapshot) {
if (snapshot.hasData) {
return Flexible(
child: ListView(
children: _getChatItem(snapshot.data.docs),
),
);
}
},
),
Container(
decoration: _messageContainerDecoration,
child: Row(
children: <Widget>[
Expanded(
child: TextField(
decoration: _messageTextFieldDecoration,
controller: _messageController,
),
),
FlatButton(
onPressed: () {
MessageService().save(
collectionName: "messages",
collectionValues: {
'value': _messageController.text,
'sender': loggedInUser.email
},
);
_messageController.clear();
},
child: Text("Enviar", style: _sendButtonStyle),
),
],
),
),
],
),
),
);
}
chatItems.add(ChatItem(
message: messageValue,
sender: messageSender,
isLoggedInUser: messageSender == loggedInUser.email,
));
}
return chatItems;
}
}
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:juanferchat_app/src/mixins/validation_mixins.dart';
import 'package:juanferchat_app/src/services/authentication.dart';
import 'package:juanferchat_app/src/widgets/app_button.dart';
import 'package:juanferchat_app/src/widgets/app_error_message.dart';
import 'package:juanferchat_app/src/widgets/app_icon.dart';
import 'package:juanferchat_app/src/widgets/app_textfield.dart';
import 'package:modal_progress_hud/modal_progress_hud.dart';
@override
_LoginScreenState createState() => new _LoginScreenState();
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_focusNode.dispose();
_emailController.dispose();
_passwordController.dispose();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: ModalProgressHUD(
inAsyncCall: showSpinner,
child: Form(
key: _formkey,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 24.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
AppIcon(),
SizedBox(height: 48.0),
_emailField(),
SizedBox(height: 8.0),
_passwordField(),
SizedBox(height: 23.0),
_showErrorMessage(),
_submitButton(),
],
),
),
),
),
);
}
Widget _emailField() {
return AppTextField(
inputText: 'Ingresar email',
validator: validateEmail,
focusNode: _focusNode,
autoVlidate: _autoValidate,
controller: _emailController,
onChanged: (value) {},
);
}
Widget _passwordField() {
return AppTextField(
controller: _passwordController,
autoVlidate: _autoValidate,
inputText: 'Ingresar contraseña',
validator: validatePassword,
obscureText: true,
onChanged: (value) {},
);
}
Widget _submitButton() {
return AppButton(
color: Colors.lightGreenAccent,
onPressed: () async {
if (_formkey.currentState.validate()) {
setSpinnerStatus(true);
var auth = await Authentication().logginUser(
email: _emailController.text, password: _passwordController.text);
if (auth.success) {
Navigator.pushNamed(context, '/chat');
FocusScope.of(context).requestFocus(_focusNode);
_emailController.text = "";
_passwordController.text = "";
} else {
setState(() {
_errorMessage = auth.errorMessage;
});
}
setSpinnerStatus(false);
} else {
setState(() => _autoValidate = true);
}
},
name: 'Ingresa Pana',
);
}
Widget _showErrorMessage() {
if (_errorMessage.length > 0 && _errorMessage != null) {
return ErrorMessage(errorMessage: _errorMessage);
} else {
return Container(
height: 0.0,
);
}
}
}
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:juanferchat_app/src/mixins/validation_mixins.dart';
import 'package:juanferchat_app/src/services/authentication.dart';
import 'package:juanferchat_app/src/widgets/app_button.dart';
import 'package:juanferchat_app/src/widgets/app_error_message.dart';
import 'package:juanferchat_app/src/widgets/app_icon.dart';
import 'package:juanferchat_app/src/widgets/app_textfield.dart';
import 'package:firebase_auth/firebase_auth.dart';
FocusNode _focusNode;
TextEditingController _emailController;
TextEditingController _passwordController;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
bool _autoValidate = false;
String _errorMessage = "";
@override
void initState() {
// TODO: implement initState
super.initState();
_focusNode = FocusNode();
_emailController = TextEditingController();
_passwordController = TextEditingController();
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_focusNode.dispose();
_emailController.dispose();
_passwordController.dispose();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: Form(
key: _formKey,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 24.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
AppIcon(),
SizedBox(
height: 48.0,
),
_emailField(),
SizedBox(
height: 8.0,
),
_passwordField(),
SizedBox(
height: 24.0,
),
_showErrorMessage(),
_submitButton(),
],
),
),
),
);
}
Widget _emailField() {
return AppTextField(
inputText: 'Ingresar email',
autoVlidate: _autoValidate,
validator: validateEmail,
focusNode: _focusNode,
controller: _emailController,
onChanged: (value) {},
);
}
Widget _passwordField() {
return AppTextField(
inputText: 'Ingresar Contraseña',
autoVlidate: _autoValidate,
validator: validatePassword,
controller: _passwordController,
obscureText: true,
onChanged: (value) {},
);
}
Widget _submitButton() {
return AppButton(
color: Colors.lightBlueAccent,
onPressed: () async {
if (_formKey.currentState.validate()) {
var auth = await Authentication().createUser(
email: _emailController.text, password: _passwordController.text);
if (auth.success) {
Navigator.pushNamed(context, '/chat');
_emailController.text = "";
_passwordController.text = "";
FocusScope.of(context).requestFocus(_focusNode);
} else {
setState(() {
_errorMessage = auth.errorMessage;
});
}
} else {
setState(() => _autoValidate = true);
}
},
name: 'Registrarse',
);
}
Widget _showErrorMessage() {
if (_errorMessage.length > 0 && _errorMessage != null) {
return ErrorMessage(errorMessage: _errorMessage);
} else {
return Container(
height: 0.0,
);
}
}
}
import 'package:flutter/material.dart';
import 'package:juanferchat_app/src/widgets/app_button.dart';
import 'package:juanferchat_app/src/widgets/app_icon.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:juanferchat_app/src/model/auth_request.dart';
class Authentication {
FirebaseAuth _auth = FirebaseAuth.instance;
Future<AuthenticationRequest> createUser(
{String email = '', String password = ''}) async {
AuthenticationRequest authRequest = AuthenticationRequest();
try {
var user = await _auth.createUserWithEmailAndPassword(
email: email, password: password);
if (user != null) {
authRequest.success = true;
}
} catch (e) {
_mapErrorMessage(authRequest, e.code);
}
return authRequest;
}
default:
authRequest.errorMessage = code;
}
}
}
import 'package:cloud_firestore/cloud_firestore.dart';
class MessageService {
FirebaseFirestore _fireStore = FirebaseFirestore.instance;
void save({String collectionName, Map<String, dynamic> collectionValues}) {
_fireStore.collection(collectionName).add(collectionValues);
}
Stream<QuerySnapshot> getMessageStream() {
return _fireStore.collection('messages').snapshots();
}
}
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
@override
Widget build(BuildContext context) {
return new Text(
errorMessage,
style: TextStyle(
fontSize: 13.0,
color: Colors.redAccent,
height: 1.0,
fontWeight: FontWeight.w300),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter/material.dart';
@override
Widget build(BuildContext context) {
return TextFormField(
autovalidate: autoVlidate,
validator: validator,
focusNode: focusNode,
controller: controller,
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0),
hintText: inputText,
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(32.0)),
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(32.0)),
borderSide: BorderSide(color: Colors.lightGreenAccent, width: 2.0),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(32.0)),
borderSide: BorderSide(color: Colors.greenAccent, width: 2.0),
),
),
onChanged: onChanged,
textAlign: TextAlign.center,
obscureText: obscureText == null ? false : obscureText,
);
}
}
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:juanferchat_app/src/screens/chat_screen.dart';
import 'package:juanferchat_app/src/screens/login_screen.dart';
import 'package:juanferchat_app/src/screens/registration_screen.dart';
import 'package:juanferchat_app/src/screens/welcome_screen.dart';
FIREBASE
https://iconos8.es/icons/set/CHAT
CREAMOS LA BASE DE DATOS
name: movie_app
description: A new Flutter project.
# The following line prevents the package from being accidentally published to
# pub.dev using `pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at
https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as
CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/
InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
http: ^0.12.2
sqflite:
path_provider: ^0.4.1
flutter:
sdk: flutter
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
import 'dart:async';
import 'package:movie_app/model/Cast.dart';
import 'package:movie_app/model/Media.dart';
import 'package:movie_app/resources/api_provider.dart';
import 'package:movie_app/resources/repository.dart';
//herencia
abstract class MediaProvider {
Repository _repository = Repository.get();
Future<List<Media>> fetchMedia(String category);
Future<List<Cast>> fetchCast(int mediaId);
}
@override
Future<List<Cast>> fetchCast(int mediaId) {
return _repository.fetchCastMovies(mediaId);
}
}
@override
Future<List<Cast>> fetchCast(int mediaId) {
return _repository.fetchCastShows(mediaId);
}
}
class Cast {
int id;
String name;
String profilePath;
int mediaId;
String getCastUrl() => getMediumPictureUrl(profilePath);
import 'package:movie_app/common/Util.dart';
import 'package:movie_app/common/MediaProvider.dart';
class Media {
int id;
double voteAverage;
String title;
String posterPath;
String backdropPath;
String overview;
String releaseDate;
List<dynamic> genreIds;
String getPosterUrl() => getMediumPictureUrl(posterPath);
String getBackDropUrl() => getLargePictureUrl(backdropPath);
String getGenres() => getGenreValues(genreIds);
int getReleaseYear() {
if (releaseDate == null || releaseDate == "") {
return 0;
}
return DateTime.parse(releaseDate).year;
}
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:movie_app/common/Constants.dart';
import 'package:movie_app/model/Media.dart';
import 'package:movie_app/common/MediaProvider.dart';
import 'package:movie_app/model/Cast.dart';
class ApiProvider {
static final _apiProvider = new ApiProvider();
final String _baseUrl = "api.themoviedb.org";
final String _language = "es-ES";
import 'package:movie_app/model/Cast.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart';
import 'dart:io';
class DBProvider {
static final DBProvider _dbProvider = new DBProvider();
Database db; //instancia para insertar en la base de datos
DBProvider() {
init();
}
static DBProvider get() {
return _dbProvider;
}
import 'package:movie_app/model/Cast.dart';
import 'package:movie_app/resources/api_provider.dart';
import 'package:movie_app/resources/db_provider.dart';
class Repository {
static final Repository _repository = new Repository();
ApiProvider _apiProvider = ApiProvider.get();
DBProvider _dbProvider = DBProvider.get();
static Repository get() {
return _repository;
}
import 'package:movie_app/model/Cast.dart';
import 'package:flutter/material.dart';
import 'package:movie_app/common/MediaProvider.dart';
import 'package:movie_app/model/Cast.dart';
import 'package:flutter/material.dart';
import 'package:movie_app/media_list.dart';
import 'package:movie_app/common/MediaProvider.dart';
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
List<BottomNavigationBarItem> _getFooterItems() {
return mediaType == MediaType.show
? [
new BottomNavigationBarItem(
icon: new Icon(Icons.thumb_up),
// ignore: deprecated_member_use
title: new Text("Polulares"),
),
new BottomNavigationBarItem(
icon: new Icon(Icons.update),
// ignore: deprecated_member_use
title: new Text("En el aire"),
),
new BottomNavigationBarItem(
icon: new Icon(Icons.star),
// ignore: deprecated_member_use
title: new Text("Mejor valoradas"),
)
]
: [
new BottomNavigationBarItem(
icon: new Icon(Icons.thumb_up),
// ignore: deprecated_member_use
title: new Text("Polulares"),
),
new BottomNavigationBarItem(
icon: new Icon(Icons.update),
// ignore: deprecated_member_use
title: new Text("Proximamente"),
),
new BottomNavigationBarItem(
icon: new Icon(Icons.star),
// ignore: deprecated_member_use
title: new Text("Mejor valoradas"),
)
];
}
void _changeMediaType(MediaType type) {
if (mediaType != type) {
setState(() {
mediaType = type;
});
}
}
List<Widget> _getMediaList() {
return (mediaType == MediaType.movie)
? <Widget>[
new MediaList(movieProvider, "popular"),
new MediaList(movieProvider, "upcoming"),
new MediaList(movieProvider, "top_rated"),
]
: <Widget>[
new MediaList(showProvider, "popular"),
new MediaList(showProvider, "on_the_air"),
new MediaList(showProvider, "top_rated"),
];
}
import 'package:flutter/material.dart';
import 'home.dart';
void main() {
runApp(new MaterialApp(
home: Home(),
theme: new ThemeData.dark(),
));
}
import 'package:flutter/material.dart';
import 'package:movie_app/common/MediaProvider.dart';
import 'cast_scroller.dart';
import 'model/Media.dart';
import 'dart:ui' as ui;
class MediaDetail extends StatelessWidget {
final Media media;
final MediaProvider provider;
MediaDetail(this.media, this.provider);
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Stack(
fit: StackFit.expand,
children: <Widget>[
new Image.network(
media.getBackDropUrl(),
fit: BoxFit.cover,
),
//para el degradado de la foto
new BackdropFilter(
filter: new ui.ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
child: new Container(
color: Colors.black.withOpacity(0.5),
),
),
new SingleChildScrollView(
child: new Container(
margin: const EdgeInsets.all(20.0),
child: new Column(
children: <Widget>[
new Container(
alignment: Alignment.center,
child: new Container(
width: 390.0,
height: 390.0,
),
decoration: new BoxDecoration(
borderRadius: new BorderRadius.circular(10.0),
image: new DecorationImage(
image: new NetworkImage(
media.getPosterUrl(),
),
),
boxShadow: [
new BoxShadow(
color: Colors.black,
blurRadius: 20.0,
offset: new Offset(0.0, 10.0))
]),
),
SizedBox(height: 20.0),
new Container(
margin: const EdgeInsets.symmetric(
vertical: 5.0,
),
child: new Row(
children: <Widget>[
new Expanded(
child: new Text(
media.title,
overflow: TextOverflow.fade,
maxLines: 1,
style: new TextStyle(
color: Colors.white,
fontSize: 25.0,
fontFamily: 'Arvo'),
),
),
new Text(
'${media.voteAverage.toString()}/10',
style: new TextStyle(
color: Colors.white,
fontSize: 15.0,
fontFamily: 'Arvo'),
)
],
),
),
new Column(
children: <Widget>[
new Text(
media.overview,
overflow: TextOverflow.ellipsis,
maxLines: media.overview.length,
style: TextStyle(
color: Colors.white,
fontSize: 13.0,
fontFamily: 'Arvo'),
)
],
),
CastController(provider, media.id)
],
),
),
),
],
),
);
}
}
import 'package:flutter/material.dart';
import 'model/Media.dart';
import 'package:flutter/material.dart';
import 'package:movie_app/model/Media.dart';
import 'package:movie_app/media_list_item.dart';
import 'package:movie_app/common/MediaProvider.dart';
import 'package:movie_app/MEDIA_DATAIL.DART';
@override
void initState() {
// TODO: implement initState
super.initState();
loadMovies();
}
@override
void didUpdateWidget(MediaList oldWidget) {
if (oldWidget.provider.runtimeType != widget.provider.runtimeType) {
_media = new List();
loadMovies();
}
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
return new Container(
child: new ListView.builder(
itemCount: _media.length,
itemBuilder: (BuildContext context, int index) {
return new FlatButton(
child: new MediaListItem(_media[index]),
padding: const EdgeInsets.all(1),
onPressed: () {
Navigator.push(context,
new MaterialPageRoute(builder: (context) {
return new MediaDetail(_media[index], widget.provider);
}));
});
}),
);
}
}
coursera.org/learn/technical-support-fundamentals/quiz/EV1vi/the-modern-computer?
redirectToCover=true
https://www.themoviedb.org/settings/api