Flutter

Toolkit UI de Google para apps multiplataforma - un codigo base, hot reload, rendimiento nativo

TL;DR

Qué: Kit de herramientas UI de Google para crear aplicaciones compiladas nativamente.

Por qué: Un código base para iOS/Android/Web/Desktop, hot reload, UIs hermosas, gran rendimiento.

Quick Start

Instalación: Sigue flutter.dev/docs/get-started/install

Verificar:

flutter doctor

Crear nueva app:

flutter create my_app
cd my_app
flutter run

Cheatsheet

ComandoDescripción
flutter create nameCrear nuevo proyecto
flutter runEjecutar en dispositivo/emulador
flutter build apkCompilar APK Android
flutter build iosCompilar app iOS
flutter pub getObtener dependencias
flutter pub add pkgAñadir paquete
flutter testEjecutar tests

Gotchas

Basic widget

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Mi App')),
        body: const Center(child: Text('¡Hola, Flutter!')),
      ),
    );
  }
}

Stateful widget

class Counter extends StatefulWidget {
  @override
  _CounterState createState() => _CounterState();
}

class _CounterState extends State<Counter> {
  int _count = 0;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Text('Contador: $_count'),
        ElevatedButton(
          onPressed: () => setState(() => _count++),
          child: const Text('Incrementar'),
        ),
      ],
    );
  }
}

Common widgets

// Layout
Column(children: [...])
Row(children: [...])
Container(padding: ..., child: ...)
ListView.builder(itemBuilder: ...)

// Entrada
TextField(controller: ..., onChanged: ...)
ElevatedButton(onPressed: ..., child: ...)

// Visualización
Text('Hola')
Image.network('url')
Icon(Icons.star)
// Push
Navigator.push(context, MaterialPageRoute(builder: (context) => NextPage()));

// Pop
Navigator.pop(context);

// Rutas nombradas
Navigator.pushNamed(context, '/details');

Next Steps