Wednesday, September 04, 2024

ফ্লাটার অ্যাপ ডেভেলপমেন্টে বিগিনারদের জন্য গুরুত্বপূর্ণ উইজেটস


প্রথমে জেনে নেওয়া যাক, উইজেট আসলে কী?
 
- উইজেট হলো ফ্লাটারের বিল্ডিং ব্লক। অর্থাৎ, ফ্লাটার অ্যাপ্লিকেশনের যেকোনো কিছুই একটা উইজেট হিসেবে তৈরি করা হয়। স্ক্রিনে যা কিছু দেখা যায় যেমন: টেক্সট, বাটন, ইমেজ—সবই আসলে উইজেট। ফ্লাটার ব্যবহার করে অ্যাপ বানানোর সময় উইজেটগুলো দিয়ে আমরা অ্যাপের লেআউট, ইন্টারেকশন এবং ডাইনামিক ফাংশনালিটি তৈরি করি।
এখন আসুন, কিছু গুরুত্বপূর্ণ উইজেটের ব্যবহার সম্পর্কে জানি যা একজন বিগিনার ফ্লাটার ডেভেলপারের অবশ্যই শেখা উচিত:
Body এবং Body Container: ব্যবহার: অ্যাপের মূল কন্টেন্ট বা ডিজাইন রাখতে।
কাজ: এটি স্ক্রিনে যা কিছু দেখা যাবে তার মূল কাঠামো তৈরি করতে সাহায্য করে।
Row & Container: ব্যবহার: এলিমেন্টগুলোকে এক সারিতে সাজাতে (Row) এবং কাস্টম ডিজাইন, প্যাডিং, মার্জিন প্রয়োগ করতে (Container)।
কাজ: অ্যাপের লেআউটকে স্টাইলিশ এবং ফাংশনাল করে তোলে।
Button: ব্যবহার: ইউজারের ক্লিক ইন্টারেকশনের জন্য।
কাজ: অ্যাপের মধ্যে বিভিন্ন কাজ সম্পাদন করার জন্য ব্যবহৃত হয়, যেমন: সাবমিট, সেভ, বা রিসেট করা।
Alert Dialog: ব্যবহার: ইউজারকে মেসেজ বা নোটিফিকেশন দেখাতে।
কাজ: কোন কিছু নিশ্চিত করার জন্য ইউজারের থেকে অনুমতি নেওয়া বা কোন গুরুত্বপূর্ণ মেসেজ দেখানো।
Simple Form: ব্যবহার: ইউজারের ইনপুট নিতে।
কাজ: লগইন, রেজিস্ট্রেশন, বা ফিডব্যাক ফর্মের মতো বিভিন্ন ফর্ম তৈরি করতে।
Dynamic List View Builder With Gesture Detector:ব্যবহার: লিস্ট আইটেমগুলো দেখাতে এবং ইউজারের জেসচার ডিটেক্ট করতে।
কাজ: স্ক্রলেবল লিস্ট তৈরি করা এবং ট্যাপ, সুইপ ইত্যাদি জেসচারগুলোর ওপর অ্যাকশন নেওয়া।
Tab Bar, Tab View & Fragment: ব্যবহার: একাধিক পেজের মধ্যে সহজে নেভিগেট করতে।
কাজ: অ্যাপের মধ্যে আলাদা আলাদা সেকশন তৈরি করা যেমন হোম, প্রোফাইল, সেটিংস ইত্যাদি।
Simple Navigation:ব্যবহার: পেজের মধ্যে এক পেজ থেকে অন্য পেজে নেভিগেট করার জন্য।
কাজ: অ্যাপের ভেতরে পেজ পরিবর্তন করতে।
Pass Data Via Navigation: ব্যবহার: এক পেজ থেকে অন্য পেজে ডাটা পাঠাতে।
কাজ: অ্যাপের বিভিন্ন পেজের মধ্যে ইনফরমেশন শেয়ার করতে।
Working with Card: ব্যবহার: কার্ড আকারে কন্টেন্ট দেখানোর জন্য।
কাজ: বিভিন্ন তথ্য কার্ড আকারে দেখাতে যেমন প্রোডাক্ট লিস্ট, ইউজার প্রোফাইল ইত্যাদি।
Circle Progress & Linear Progress:ব্যবহার: লোডিং বা প্রগ্রেস দেখানোর জন্য।
কাজ: ইউজারকে প্রগ্রেস সম্পর্কে জানাতে, যেমন ডাউনলোড, আপলোড, বা ডেটা প্রসেসিং।
Flutter Icon Class: ব্যবহার: অ্যাপের মধ্যে আইকন ব্যবহার করতে।
কাজ: অ্যাপে বিভিন্ন আইকন যোগ করতে, যা অ্যাপকে আরও ইন্টারেক্টিভ ও আকর্ষণীয় করে তোলে।
State Concept: ব্যবহার: অ্যাপের ডাটা ও ইউআই ম্যানেজ করতে।
কাজ: অ্যাপের বিভিন্ন অংশে ডাটা পরিবর্তন করা এবং সেই অনুযায়ী ইউআই আপডেট করা।
Stateless VS Stateful:ব্যবহার: স্টেটলেস এবং স্টেটফুল উইজেটের মধ্যে পার্থক্য বুঝতে।
কাজ: কোন অংশে ডাটা পরিবর্তন হবে না (Stateless) এবং কোন অংশে হবে (Stateful) তা জানার জন্য।
How Stateful Widget Works & State Lifecycle: ব্যবহার: স্টেটফুল উইজেট এবং তার লাইফসাইকেল সম্পর্কে জানতে।
কাজ: কোন অবস্থায় উইজেট কিভাবে কাজ করে তা বোঝার জন্য।
Create Counter App, To-Do App & Calculator App Using Stateful Widgets: ব্যবহার: ছোট ছোট অ্যাপ তৈরি করার মাধ্যমে স্টেটফুল উইজেট শেখা।
কাজ: কোডিং প্র্যাকটিস এবং বেসিক অ্যাপ ডেভেলপমেন্ট শিখতে।
ফ্লাটার উইজেট শেখা আপনাকে অ্যাপ ডেভেলপমেন্টে দক্ষ করে তুলবে। শুরু থেকে ভালো করে শিখে নিন, যাতে পরবর্তীতে জটিল অ্যাপ্লিকেশন ডেভেলপ করতে পারেন। Happy coding! 😊

