Hello World in Dart
Dart programs start at main(). String interpolation, collection literals, and optional typing make Dart concise and readable.
Console App
void main() {
print('Hello, World!');
}
Run: dart run bin/main.dart
String Interpolation
void main() {
var name = 'Dart';
print('Hello, $name!');
print('2 + 2 = ${2 + 2}');
}
Flutter Hello
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(
body: Center(child: Text('Hello, Flutter!')),
),
);
}
}
Variables
var message = 'Hello'; // inferred String
String name = 'Dart'; // explicit
final pi = 3.14159; // runtime constant
const max = 100; // compile-time constant
Functions
int add(int a, int b) => a + b;
void greet(String name, {String greeting = 'Hello'}) {
print('$greeting, $name!');
}
Common Pitfalls
- Ignoring null safety warnings and using
!operator carelessly. - Calling setState excessively causing unnecessary rebuilds.
- Mixing async patterns without proper error handling.
- Hardcoding values that should be theme constants.
Best Practices
- Prefer const constructors for static widgets.
- Use named parameters for widget constructors.
- Extract reusable widgets into separate files.
- Write widget tests for critical UI paths.
Memory and Performance Notes
Flutter debug mode uses JIT. Profile and release use AOT compilation.
Exercise
Create a Dart CLI that prints arguments using args package from pub.dev.
Hint: Use dart pub add args to add dependency.
Summary
Practice with Flutter DevTools open to observe rebuilds and performance.
Debugging Checklist
- Read the full error in the console.
- Use Flutter DevTools widget inspector.
- Hot restart vs hot reload — know the difference.
- Check null safety and type errors first.
- Simplify widget tree to isolate the issue.
Real-World Application
Production Flutter apps combine these patterns with analytics, crash reporting, and CI/CD.
Further Reading
Flutter documentation, Dart language tour, and pub.dev packages.
Additional Examples
Consider how this topic applies in a larger project:
// Break the problem into smaller functions
// Test each function independently
// Integrate incrementally
Working through variations of the examples above builds deeper understanding than reading alone.
Interview and Review Questions
- Explain the core concept of this topic in your own words.
- What happens when this code runs with edge-case input (empty, null, zero, max value)?
- How would you debug a bug related to this topic in production?
- What are the performance implications of the approach shown here?
- How does this feature compare to the equivalent in another language you know?
Related Topics in This Path
Review adjacent pages in the learning path before and after this one. Concepts build on each other — skipping ahead often leads to confusion when later pages assume mastery of earlier material.
Return to the section index if you need to fill gaps in prerequisite knowledge.