ফ্লাটার ইন্টারভিউ প্রস্তুতি: কমন প্রশ্ন ও উত্তর (বাংলা গাইড) 🚀

ফ্লাটার ডেভেলপার হিসেবে চাকরি বা ফ্রিল্যান্সিং মার্কেটপ্লেসে সফল হতে হলে ইন্টারভিউতে ভালো করা জরুরি। বাংলাদেশে ফ্লাটারের চাহিদা বাড়ার সাথে সাথে ইন্টারভিউয়াররা ক্যান্ডিডেটের প্রাকটিক্যাল নলেজ, প্রজেক্ট এক্সপেরিয়েন্স, এবং প্রোবলেম-সলভিং স্কিল যাচাই করেন। এই ব্লগে ফ্লাটার ইন্টারভিউয়ের কিছু কমন প্রশ্ন ও উত্তর এবং টিপস শেয়ার করা হলো!


ফ্লাটার ইন্টারভিউয়ের প্রস্তুতির টিপস 💡

  • প্রজেক্ট রেডি রাখুন: নিজের তৈরি করা ২-৩টি অ্যাপের সোর্স কোড GitHub/Portfolio-তে শেয়ার করুন।
  • কোডিং প্র্যাকটিস: LeetCode, HackerRank-এ Dart/Flutter প্র্যাকটিস করুন।
  • কনসেপ্ট ক্লিয়ার: স্টেট ম্যানেজমেন্ট, API, Firebase সম্পর্কে ইন ডেপথ জ্ঞান রাখুন।
  • মক ইন্টারভিউ: বন্ধু বা মেন্টরের সাথে প্র্যাকটিস করুন।

ফ্লাটার ইন্টারভিউয়ের কমন প্রশ্ন ও উত্তর

Q1. Stateless Widget vs Stateful Widget এর পার্থক্য কী?

উত্তর:

  • Stateless Widget: UI যার স্টেট (ডেটা) পরিবর্তন হয় না। যেমন: টেক্সট, আইকন।
class MyText extends StatelessWidget {  
  @override  
  Widget build(BuildContext context) {  
    return Text('স্ট্যাটলেস উইজেট');  
  }  
}
  • Stateful Widget: UI যার স্টেট পরিবর্তন হয় (যেমন: ইউজার ইনপুট, অ্যানিমেশন)।
class CounterApp extends StatefulWidget {  
  @override  
  _CounterAppState createState() => _CounterAppState();  
}  

class _CounterAppState extends State<CounterApp> {  
  int count = 0;  
  @override  
  Widget build(BuildContext context) {  
    return ElevatedButton(  
      onPressed: () => setState(() => count++),  
      child: Text('কাউন্ট: $count'),  
    );  
  }  
}

Q2. BuildContext কি?

উত্তর:
BuildContext হলো উইজেট ট্রির একটি রেফারেন্স যা উইজেটের লোকেশন (অবস্থান) ও থিম, নেভিগেশন, স্টেট ম্যানেজমেন্টের মতো সার্ভিস এক্সেস করতে সাহায্য করে। উদাহরণ: Navigator.push(context, ...)


Q3. Flutter-এর Hot Reload ও Hot Restart-এর মধ্যে পার্থক্য লিখুন।

উত্তর:

  • Hot Reload (Ctrl + S): কোডের ছোটখাটো পরিবর্তন দ্রুত দেখায়, অ্যাপের স্টেট রিটেইন করে।
  • Hot Restart (Ctrl + F5): সম্পূর্ণ অ্যাপ রিস্টার্ট করে, স্টেট রিসেট হয়।

Q4. Flutter-এ স্টেট ম্যানেজমেন্ট কেন গুরুত্বপূর্ণ? Provider কিভাবে কাজ করে?

উত্তর:

  • স্টেট ম্যানেজমেন্ট UI ও ডেটার মধ্যে সিঙ্ক রাখে।
  • Provider হলো একটি স্টেট ম্যানেজমেন্ট লাইব্রেরি যা InheritedWidget-কে সিম্পলিফাই করে। এটি ডেটাকে উইজেট ট্রির নিচে পাস করতে সাহায্য করে।
// Provider ব্যবহার উদাহরণ  
ChangeNotifierProvider(  
  create: (context) => CartModel(),  
  child: MyApp(),  
);  