Saturday, March 12, 2022

ফ্লাটার উইজেট - Flutter Widgets

 

এই অধ্যায়ে আমরা একটি উইজেটের ধারণা, এটি কীভাবে তৈরি করতে হয় এবং ফ্লাটার  ফ্রেমওয়ার্কে তাদের বিভিন্ন ধরনের উপলব্ধ শিখতে যাচ্ছি আমরা আগে শিখেছি যে ফ্লটারের সবকিছুই একটি উইজেট

আপনি যখনই ফ্লটারে কিছু তৈরি করার জন্য কোড করতে যাচ্ছেন, তখন এটি একটি উইজেটের ভিতরে থাকবে কেন্দ্রীয় উদ্দেশ্য উইজেট থেকে অ্যাপ তৈরি করা এটি বর্ণনা করে যে আপনার অ্যাপ ভিউ তাদের বর্তমান কনফিগারেশন এবং অবস্থার সাথে কেমন হওয়া উচিত আপনি কোডে কোনো পরিবর্তন করলে, অ্যাপের UI-তে রেন্ডারিংয়ের জন্য ন্যূনতম পরিবর্তনগুলি নির্ধারণ করতে উইজেটটি পূর্ববর্তী এবং বর্তমান উইজেটের পার্থক্য গণনা করে তার বিবরণ পুনর্নির্মাণ করে

অ্যাপটি তৈরি করতে উইজেট একে অপরের সাথে নেস্ট করা হয় এর মানে হল আপনার অ্যাপের রুটটি নিজেই একটি উইজেট এবং নিচের দিকেও একটি উইজেট উদাহরণস্বরূপ, একটি উইজেট কিছু প্রদর্শন করতে পারে, নকশা নির্ধারণ করতে পারে, মিথস্ক্রিয়া পরিচালনা করতে পারে ইত্যাদি

