60 phút
Flutter Fundamentals
Giới thiệu Flutter
Flutter là framework của Google để xây dựng ứng dụng native cho mobile, web, desktop từ single codebase.
Setup Flutter Environment
# Install Flutter SDK
# Download from https://flutter.dev/docs/get-started/install
# Check installation
flutter doctor
# Create new project
flutter create my_app
cd my_app
# Run app
flutter run
Widgets Cơ bản
Stateless Widget
import 'package:flutter/material.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
appBar: AppBar(
title: Text('My First Flutter App'),
),
body: Center(
child: Text('Hello, Flutter!'),
),
),
);
}
}
Stateful Widget
class CounterApp extends StatefulWidget {
@override
_CounterAppState createState() => _CounterAppState();
}
class _CounterAppState extends State<CounterApp> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Counter App')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('You have pushed the button this many times:'),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
Layout Widgets
Column và Row
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('First item'),
Text('Second item'),
Text('Third item'),
],
)
Row(
children: [
Icon(Icons.star),
Icon(Icons.star),
Icon(Icons.star),
Text('3.5 stars'),
],
)
Container và Padding
Container(
padding: EdgeInsets.all(16.0),
margin: EdgeInsets.symmetric(vertical: 8.0),
decoration: BoxDecoration(
color: Colors.blue[50],
borderRadius: BorderRadius.circular(8.0),
border: Border.all(color: Colors.blue),
),
child: Text(
'Styled Container',
style: TextStyle(fontSize: 18.0),
),
)
Navigation
// Navigate to new screen
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
// Navigate back
Navigator.pop(context);
// Navigate with arguments
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetailScreen(item: item),
),
);
Bài tập thực hành
Hãy tạo ứng dụng Flutter đầu tiên với counter và navigation!