முக்கிய விஷயங்கள்
- Dart தான் Flutter app எழுத use ஆகும் language — இதை தாண்டி நேரடியா widgets-க்கு போக முடியாது.
- Null safety ( ? , ! , late ) தான் Java அல்லது JavaScript-ல இருந்து வர்றவங்களுக்கு மிகப்பெரிய mindset shift.
- final, const ரெண்டும் பார்க்க ஒரே மாரி தெரியும், ஆனா பொருள் வேற — இதை mix பண்றதுதான் beginner errors-ல பாதி.
- Named constructors, arrow functions தான் Flutter widget code-ஐ சின்னதா, clean-ஆ வைக்க Dart கொடுக்கும் tool.
- Future, async/await — API call, UPI payment status check மாரி நேரம் எடுக்கற வேலைக்கு இதுதான் வழி.
Dart அப்படின்னா என்ன, Flutter கத்துக்கிறவங்க ஏன் முதல்ல இதை கத்துக்கணும்?
Dart-ஐ Google தனியா Flutter-க்காக உருவாக்கின language. Flutter-ஐ furniture-ஆ நினைச்சுக்கோங்க, Dart அந்த carpentry tools. Saw எப்படி பிடிக்கணும்னு தெரியாம furniture செய்ய முடியாது இல்லையா? பலருக்கும் தெரியாத ஒரு விஷயம் சொல்றேன். Forum-ல "என் Flutter app வேலை செய்யல" என்று கேட்கும் கேள்விகள்ல பாதிக்கு மேல, அது real-ல Dart problem தான், Flutter costume போட்டிருக்கும். ஒரு missing ? , confuse ஆன final , வேண்டிய arguments எடுக்காத constructor — இதெல்லாம் Dart issue, widget issue இல்ல.
அதனால pubspec.yaml-ஐ open பண்றதுக்கு முன்னாடி, வெறும் Dart-ல கொஞ்ச நேரம் செலவு பண்ணுங்க. Widget வேண்டாம், emulator வேண்டாம், ஒரு simple main.dart file-ஐ dart run வைச்சு run பண்ணி பாருங்க. இந்த இரண்டு மணி நேரம் தான் அடுத்த இரண்டு வாரத்த save பண்ணும்.
Variables, final, const-ஐ Dart-ல எப்படி handle பண்ணலாம்?
Dart variables typed தான், ஆனா var வைச்சா type-ஐ தானா guess பண்ணிடும். Type-ஐ எழுதணும்னு force இல்ல.
void main() {
var city = "Chennai"; // type inferred as String
int rupees = 500;
double discount = 10.5;
bool isPrime = true;
final today = DateTime.now(); // once set, but value known only at runtime
const taxRate = 0.18; // fixed even before app runs
print("$city order total with tax: ${rupees + (rupees * taxRate)}");
print("Ordered on: $today");
}final vs const-ஐ குழப்பிக்கிறது தான் பல beginners-க்கு பிரச்சனை. final அதாவது "நான் இதை ஒரு முறை தான் set பண்ணுவேன், ஆனா value-வை app run ஆகும்போது தான் தெரியும்" — DateTime.now() மாரி. const அதாவது "இந்த value app ஆரம்பிக்கும் முன்னாடியே fix ஆகிடும்" — GST rate மாரி, hardcode பண்ணின text மாரி.
Simple rule: value-க்கு clock, network call, அல்லது user input தேவைன்னா final வைங்க. நீங்களே hardcode பண்ணும் number/text-ஆ இருந்தா const வைங்க.
Null safety அப்படின்னா என்ன, ? , ! , late எப்போ use பண்ணலாம்?
Java அல்லது plain JavaScript பழக்கம் இருந்தா இது கொஞ்சம் அலியன் மாரி தெரியும். Dart-ல, நீங்க வேணும்னு சொல்லாம ஒரு variable null ஆக முடியாது.
void main() {
String name = "Arun"; // இது ஒரு நாளும் null ஆக முடியாது
String? nickname; // ? means இது null-ஆக இருக்கலாம்
nickname = "Aru";
print(nickname?.toUpperCase()); // safe: null இல்லாம இருந்தா தான் print ஆகும்
late String branch; // promise: நான் use பண்ணும் முன்னாடி value வச்சிடுவேன்
branch = "OMR, Chennai";
print(branch);
}? போட்டா "இது null-ஆகவும் இருக்கலாம்" என்று Dart-க்கு சொல்றீங்க. ! போட்டா "நம்பு என்னை, இது null இல்ல" என்று force பண்றீங்க — இது சரியா இல்லேன்னா app crash ஆகும். late-ஐ use பண்ணும்போது, "இப்போ value இல்ல, ஆனா use பண்ணும் முன்னாடி கொடுத்துடுவேன்" என்று Dart-க்கு promise கொடுக்கிறீங்க.
Functions, arrow syntax Dart-ல எப்படி சுருக்கமா எழுதலாம்?
ஒரு வரி logic இருந்தா, curly braces, return keyword எல்லாம் வேணாம். Arrow (=>) syntax use பண்ணலாம்.
int addGst(int amount) {
return amount + (amount * 18 ~/ 100);
}
// அதே logic, arrow syntax-ல
int addGstShort(int amount) => amount + (amount * 18 ~/ 100);
void main() {
print(addGst(1000));
print(addGstShort(1000));
}இதே arrow style தான் Flutter widgets-ல build() function-க்கு அடியில, onPressed: () => print("Tapped") மாரி இடங்கள்ல ரொம்ப அதிகமா வரும். அதனால இப்போவே பழகிடுங்க.
Classes, named constructors Flutter widgets-ல எப்படி use ஆகும்?
Dart-ல class basic OOP தான், ஆனா Flutter-ல named constructors ரொம்ப common — ஒரே class-ஐ வேற வேற வழியா create பண்ண உதவும்.
class Order {
final String item;
final double amount;
Order(this.item, this.amount); // default constructor
Order.cashOnDelivery(this.item) : amount = 0; // named constructor
void printOrder() {
print("$item - Rs.$amount");
}
}
void main() {
final order1 = Order("Phone Case", 299.0);
final order2 = Order.cashOnDelivery("Grocery Bag");
order1.printOrder();
order2.printOrder();
}Flutter-ல Text.rich(), Container.expand() மாரி named constructors பாத்திருப்பீங்க. இதே pattern தான் — ஒரே class-க்கு வேற வேற entry point.
Future, async/await எப்படி வேலை செய்யும் — UPI payment status check example?
Network call, file read, UPI payment status check — இதெல்லாம் உடனடியா முடியாது, நேரம் ஆகும். இதுக்காக தான் Future.
Future<String> checkPaymentStatus() async {
await Future.delayed(Duration(seconds: 2)); // network call simulate
return "SUCCESS";
}
void main() async {
print("Payment initiated...");
final status = await checkPaymentStatus();
print("Status: $status");
}async function எப்போவும் Future return பண்ணும். await போட்டா தான் Dart காத்திருக்கும், இல்லேன்னா result வராத முன்னாடியே next line run ஆகிடும்.
யார் எந்த mistake பண்ணி trouble-ல மாட்டுறாங்க?
எங்கே error வர போகுது-ன்னு முன்னாடியே தெரிஞ்சுக்கோங்க:
- ! operator-ஐ எங்கயும் போட்டுடுறது — value null-ஆ இருந்தா straight-ஆ crash.
- final, const-ஐ மாத்தி மாத்தி use பண்றது — const value compile-time-ல தெரியணும், DateTime.now() மாரி runtime value-க்கு const போட்டா error.
- async function-ஐ await செய்யாம விடுறது — print(fetchData()) பண்ணா "Instance of Future" என்று வந்துடும், real value இல்ல.
- Named constructor-க்கு arguments-ஐ தப்பு order-ல கொடுக்கிறது — Flutter widget code-ல இது common mistake.
Chennai IT ஆபிஸ்ல, interview-ல இது எப்படி use ஆகும்?
Chennai, Bengaluru, Hyderabad-ல இருக்கற பல startups, product companies hybrid apps-க்கு Flutter use பண்றாங்க — single codebase-ல Android, iOS ரெண்டும் கவர் ஆகும்னு. Interview-ல null safety ஏன் வேணும், final vs const difference, Future.wait() எப்படி வேலை செய்யும்-ன்னு கேட்பது ரொம்ப common. இந்த basics clear-ஆ இருந்தா, Flutter widget tree, state management எல்லாம் பின்னாடி ரொம்ப easy-ஆ தெரியும்.
நீங்க இப்போ என்ன பண்ணணும் — practice task?
ஒரு simple Dart file create பண்ணுங்க. Order என்ற class எழுதுங்க, அதுக்கு ஒரு named constructor வைங்க. அப்புறம் checkPaymentStatus() மாரி ஒரு async function எழுதி, Future.delayed() வைச்சு 2 second wait பண்ணி, await use பண்ணி result print பண்ணுங்க. இது dart run வைச்சு run ஆனா, Flutter-ஐ தைரியமா ஆரம்பிக்கலாம்.
List, Map Dart-ல எப்படி use பண்ணலாம் - Flipkart cart example வைச்சு பார்க்கலாம்?
Flutter app எழுதும்போது ஒரு single value மட்டும் வச்சுக்கிட்டு உக்காரமுடியாது. Flipkart cart-ல 5 products இருக்கும், ஒரு UPI transaction history-ல பல entries இருக்கும் - இதையெல்லாம் handle பண்றதுக்கு Dart-ல List, Map, Set தான் basic tools. List அதாவது ஒரு ordered group of items, உதாரணமாக List<String> cartItems = ["Shoes", "Watch", "Bag"]; இது cart-ல இருக்கற products-ஐ order-ஆ வச்சுக்கும். Map அதாவது key-value pair, உதாரணமாக Map<String, double> prices = {"Shoes": 1200.0, "Watch": 899.0}; இதுல key போட்டா direct-ஆ value கிடைக்கும், List-ல மாரி index தேடி அலையவேண்டாம்.
இதை நம்ம daily life-க்கு connect பண்ணி பார்த்தா சுலபமா புரியும். IRCTC ticket booking-ல passenger list ஒரு List ஆகத்தான் இருக்கும் - ஒவ்வொரு passenger-க்கும் name, age, berth type என்று key-value pairs. GPay அல்லது PhonePe transaction history screen திறந்தா, அது internally ஒரு List of Map objects தான், ஒவ்வொரு transaction-க்கும் amount, date, status என்று fields இருக்கும். இதனால Flutter developer ஆகணும்னா, List, Map-ஐ confident-ஆ handle பண்ண தெரியணும், இல்லேன்னா ListView.builder() மாரி basic widgets-ஐ கூட சரியா எழுத முடியாது.
Beginners பண்ற ஒரு common mistake - எதையும் List<dynamic> அல்லது Map<dynamic, dynamic>-ஆ வச்சுக்கிறது. இது compile-time-ல error காட்டாது, ஆனா runtime-ல weird crashes வரும். Type specify பண்ணி List<String>, Map<String, int> மாரி எழுதுங்க, இது null safety-க்கும் உதவும். இன்னொரு mistake - Map-ல ஒரு key இல்லாத state-ல அதை access பண்ணி null error வாங்குறது, இதுக்காக containsKey() check பண்ணிட்டு access பண்ணுங்க. இந்த basics முடிஞ்சதும் நீங்க straight-ஆ Future<List>-க்கு போகலாம் - அதாவது API call ஒரு List of orders return பண்ணும் pattern, இது real Flutter apps-ல எல்லா இடத்திலும் வரும்.




கருத்துகள் (0)
Be the first to comment!