নীচের চিত্রটি উইজেট ট্রির একটি সাধারণ ভিজ্যুয়াল উপস্থাপনা


আমরা এভাবে ফ্লাটার  উইজেট তৈরি করতে পারি:

Class ImageWidget extends StatelessWidget {  

         // Class Stuff  

}  

হ্যালো ওয়ার্ল্ড উদাহরণ

import 'package:flutter/material.dart';  

class MyHomePage extends StatelessWidget {    

  MyHomePage({Key key, this.title}) : super(key: key);    

  // This widget is the home page of your application.    

  final String title;    

  @override    

  Widget build(BuildContext context) {    

    return Scaffold(    

      appBar: AppBar(    

        title: Text(this.title),    

      ),    

      body: Center(    

        child: Text('Hello World'),    

      ),    

    );    

  }    

}   

 

উইজেটের প্রকারভেদ - Types of Widget

আমরা ফ্লাটার  উইজেটটিকে দুটি বিভাগে বিভক্ত করতে পারি:

দৃশ্যমান - Visible  (আউটপুট এবং ইনপুট)

অদৃশ্য - Invisible  (লেআউট এবং নিয়ন্ত্রণ)

 

দৃশ্যমান উইজেট - Visible Widget

দৃশ্যমান উইজেটগুলি ব্যবহারকারীর ইনপুট এবং আউটপুট ডেটার সাথে সম্পর্কিত এই উইজেটের কিছু গুরুত্বপূর্ণ প্রকার হল:

Text

একটি টেক্সট উইজেট স্ক্রিনে প্রদর্শনের জন্য কিছু পাঠ্য ধারণ করে আমরা টেক্সট textAlign প্রপার্টি ব্যবহার করে টেক্সট উইজেট সারিবদ্ধ করতে পারি , এবং স্টাইল প্রপার্টি টেক্সট কাস্টমাইজ করার অনুমতি দেয় যাতে ফন্ট, ফন্টের ওজন, ফন্ট স্টাইল, অক্ষর ব্যবধান, রঙ এবং আরও অনেক কিছু রয়েছে আমরা নিচের কোড স্নিপেটের মত এটি ব্যবহার করতে পারি

new Text(     

'Hello, Javatpoint!',     

textAlign: TextAlign.center,       

style: new TextStyle(fontWeight: FontWeight.bold),   

)  

 

Button

এই উইজেটটি আপনাকে ক্লিকে কিছু কাজ সম্পাদন করতে দেয় ফ্লাটার  আপনাকে সরাসরি বোতাম উইজেট ব্যবহার করার অনুমতি দেয় না; পরিবর্তে, এটি একটি FlatButton এবং একটি RaisedButton এর মতো এক ধরণের বোতাম ব্যবহার করে আমরা নিচের কোড স্নিপেটের মত এটি ব্যবহার করতে পারি

//FlatButton Example  

new FlatButton(  

  child: Text("Click here"),  

  onPressed: () {  

    // Do something here  

  },  

),  

  

//RaisedButton Example  

new RaisedButton(  

  child: Text("Click here"),  

  elevation: 5.0,  

  onPressed: () {  

    // Do something here  

  },  

),  

 উপরের উদাহরণে, আপনি যখন বোতামে ক্লিক করেন তখন onPressed প্রপার্টি আমাদের একটি অ্যাকশন সঞ্চালনের অনুমতি দেয় এবং এটি কতটা আলাদা তা পরিবর্তন করতে elevation প্রপার্টি ব্যবহার করা হয়

Image

এই উইজেটটি ইমেজটি ধারণ করে যা এটিকে একাধিক উত্স থেকে আনতে পারে যেমন সম্পদ ফোল্ডার থেকে বা সরাসরি URL থেকে এটি ইমেজ লোড করার জন্য অনেক কনস্ট্রাক্টর প্রদান করে, যা নিচে দেওয়া হল:

Image: এটি একটি জেনেরিক ইমেজ লোডার, যা ImageProvider দ্বারা ব্যবহৃত হয়

asset: এটি আপনার প্রোজেক্ট অ্যাসেট ফোল্ডার থেকে ইমেজ লোড করে

