ফ্লাটার ডেভেলপার হিসেবে চাকরি বা ফ্রিল্যান্সিং মার্কেটপ্লেসে সফল হতে হলে ইন্টারভিউতে ভালো করা জরুরি। বাংলাদেশে ফ্লাটারের চাহিদা বাড়ার সাথে সাথে ইন্টারভিউয়াররা ক্যান্ডিডেটের প্রাকটিক্যাল নলেজ, প্রজেক্ট এক্সপেরিয়েন্স, এবং প্রোবলেম-সলভিং স্কিল যাচাই করেন। এই ব্লগে ফ্লাটার ইন্টারভিউয়ের কিছু কমন প্রশ্ন ও উত্তর এবং টিপস শেয়ার করা হলো!
ফ্লাটার ইন্টারভিউয়ের প্রস্তুতির টিপস 💡
- প্রজেক্ট রেডি রাখুন: নিজের তৈরি করা ২-৩টি অ্যাপের সোর্স কোড 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 ব্যবহার:
BlocProvider
,BlocBuilder
দিয়ে 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) হলো একটি ডিজাইন প্যাটার্ন যেখানে ক্লাসের ডিপেন্ডেন্সি বাইরে থেকে সরবরাহ করা হয়। ফ্লাটারে এটির জন্য provider
, get_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);
});
ইন্টারভিউয়াররা যা খুঁজেন 🔍
- প্রবলেম-সলভিং স্কিল: লজিক্যালভাবে কোড ব্যাখ্যা করতে পারা।
- ক্লিন কোড: স্টাইল গাইড (DRY, KISS) ফলো করা।
- কমিউনিকেশন: টেকনিক্যাল কনসেপ্ট সহজ বাংলায় বুঝিয়ে বলা।
রিসোর্স ও প্র্যাকটিস প্ল্যাটফর্ম 📚
- ফ্লাটার ডকুমেন্টেশন: flutter.dev/docs
শেষ কথা: ইন্টারভিউতে আত্মবিশ্বাসী হতে প্রতিদিন ২-৩টি প্রশ্ন প্র্যাকটিস করুন, রিয়েল প্রজেক্ট বানান, এবং কমিউনিটির সাথে যুক্ত থাকুন। মনে রাখবেন, প্রতিটি রিজেকশনই আপনাকে পরবর্তী সুযোগের জন্য প্রস্তুত করে! 💪
Happy Coding! 👨💻👩💻
1 thought on “ফ্লাটার ইন্টারভিউ প্রস্তুতি: কমন প্রশ্ন ও উত্তর (বাংলা গাইড) 🚀”