FVM — ফ্লাটারের একাধিক ভার্সন ব্যবহার

ধরুন আপনি একটা প্রজেক্টে কাজ করছেন(এর নাম দিলাম সিরিয়াস প্রজেক্ট), যাতে 3.7.3 ভার্সন ব্যবহার করছেন। এখন আরেকটি প্র্যাক্টিস প্রজেক্টে আপনি ফ্লাটারের সর্বশেষ ভার্সন ব্যবহার করতে চান। আপনি চাইলে ফ্লাটার ভার্সন আপগ্রেড করতে পারেন, তবে তাতে করে আপনার সিরিয়াস প্রজেক্টের ডিপেন্ডেন্সীতে ঝামেলা হবার সম্ভাবনা আছে, তখন যেখানে যেখানে সমস্যা সেগুলো ঠিক করতে হবে। সেটা না করে নতুন ভার্সনে আপগ্রেড করে কাজ করলেন। এখন কাজ শেষে আবার সিরিয়াস প্রজেক্টে কাজ করতে চাইলে আবার ভার্সন ডাউনগ্রেড করতে হবে।

আমরা চাইলে অনেক কিছুই করতে তো পারি, তবে হয়তো করতে চাই না। যেমন ধরুন ডিপেন্ডেন্সির কনফ্লিক্ট ঠিক করা, কিংবা ঘনঘন ভার্সন আপগ্রেড-ডাউনগ্রেড করা। অথচ বিভিন্ন প্রজেক্টে বিভিন্ন ভার্সন থাকা খুবই স্বাভাবিক ব্যাপার।

কেমন হতো যদি এমন কোনো পদ্ধতি থাকতো, যাতে করে আমরা আমাদের ডিভাইসে একই সাথে একাধিন ফ্লাটার ভার্সন ইনস্টল করতে পারতাম, এবং ভিন্ন ভিন্ন প্রজেক্টে ভিন্ন ভিন্ন ভার্সন ব্যবহার করতে পারতাম? ঠিক অনেকটা পাইথনের venv বা pyenv এর মতোন?

নিঃসন্দেহে খুবই ভালো হতো। আসলে প্রয়োজন যখন বাস্তবসম্মত, এমন পদ্ধতি অবশ্যই আছে!

এই আর্টিকেলটি ইংরেজি ভার্সনেও প্রকাশিত হয়েছে।

FVM

চলুন FVM কে স্বাগত জানাই। FVM এর পূর্ণরূপ হচ্ছে Flutter Version Manager। নামই যথেষ্ট সে কী করে তা বোঝানোর জন্য। এটা আমাদের ডিভাইসে একাধিক ভার্সন রাখতে সাহায্য করে। সেই সাথে আমরাএকাধিক চ্যানেল বা ফ্লেভারও ব্যবহার করতে পারি। এর মাধ্যমে ফ্লাটারের গ্লোবাল ভার্সন যেমন ঠিক করে দিতে পারি, তেমনি বিভিন্ন প্রজেক্টে বিভিন্ন ভার্সনও কনফিগার করে দিতে পারি। এমনকি প্রজেক্টে ব্যবহারের আগেই সর্বশেষ রিলিজ কিংবা বেটা রিলিজ এর স্বাদ নিয়ে দেখতে পারি। এটা আমাদের কাজ যেমন সহজ করে, তেমনি ব্যবহারও একেবারে সহজ সরল।

তবে এটা ইন্সটল আর ব্যবহার শুরুর আগে এর পেছনের মোটিভেশনগুলোয় চোখ বুলিয়ে নেই। FVM এর অফিসিয়াল ডক অনুযায়ী —

  • We need to have more than one Flutter SDK at a time.
  • Testing new SDK features requires switching between Channels.
  • The switch between channels is slow and requires reinstalling every time.
  • No way of keeping track of the latest working/used version of the SDK in an app.
  • Major Flutter updates require migration of all Flutter apps in the machine.
  • Inconsistent development environments between other devs in the team.

আচ্ছা , এবার হাতে ময়লা লাগাই।

ইন্সটল করা

মূলত দুভাবে আমরা fvm ইন্সটল করতে পারি। (এখন থেকে ছোট হাতের fvm নামে ডাকবো)