// ডেটা এক্সেস  
final cart = Provider.of<CartModel>(context);

Q5. ListView.builder vs ListView এর পার্থক্য কী?

উত্তর:

  • ListView: সব আইটেম একসাথে লোড করে (স্মাল লিস্টের জন্য)।
  • ListView.builder: লেইজি লোডিং (শুধু ভিজিবল আইটেম রেন্ডার করে), বড় ডেটাসেটের জন্য পারফেক্ট।

Q6. Flutter-এ API কল কিভাবে করবেন? উদাহরণ দিন।

উত্তর:
http প্যাকেজ ব্যবহার করে GET/POST রিকুয়েস্ট পাঠানো যায়।

import 'package:http/http.dart' as http;  

Future fetchData() async {  
  final response = await http.get(Uri.parse('https://api.example.com/data'));  
  if (response.statusCode == 200) {  
    return jsonDecode(response.body);  
  } else {  
    throw Exception('ডেটা লোড হয় নি!');  
  }  
}

Q7. BLoC প্যাটার্ন কিভাবে কাজ করে?

উত্তর:
BLoC (Business Logic Component) ইভেন্টকে স্টেটে কনভার্ট করে।

  • ইভেন্ট: ইউজার ইনপুট (যেমন: বাটন প্রেস)।
  • স্টেট: UI আপডেট।
  • Stream ব্যবহার: BlocProviderBlocBuilder দিয়ে UI-কে স্টেটের সাথে কানেক্ট করা হয়।

Q8. Flutter অ্যাপের পারফরম্যান্স অপ্টিমাইজ কিভাবে করবেন?

উত্তর:

  • const উইজেট ব্যবহার করে রি-রেন্ডারিং কমানো।
  • ListView.builder ব্যবহার করে স্ক্রল পারফরম্যান্স বাড়ানো।
  • অপ্রয়োজনীয় প্যাকেজ এভয়েড করা।
  • DevTools-এর Performance ট্যাব ব্যবহার করে বটলনেক চেক করা।

Q9. Flutter-এ Platform-Specific কোড (Native Code) কিভাবে লেখেন?

উত্তর:
Platform Channels ব্যবহার করে Dart থেকে Android (Kotlin/Java) বা iOS (Swift) কোড কল করা যায়।

// Dart সাইড  
const platform = MethodChannel('com.example/native');  
final result = await platform.invokeMethod('getDeviceInfo');

Q10. Flutter-এ Widget এবং Element এর মধ্যে পার্থক্য কী?

উত্তর:

  • Widget: UI-এর ব্লুপ্রিন্ট বা কনফিগারেশন (ষ্টেট ছাড়া)। এটি Immutable (পরিবর্তনযোগ্য নয়)।
  • Element: Widget ট্রির একটি কনক্রিট ইনস্ট্যান্স যা স্ক্রিনে রেন্ডার হয়। এটি Widget ও RenderObject-এর মধ্যে ব্রিজ হিসেবে কাজ করে।

Q11. MediaQuery ক্লাসের ব্যবহার কী?

উত্তর:
MediaQuery ব্যবহার করে ডিভাইসের স্ক্রিন সাইজ, ওরিয়েন্টেশন, ব্রাইটনেস ইত্যাদি তথ্য পাওয়া যায়।

double screenWidth = MediaQuery.of(context).size.width;  
bool isDark = MediaQuery.of(context).platformBrightness == Brightness.dark;  

Q12. Flutter-এ InheritedWidget কী? উদাহরণ দিন।

উত্তর:
InheritedWidget ট্রি-এর নিচের উইজেটগুলিকে ডেটা শেয়ার করার জন্য ব্যবহৃত হয়। এটি স্টেট ম্যানেজমেন্টের বেসিক বিল্ডিং ব্লক।

class MyData extends InheritedWidget {  
  final String data;  
  MyData({required this.data, required Widget child}) : super(child: child);  

  static MyData of(BuildContext context) {  
    return context.dependOnInheritedWidgetOfExactType<MyData>()!;  
  }  

  @override  
  bool updateShouldNotify(MyData oldWidget) => data != oldWidget.data;  
}  

// ব্যবহার  
MyData(data: 'Hello', child: Text(MyData.of(context).data));  

Q13. Future এবং Stream এর মধ্যে পার্থক্য কী?