file: এটি সিস্টেম ফোল্ডার থেকে ছবি লোড করে

memory: এটি মেমরি থেকে ইমেজ লোড করে

network: এটি নেটওয়ার্ক থেকে ছবি লোড করে

প্রজেক্টে একটি ছবি যোগ করার জন্য, আপনাকে প্রথমে একটি সম্পদ ফোল্ডার তৈরি করতে হবে যেখানে আপনি আপনার ছবিগুলি রাখবেন এবং তারপরে pubspec.yaml ফাইলে নীচের লাইনটি যুক্ত করুন৷

assets:  

  - assets/  

 এখন, ডার্ট ফাইলে নিম্নলিখিত লাইন যোগ করুন

Image.asset ( 'assets/computer.png' )

hello world উদাহরণে নীচে দেখানো হয়েছে

class MyHomePage extends StatelessWidget {  

  MyHomePage({Key key, this.title}) : super(key: key);  

  // This widget is the home page of your application.  

  final String title;  

  @override  

  Widget build(BuildContext context) {  

    return Scaffold(  

      appBar: AppBar(  

        title: Text(this.title),  

      ),  

      body: Center(  

        child: Image.asset('assets/computer.png'),  

      ),  

    );  

  }  


আপনি যখন অ্যাপটি চালাবেন, এটি নিম্নলিখিত আউটপুট দেবে


Icon

এই উইজেটটি ফ্লাটারে আইকন সংরক্ষণ করার জন্য একটি ধারক হিসাবে কাজ করে নিম্নলিখিত কোড আরও স্পষ্টভাবে ব্যাখ্যা করে

new Icon(  

  Icons.add,  

  size: 34.0,  

)  

 

অদৃশ্য উইজেট - Invisible widget

অদৃশ্য উইজেটগুলি উইজেটগুলির বিন্যাস এবং নিয়ন্ত্রণের সাথে সম্পর্কিত এটি উইজেটগুলি আসলে কীভাবে আচরণ করে এবং কীভাবে তারা স্ক্রিনে দেখাবে তা নিয়ন্ত্রণ করে এই উইজেটগুলির কয়েকটি গুরুত্বপূর্ণ প্রকার হল:

Column

একটি কলাম উইজেট হল এক ধরনের উইজেট যা তার সমস্ত শিশুদের উইজেটগুলিকে একটি উল্লম্ব প্রান্তিককরণে সাজায় এটি mainAxisAlignment এবং crossAxisAlignment বৈশিষ্ট্য ব্যবহার করে উইজেটগুলির মধ্যে ব্যবধান প্রদান করে এই বৈশিষ্ট্যগুলিতে, প্রধান অক্ষটি উল্লম্ব অক্ষ এবং ক্রস অক্ষটি অনুভূমিক অক্ষ

উদাহরণ

নিচের কোড স্নিপেট দুটি উইজেট উপাদান উল্লম্বভাবে তৈরি করে

new Column(  

  mainAxisAlignment: MainAxisAlignment.center,  

  children: <Widget>[  

    new Text(  

      "VegElement",  

    ),  

    new Text(  

      "Non-vegElement"  

    ),  

  ],  

),  

 Row

সারি উইজেটটি কলাম উইজেটের মতো, তবে এটি উল্লম্বভাবে না হয়ে অনুভূমিকভাবে একটি উইজেট তৈরি করে এখানে, প্রধান অক্ষটি অনুভূমিক অক্ষ এবং ক্রস অক্ষটি উল্লম্ব অক্ষ

উদাহরণ

নীচের কোড স্নিপেটগুলি অনুভূমিকভাবে দুটি উইজেট উপাদান তৈরি করে

new Row(  

  mainAxisAlignment: MainAxisAlignment.spaceEvenly,  

  children: <Widget>[  

    new Text(  

      "VegElement",  

    ),  

    new Text(  

      "Non-vegElement"  

    ),  

  ],  

),  