১। Standalone: এই পদ্ধতিতে আমরা গ্লোবালি fvm ইন্সটল করে ফ্লাটার ম্যানেজ করতে পারি. তবে আমরা এই পদ্ধতির বদলে ২য় টি অনুসরণ করবো। অফিসিয়াল ডকুমেন্টেশনেও একই পরামর্শ দেয়া হয়েছে। তবু চাইলে এই পদ্ধতিতে চোখ বুলিয়ে নিতে পারেন।

২। Pub package: অফিসিয়াল নির্দেশনা অনুযায়ী আমাদের উচিত আগে ফ্লাটার SDK ইন্সটল করা, যেটা হবে আমাদের ডিভাইসে মেইন ভার্সন। এরপর fvm কে প্যাকেজ হিসেবে ইন্সটল করে বিভিন্ন প্রজেক্টে বিভিন্ন ভার্সন ব্যবহার করতে পারি।

ধরে নিচ্ছি আমাদের আগেই ফ্লাটার ইন্সটল করা আছে। এখন fvm ইন্সটল করা যেকোনো পাব প্যাকেজ ইন্সটল মতোই। শুধু কন্সোল ওপেন করে নিচের মন্ত্র পড়ে ফু দিন!

dart pub global activate fvm

আমার fvm ইন্সটল করা আছে। তাই আপনাদের আউটপুট পুরোপুরি নাও মিলতে পারে, তবে অনেকটাই নিচের মতো আসবে।

ব্যস এইটুকুই! এখন আমরা fvm এর বিভিন্ন মন্ত্র দিয়ে বিভিন্ন কাজ করে ফেলার জন্য প্রস্তুত।

চলুন মন্ত্র বা কমান্ডগুলোর সাথে পরিচিত হয়ে নেই।

আমরা চাইলে ফ্লাটারের যেকোনো কমান্ডকে fvm এর কমান্ড হিসেবেও ব্যবহার করতে পারি। এরজন্য ফ্লাটার এর কমান্ডের আগে শুধু fvm জুড়ে দিলেই হবে। যেমন ধরুন fvm flutter pub get

কী দারুণ ব্যাপার, তাই না?

সকল ইন্সটল করা ভার্সনের লিস্ট দেখা

সবার আগে আমরা দেখতে চাই আমাদের কী কী ভার্সন ইন্সটল করা আছে, তাই তো? কন্সোল ওপেন করে নিচের কমান্ড চালাই

fvm list

এখানে আমরা দেখতে পাচ্ছি আমাদের ডিভাইসে fvm এর মাধ্যমে কোন কোন ভার্সন ইন্সটল করা আছে। আমার ক্ষেত্রে এগুলো আছে। আপনাদের ক্ষেত্রে ফাঁকা থাকতে পারে, যেহেতু কোনো ভার্সন এখনো ইন্সটল করা হয়নি।

সর্বশেষ রিলিজ চেক করা

এখন আমরা চাচ্ছি নতুন ভার্সন ইন্সটল করতে, আসলে সর্বশেষ ভার্সনটি ইন্সটল করতে। কিন্তু এর আগে আমাদের জানতে হবে সর্বশেষ ভার্সন নাম্বারটি কতো। আমরা ব্রাউজার ওপেন করে ফ্লাটারের ওয়েবসাইটে গিয়ে রিলিজ ভার্সন গুলো চেক করে দেখতে পারি। তবে আমাদের হাতে তো জাদুর মন্ত্র আছে, তাহলে এতো কষ্ট কেন করবো?

কন্সোল ওপেন করে নিচের কমান্ড দেই

fvm releases

দেখতে পাচ্ছি ফ্লাটারের সর্বশেষ ভার্সন থেকে শুরু করে একেবারে ১ম ভার্সন পর্যন্ত লিস্ট আকারে দেখাচ্ছে। এখানে তারিখ, বছর, ভার্সন নাম্বার এমনকি স্টেবল নাকি বেটা চ্যানেলে সেটাও দেখাচ্ছে।