উত্তর:

  • Future: একটি সিঙ্গেল অ্যাসিঙ্ক্রোনাস ইভেন্ট হ্যান্ডেল করে (যেমন: API কল)।
  • Stream: একাধিক অ্যাসিঙ্ক্রোনাস ইভেন্ট হ্যান্ডেল করে (যেমন: রিয়েলটাইম ডেটা আপডেট)।

Q14. Flutter-এ ডিপেন্ডেন্সি ইনজেকশন (Dependency Injection) কিভাবে কাজ করে?

ডিপেন্ডেন্সি ইনজেকশন (DI) হলো একটি ডিজাইন প্যাটার্ন যেখানে ক্লাসের ডিপেন্ডেন্সি বাইরে থেকে সরবরাহ করা হয়। ফ্লাটারে এটির জন্য providerget_it, বা Riverpod ব্যবহার করা হয়।

// get_it উদাহরণ  
final getIt = GetIt.instance;  
void setup() {  
  getIt.registerSingleton<ApiService>(ApiService());  
}  

// ব্যবহার  
ApiService api = getIt<ApiService>();  

Q15. Flutter-এ Key এর প্রয়োজনীয়তা কী?

উত্তর:
Key উইজেটগুলিকে আইডেন্টিফাই করে যখন উইজেট ট্রি রিবিল্ড হয়। এটি স্টেট রিটেইন করতে বা লিস্ট আইটেম অর্ডার চেঞ্জ করতে সাহায্য করে।

  • GlobalKey: পুরো অ্যাপে ইউনিক আইডেন্টিফায়ার।
  • UniqueKey: প্রতি বিল্ডে নতুন কী জেনারেট করে।

Q16. Flutter-এ অ্যানিমেশন কিভাবে ইম্প্লিমেন্ট করবেন?

উত্তর:
AnimationController এবং Tween ব্যবহার করে অ্যানিমেশন তৈরি করা যায়।

AnimationController controller = AnimationController(  
  vsync: this,  
  duration: Duration(seconds: 2),  
);  

Animation<double> animation = Tween(begin: 0.0, end: 1.0).animate(controller);  

// UI-তে ব্যবহার  
FadeTransition(  
  opacity: animation,  
  child: FlutterLogo(),  
);  

controller.forward(); // অ্যানিমেশন শুরু  

Q17. Flutter Test কিভাবে লিখবেন?

উত্তর:
ফ্লাটারে ইউনিট টেস্ট, উইজেট টেস্ট, এবং ইন্টিগ্রেশন টেস্ট সাপোর্ট করে।

// ইউনিট টেস্ট  
test('Counter increments', () {  
  final counter = Counter();  
  counter.increment();  
  expect(counter.value, 1);  
});  

// উইজেট টেস্ট  
testWidgets('Button click test', (WidgetTester tester) async {  
  await tester.pumpWidget(MyApp());  
  await tester.tap(find.byType(ElevatedButton));  
  await tester.pump();  
  expect(find.text('Clicked'), findsOneWidget);  
});  

ইন্টারভিউয়াররা যা খুঁজেন 🔍

  1. প্রবলেম-সলভিং স্কিল: লজিক্যালভাবে কোড ব্যাখ্যা করতে পারা।
  2. ক্লিন কোড: স্টাইল গাইড (DRY, KISS) ফলো করা।
  3. কমিউনিকেশন: টেকনিক্যাল কনসেপ্ট সহজ বাংলায় বুঝিয়ে বলা।

রিসোর্স ও প্র্যাকটিস প্ল্যাটফর্ম 📚


শেষ কথা: ইন্টারভিউতে আত্মবিশ্বাসী হতে প্রতিদিন ২-৩টি প্রশ্ন প্র্যাকটিস করুন, রিয়েল প্রজেক্ট বানান, এবং কমিউনিটির সাথে যুক্ত থাকুন। মনে রাখবেন, প্রতিটি রিজেকশনই আপনাকে পরবর্তী সুযোগের জন্য প্রস্তুত করে! 💪

Happy Coding! 👨💻👩💻

Spread the love

1 thought on “ফ্লাটার ইন্টারভিউ প্রস্তুতি: কমন প্রশ্ন ও উত্তর (বাংলা গাইড) 🚀”

Leave a Comment