Jetpack Compose মডিফায়ারগুলোকে বিভিন্ন ধাপে কার্যকর করে। নিম্নলিখিত বিভাজনে দেখানো হয়েছে যে সাধারণ মডিফায়ারগুলো কোন ধাপের অন্তর্গত এবং কখন তাদের আর্গুমেন্ট বা ল্যাম্বডাগুলো মূল্যায়ন করা হয়।
পর্যায় ১: গঠন পর্যায়
এই মডিফায়ারগুলো @Composable বডির ভিতরে আর্গুমেন্টগুলোকে সিনক্রোনাসভাবে মূল্যায়ন করে। এখানে পঠিত যেকোনো স্টেট Composable রিস্টার্ট স্কোপের সাথে একটি ডিপেন্ডেন্সি রেজিস্টার করে এবং পরিবর্তিত হলে একটি সম্পূর্ণ রিকম্পোজিশন ট্রিগার করে।
- স্থির মাত্রা এবং আকার পরিবর্তনকারী :
-
Modifier.size(dp),Modifier.width(dp),Modifier.height(dp) -
Modifier.fillMaxSize(),Modifier.fillMaxWidth(),Modifier.fillMaxHeight() -
Modifier.wrapContentSize(),Modifier.wrapContentWidth(),Modifier.wrapContentHeight() -
Modifier.requiredSize(),Modifier.defaultMinSize() -
Modifier.aspectRatio(ratio) -
Modifier.weight(weight)(RowScopeবাColumnScopeমধ্যে ) -
Modifier.width(IntrinsicSize.Min / Max) -
Modifier.height(IntrinsicSize.Min / Max)
-
- স্থির ব্যবধান এবং ইনসেট :
-
Modifier.padding(all = dp),Modifier.padding(start, top, end, bottom) -
Modifier.windowInsetsPadding(insets),Modifier.statusBarsPadding()
-
- সরাসরি মান ভিজ্যুয়াল মডিফায়ার :
-
Modifier.alpha(float)(কম্পোজিশনের সময় স্টেট পড়ে) -
Modifier.rotate(degrees)(কম্পোজিশনের সময় স্টেট পড়ে) -
Modifier.scale(scaleX, scaleY)(কম্পোজিশনের সময় স্টেট পড়ে) -
Modifier.background(color = Color, shape = Shape) -
Modifier.border(width, color, shape) -
Modifier.shadow(elevation, shape) -
Modifier.clip(shape) -
Modifier.blur(radius)
-
- স্থির অবস্থান সংশোধক :
-
Modifier.offset(x = dp, y = dp)(সরাসরি মান ওভারলোড) -
Modifier.absoluteOffset(x = dp, y = dp)
-
- ডাইনামিক কম্পোজেবল মডিফায়ার্স :
-
Modifier.composed { ... }(কম্পোজিশনের সময় ফ্যাক্টরি বডি চালায়)
-
পর্যায় ২: বিন্যাস পর্যায়
লেআউট পর্যায়টি দুটি স্বতন্ত্র উপ-ধাপে বিভক্ত, যেগুলোর প্রত্যেকটির আলাদা বাতিলকরণ পরিধি রয়েছে:
ধাপ ২ক: পরিমাপ
আকার ( width , height ) এবং সীমাবদ্ধতা নির্ধারণ করে। এখানে পঠিত অবস্থাটি পুনঃপরিমাপ এবং পুনঃস্থাপনকে সক্রিয় করে:
-
Modifier.layout { measurable, constraints -> ... }:layout(w, h)এর আগের কোডটি পরিমাপ চলাকালীন কার্যকর হয়।
ধাপ ২বি: প্লেসমেন্ট ও লেআউট কলব্যাক
(x, y) স্থানাঙ্ক অবস্থান নির্ধারণ করে। এখানে পঠিত অবস্থাটি শুধুমাত্র পুনঃস্থাপনকে সক্রিয় করে (পরিমাপ এবং সংযোজন এড়িয়ে):
-
Modifier.offset { IntOffset(x, y) }(ল্যাম্বডা ওভারলোড) -
Modifier.absoluteOffset { IntOffset(x, y) }(ল্যাম্বডা ওভারলোড) -
Modifier.layout { ... layout(w, h) { placeable.place(x, y) } }:layout(w, h) { ... }ব্লকের ভেতরের কোড। -
Modifier.onPlaced { layoutCoordinates -> ... }: প্লেসমেন্টের সময় প্যারেন্টের স্থানাঙ্ক নির্ধারিত হওয়ার পরে এটি কার্যকর হয়। -
Modifier.onSizeChanged { intSize -> ... }: লেআউট পরিমাপ সম্পন্ন হওয়ার পর আকার পরিবর্তিত হলে এটি কার্যকর হয়। -
Modifier.onGloballyPositioned { layoutCoordinates -> ... }: সম্পূর্ণ উইন্ডো লেআউট পর্ব শেষ হওয়ার পর এটি কার্যকর হয়।
পর্যায় ৩: অঙ্কন পর্যায়
এই মডিফায়ারগুলো ক্যানভাস ড্রয়িংয়ের সময় কার্যকর হয়। এই ব্লকগুলোর ভেতরে পঠিত স্টেট কম্পোজিশন এবং লেআউট উভয়কেই এড়িয়ে যায়, এবং শুধুমাত্র ড্র পাসটি চালায়:
-
Modifier.graphicsLayer { ... }:- ল্যাম্বডাতে আপডেট করা প্রোপার্টিগুলো হলো:
alpha,translationX,translationY,scaleX,scaleY,rotationX,rotationY,rotationZ,shadowElevation,shape,clip,renderEffect,transformOrigin।
- ল্যাম্বডাতে আপডেট করা প্রোপার্টিগুলো হলো:
-
Modifier.drawBehind { ... }:- কম্পোজেবল কন্টেন্টের পিছনে ক্যানভাস কমান্ডগুলো অঙ্কন করে।
-
Modifier.drawWithContent { ... }:-
drawContent()এর সাহায্যে অঙ্কনের ক্রম নিয়ন্ত্রণ করা হয়।
-
-
Modifier.drawWithCache { ... }:- বাইরের ব্লকটি
Path,Paint, বাBrushঅবজেক্টগুলোকে ক্যাশ করার জন্য আকার বা লেআউটের পরিবর্তনের সময় চলে;onDrawBehindবাonDrawWithContentপ্রতিটি ফ্রেম ড্র-এর সময় চলে।
- বাইরের ব্লকটি
পুনর্গঠন চক্রের বাইরে - পর্যবেক্ষণ সংশোধক
কিছু মডিফায়ার অ্যাক্সেসিবিলিটি, ব্যবহারকারীর ইনপুট এবং লাইফসাইকেল পর্যবেক্ষণ পরিচালনা করার জন্য তিনটি ফ্রেম পর্যায়ের বাইরে কাজ করে।
শব্দার্থবিদ্যা এবং প্রবেশগম্যতা
অ্যাক্সেসিবিলিটি পরিষেবা (টকব্যাক) এবং পরীক্ষার জন্য শব্দার্থিক বৈশিষ্ট্য প্রক্রিয়া করে:
-
Modifier.semantics { ... } -
Modifier.clearAndSetSemantics { ... }
ইনপুট, অঙ্গভঙ্গি এবং ইভেন্ট
থ্রি-ফেজ ফ্রেম রেন্ডারিং পাইপলাইনের বাইরে কাজ করে, ওএস মোশন ইভেন্ট এবং ব্যবহারকারীর ইন্টারঅ্যাকশন গ্রহণ করে:
-
Modifier.pointerInput(key) { detectTapGestures { ... } }/detectDragGestures/awaitPointerEventScope -
Modifier.clickable(enabled, onClickLabel) { ... } -
Modifier.combinedClickable { ... } -
Modifier.toggleable { ... } -
Modifier.selectable { ... } -
Modifier.draggable(...)/Modifier.scrollable(...)/Modifier.draggable2D(...) -
Modifier.onFocusChanged { focusState -> ... } -
Modifier.onKeyEvent { keyEvent -> ... } -
Modifier.onVisibilityChanged { isVisible -> ... }: একটি কো-রুটিনের মধ্যে, নির্ধারিত বিলম্বের পর কোনো কম্পোজেবলের দৃশ্যমানতা পরিবর্তিত হলে এই কলব্যাকটি চালু হয়।
দ্রুত তথ্যসূত্র: মান বনাম ল্যাম্বডা পর্যায়
একটি ল্যাম্বডাতে কোনো স্টেট ভ্যালু রিড করলে, সেই রিডটি পরবর্তী ফেজের জন্য স্থগিত হয়ে যায়, যার ফলে সেই স্টেট পরিবর্তিত হলে পূর্ববর্তী ফেজগুলো স্কিপ হয়ে যায় :
| মডিফায়ার / প্যাটার্ন | প্রত্যক্ষ মান (গঠন) | ল্যাম্বডা ভ্যারিয়েন্ট (বিলম্বিত পর্যায়) | যখন অবস্থা পরিবর্তন হয় |
|---|---|---|---|
| অফসেট | Modifier.offset(x, y) | Modifier.offset { IntOffset(x, y) } | লেআউট (স্থাপন) (কম্পোজিশন বাদ দেয়) |
| আলফা / অস্বচ্ছতা | Modifier.alpha(alpha) | Modifier.graphicsLayer { this.alpha = alpha } | অঙ্কন (গঠন ও বিন্যাস বাদ দিয়ে) |
| ঘূর্ণন | Modifier.rotate(degrees) | Modifier.graphicsLayer { rotationZ = degrees } | অঙ্কন (গঠন ও বিন্যাস বাদ দিয়ে) |
| স্কেল | Modifier.scale(scale) | Modifier.graphicsLayer { scaleX = s; scaleY = s } | অঙ্কন (গঠন ও বিন্যাস বাদ দিয়ে) |
| অনুবাদ | Modifier.padding(...) | Modifier.graphicsLayer { translationX = ... } | অঙ্কন (গঠন ও বিন্যাস বাদ দিয়ে) |
| পটভূমির রঙ | Modifier.background(color) | Modifier.drawBehind { drawRect(color) } | অঙ্কন (গঠন ও বিন্যাস বাদ দিয়ে) |
| স্ক্রোল / প্যারালাক্স | Modifier.offset(scroll.dp) | Modifier.offset { IntOffset(0, scroll) } | লেআউট (স্থাপন) (কম্পোজিশন বাদ দেয়) |
মডিফায়ার.নোড ইন্টারফেস ম্যাপিং
উচ্চ-পারফরম্যান্স Modifier.Node API ব্যবহার করে কাস্টম মডিফায়ারগুলির জন্য, ফেজগুলি সরাসরি নোড ক্যাপাবিলিটি ইন্টারফেসের সাথে ম্যাপ করে:
| পর্যায় | Modifier.Node ইন্টারফেস | মূল পদ্ধতি |
|---|---|---|
| বিন্যাস (পরিমাপ ও স্থাপন) | LayoutModifierNode | measure(measurable, constraints) |
| লেআউট (গ্লোবাল কোঅর্ডিনেটস) | GlobalPositionAwareModifierNode | onGloballyPositioned(coordinates) |
| বিন্যাস (স্থাপন) | LayoutAwareModifierNode | onRemeasured(size) , onPlaced(coordinates) |
| অঙ্কন | DrawModifierNode | draw(ContentDrawScope) |
| ইনপুট / পয়েন্টার | PointerInputModifierNode | onPointerEvent(...) , onCancelPointerInput() |
| শব্দার্থবিদ্যা | SemanticsModifierNode | applySemantics(SemanticsPropertyReceiver) |
| ফোকাস | FocusEventModifierNode | onFocusEvent(focusState) |