ওয়াও! এখন থেকে তো তাহলে আমাদের কষ্ট করে ফ্লাটারের সাইটে গিয়ে খুঁজতে হবে না(তবে যদি ভার্সন এর সাথে রিলিজ নোটও দেখতে চাই তো আলাদা কথা)

নির্দিষ্ট ভার্সন ইন্সটল করা

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

কোনো নির্দিষ্ট ভার্সন ইন্সটল করতে আমাদের fvm install <version-no> কমান্ডটি দিতে হবে, আমাদের বেলায় ভার্সন নাম্বার 3.13.4

fvm install 3.13.4

ব্যাস! হয়ে গেলো ইন্সটল। চাইলে আমরা চেক করেও দেখতে পারি ।

কোনো ভার্সন আনইন্সটল করা

এখন আমরা চাইলে যতো খুশি ভার্সন রাখতে পারবো। তবে হার্ডডিস্কের জায়গা বরবাদ করার জন্য এটা কোনো ভালো বুদ্ধি নয়। কাজেই আমরা পুরোনো ভার্সনগুলো আনইন্সটল করে ফেলতে পারি। যেমন আমার বেলায় আমি 2.10.5 ভার্সনটি আর ব্যবহার করছি না(আপাতত)। কাজেই একে রিমুভ করে দেয়াই ভালো।

আবারও, শুধু একটা কমান্ড দিলেই চলবে।

fvm remove 2.10.5

আমাদের ভার্সনটি আমাদের ডিভাইস থেকে আনইন্সটল হয়ে গেছে, তবে যেহেতু যেকোনো সময় আমরা আবার ইন্সটল করতে পারি, তাই আপাতত মন খারাপ না করে হাতের কাজ শেষ করি।

গ্লোবাল ভার্সন সেট করা

আমরা ফ্লাটারের মাল্টিপল ভার্সন ইন্সটল করেছি, তবে আমরা চাইলে কোনো একটা ভার্সনকে গ্লোবাল বা ডিফল্ট হিসেবে সেট করে দিতে পারি

fvm global <version-no>

এখানে আমি 3.13.4 কে আমার গ্লোবাল ভার্সন হিসেবে সেট করেছি। এখন যদি আমরা কোনো ভার্সন এর কথা বলে না দেই, যেমন fvm flutter create প্রক্সি কমান্ড দিয়ে কোনো প্রজেক্ট তৈরী করি, সেখানে এই গ্লোবাল ভার্সনটাই ব্যবহৃত হবে।

প্রজেক্টে নির্দিষ্ট ভার্সন কনফিগার করা

এখন আমরা যদি আলাদা আলাদা প্রজেক্টে আলাদা আলাদা ভার্সন ব্যবহার করতে চাই তাহলে কী করবো? আবার একই প্রজেক্টের ভার্সন পরে চেঞ্জ করতে চাইলে কী করবো?

এর জন্যেও রয়েছে কমান্ড।

fvm use

যে প্রজেক্টে ভার্সন সেট করতে চাই তার রুট ডিরেক্টরিতে গিয়ে নিচের কমান্ড দিবো

fvm use <version-no>

এখানে আমরা 3.7.3 ভার্সনটা ব্যবহার করছি। আগে একটু বুঝে নেই এই কমান্ড কী কাজ করছে।

উপরের ছবিতে আমরা দেখতে পাচ্ছি, কমান্ড দেয়ার পরে প্রজেক্টের রুট ডিরেক্টরিতে একটা .fvm/ ডিরেক্টরি তৈরী হয়েছে, যার ভেতরে আছে একটা জেসন ফাইল, যেখানে আমাদের ব্যবহৃত ভার্সনের নাম্বার দেয়া আছে, সাথে একটা flutter_sdk/ ডিরেক্টরি তৈরী হয়েছে। এই ডিরেক্টরিটা আসলে একটা রেফারেন্সের মতো, যেটা fvm এর ডাউনলোড করা বিভিন্ন ভার্সনের ডিরেক্টরির কপি ভার্সন বলা যায়, আমাদের বেলায় যেটা 3.7.3 ভার্সন।