 Center

এই উইজেটটি চাইল্ড উইজেট কেন্দ্রে ব্যবহার করা হয়, যা এর ভিতরে আসে সমস্ত পূর্ববর্তী উদাহরণ কেন্দ্র উইজেটের ভিতরে রয়েছে

উদাহরণ

Center(  

  child: new clumn(  

    mainAxisAlignment: MainAxisAlignment.spaceEvenly,  

    children: <Widget>[  

      new Text(  

        "VegElement",  

      ),  

      new Text(  

        "Non-vegElement"  

      ),  

    ],  

  ),  

),  

 

Padding

এই উইজেটটি অন্যান্য উইজেটগুলিকে নির্দিষ্ট দিকনির্দেশে প্যাডিং দিতে মোড়ানো করে আপনি সব দিক থেকে প্যাডিং প্রদান করতে পারেন. আমরা নীচের উদাহরণ থেকে এটি বুঝতে পারি যা সমস্ত দিক থেকে 6.0 এর পাঠ্য উইজেট প্যাডিং দেয়

উদাহরণ

Padding(  

  padding: const EdgeInsets.all(6.0),  

  child: new Text(  

    "Element 1",  

  ),  

),  

 

Scaffold

অ্যাপবার , ফ্লোটিং অ্যাকশন বোতাম, ড্রয়ার ইত্যাদির মতো সাধারণ উপাদান ডিজাইনের উপাদান যোগ করতে দেয়

Stack

এটি একটি অপরিহার্য উইজেট, যা মূলত একটি উইজেটকে overlapping করার জন্য ব্যবহৃত হয় , যেমন একটি ব্যাকগ্রাউন্ড গ্রেডিয়েন্টের একটি বোতাম


রাজ্য ব্যবস্থাপনা উইজেট - State Management Widget

ফ্লাটারে, প্রধানত দুটি ধরণের উইজেট রয়েছে:

স্টেটলেস উইজেট - StatelessWidget

স্টেটফুল উইজেট - StatefulWidget

স্টেটফুল উইজেট- StatelessWidget

স্টেটফুল উইজেটে রাষ্ট্রীয় তথ্য থাকে এটিতে প্রধানত দুটি শ্রেণী রয়েছে: state object এবং widget এটি গতিশীল কারণ এটি উইজেট জীবদ্দশায় অভ্যন্তরীণ ডেটা পরিবর্তন করতে পারে এই উইজেটে build() পদ্ধতি নেই এটিতে createState( ) পদ্ধতি রয়েছে, যা একটি শ্রেণী প্রদান করে যা Flutters State ক্লাস প্রসারিত করে স্টেটফুল উইজেটের উদাহরণ হল চেকবক্স, রেডিও, স্লাইডার, ইনকওয়েল , ফর্ম এবং টেক্সটফিল্ড

উদাহরণ

class Car extends StatefulWidget {  

  const Car({ Key key, this.title }) : super(key: key);   

  @override  

  _CarState createState() => _CarState();  

}  

class _CarState extends State<Car> {  

  @override  

  Widget build(BuildContext context) {  

    return Container(  

      color: const Color(0xFEEFE),  

           child: Container(  

            child: Container( //child: Container() )  

        )  

    );  

  }  

}  

স্টেটলেস উইজেট- StatefulWidget

স্টেটলেস উইজেটে কোনো রাষ্ট্রীয় তথ্য নেই এটি তার জীবনচক্র জুড়ে স্থির থাকে স্টেটলেস উইজেটের উদাহরণ হল টেক্সট, রো, কলাম, কন্টেইনার ইত্যাদি

উদাহরণ

class MyStatelessCarWidget extends StatelessWidget {  

  const MyStatelessCarWidget ({ Key key }) : super(key: key);  

  @override  

  Widget build(BuildContext context) {  

    return Container(color: const Color(0x0xFEEFE));  

  }  


ফ্লাটার অ্যাপ ডেভেলপমেন্টে বিগিনারদের জন্য গুরুত্বপূর্ণ উইজেটস

প্রথমে জেনে নেওয়া যাক, উইজেট আসলে কী?   - উইজেট হলো ফ্লাটারের বিল্ডিং ব্লক। অর্থাৎ, ফ্লাটার অ্যাপ্লিকেশনের যেকোনো কিছুই একটা উইজেট হিসেবে ত...