এখন আমাদের এডিটর বা IDE থেকে যদি আমরা এই ডিরেক্টরিকে আমাদের Flutter SDK path এ সেট করি, তাহলে পরে আবার ভার্সন চেঞ্জ করলে এই ডিরেক্টরির ভেতরের ফাইলগুলো চেঞ্জ হবে, কিন্তু আমাদের Flutter SDK path টা কিন্তু একই থাকছে। এভাবে আমরা আমাদের এডিটর বা IDE কনফিগার করতে পারি।

কিন্তু তার আগে আমাদেরকে এই ডিরেক্টরিটাকে .gitignore এ জুড়ে দিতে হবে, যাতে এর ভেতরের ফাইলগুলো কমিট বা পুশ না হয়।

.fvm/flutter_sdk

এবার আমাদের এডিটর/IDE কনফিগার করার পালা

VS Code

রুট ডিরেক্টরিতে .vscode/ নামে আরেকটা ডিরেক্টরি তৈরি করি, তার ভেতরে settings.json নামে একটা ফাইল তৈরি করি, এরপর নিচের কোডটুকু জুড়ে দেই

{
"dart.flutterSdkPath": ".fvm/flutter_sdk",
// Remove .fvm files from search
"search.exclude": {
"**/.fvm": true
},
// Remove from file watching
"files.watcherExclude": {
"**/.fvm": true
}
}

ব্যস, কাজ শেষ।

Android studio

এনড্রয়েড স্টুডিও এর জন্য ব্যাপারটা একটু আলাদা, তবে আরো সহজ।

ধরে নেই আমাদের practice_project এর জন্য আমরা 3.13.4 টা ব্যবহার করবো এবং এনড্রয়েড স্টুডিওতে কনফিগার করবো। শুরুতে আগের মতোইভার্সন সেট করে নেই।

এখন এনড্রয়েড স্টুডিওর উপরে বাম কোণায় File আছে যে, ওখান থেকে ক্লিক করা শুরু করি, file>Settings…>Languages & Frameworks> Flutter

এখন আমাদের প্রজেক্টে তৈরী হওয়া সেই ./fvm/flutter_sdk/ এর পাথটা হুবহু কপি করে Flutter SDK path এ বসিয়ে সেভ করি।

কনফিগারেশন এর পরে VS Code বা Android Studio রিস্টার্ট দিতে ভুলবেন না।

ব্যস, আমাদের কনফিগারেশন এর ঝামেলা শেষ।

fvm doctor

সবশেষের আগে, আমরা চাইলে fvm doctor কমান্ড ব্যবহার করে নিচের মতো বিভিন্ন তথ্য পেতে পারি। আমার কাছে যেটা পছন্দ হয়েছে, তা হচ্ছে প্রজেক্টে ফ্লাটারের কোন ভার্সন ব্যবহার হচ্ছে তা পরিষ্কারভাবে বলে দেয়া আছে। এমনিতে এই ফ্লাটারে এই তথ্য পাওয়া সবসময় একটু ঝক্কির কাজ মনে হয়েছে আমার কাছে।

উপসংহার

fvm দিয়ে আমরা আরো এডভান্স কাজও করতে পারি। যেমন, প্রজেক্ট ফ্লেভার, কাস্টম ফ্লাটার ভার্সন, কোনো নির্দিষ্ট রিভিশন ইন্সটল কিংবা একাধিক চ্যানেলে রিলিজ করা। কিন্তু আমাদের দৈনন্দিন কাজের জন্য যা যা প্রয়োজন আমরা এই আর্টিকেলে দেখেছি। যদি কখনো এরচেয়ে বেশি কিছুর প্রয়োজন হয় আমরা অফিশিয়াল ডকুমেন্টেশন দেখে করে ফেলতে পারি। অথবা কে জানে তার জন্য একটা নতুন আর্টিকেলও হয়তো লিখে ফেলা যেতে পারে। তবে আজ এই পর্যন্তই।

সামনে অন্য কোনো টপিকে অন্য কোনো আর্টিকেলে দেখা হবে ইনশা আল্লাহ। যেকোনো মন্তন্য বা পরামর্শের জন্য আগাম ধন্যবাদ। নতুন কোনো আপডেট পেতে আমাকে লিংকডইনে ফলো করতে পারেন।

ধন্যবাদ।

--

--