স্ন্যাকবার

স্নাকবার কম্পোনেন্টটি একটি সংক্ষিপ্ত নোটিফিকেশন হিসেবে কাজ করে, যা স্ক্রিনের নিচে প্রদর্শিত হয়। এটি ব্যবহারকারীর অভিজ্ঞতায় কোনো বাধা সৃষ্টি না করেই কোনো অপারেশন বা অ্যাকশন সম্পর্কে ফিডব্যাক প্রদান করে। স্নাকবারগুলো কয়েক সেকেন্ড পর অদৃশ্য হয়ে যায়। ব্যবহারকারী কোনো অ্যাকশনের মাধ্যমে, যেমন একটি বাটনে ট্যাপ করে, এগুলোকে সরিয়েও দিতে পারেন।

এই তিনটি ব্যবহারের ক্ষেত্র বিবেচনা করুন যেখানে আপনি একটি স্নাকবার ব্যবহার করতে পারেন:

  • ক্রিয়াকলাপ নিশ্চিতকরণ: কোনো ব্যবহারকারী একটি ইমেল বা বার্তা মুছে ফেলার পর, ক্রিয়াকলাপটি নিশ্চিত করতে এবং পূর্বাবস্থায় ফেরানোর (Undo) বিকল্প দেওয়ার জন্য একটি স্নাকবার প্রদর্শিত হয়।
  • নেটওয়ার্ক স্ট্যাটাস: অ্যাপটির ইন্টারনেট সংযোগ বিচ্ছিন্ন হয়ে গেলে, এটি যে এখন অফলাইন, তা জানানোর জন্য একটি স্নাকবার পপ-আপ হয়।
  • ডেটা জমা: সফলভাবে কোনো ফর্ম জমা দেওয়া বা সেটিংস আপডেট করার পর, একটি স্নাকবারে উল্লেখ করা হয় যে পরিবর্তনটি সফলভাবে সংরক্ষিত হয়েছে।
স্নাকবার UI কম্পোনেন্টের উদাহরণ।
চিত্র ১. স্ন্যাকবারের উদাহরণ।

মৌলিক উদাহরণ

একটি স্নাকবার প্রয়োগ করতে, আপনাকে প্রথমে SnackbarHost তৈরি করতে হবে, যার মধ্যে একটি SnackbarHostState প্রপার্টি থাকে। SnackbarHostState আপনাকে showSnackbar() ফাংশনটি ব্যবহারের সুযোগ দেয়, যা ব্যবহার করে আপনি আপনার স্নাকবারটি প্রদর্শন করতে পারেন।

এই সাসপেন্ডিং ফাংশনটির জন্য একটি CoroutineScope প্রয়োজন—যেমনটি rememberCoroutineScope দ্বারা রিটার্ন করা হয়—এবং এটি UI ইভেন্টের প্রতিক্রিয়ায় Scaffold মধ্যে একটি Snackbar দেখানোর জন্য কল করা যেতে পারে।

val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
Scaffold(
    snackbarHost = {
        SnackbarHost(hostState = snackbarHostState)
    },
    floatingActionButton = {
        ExtendedFloatingActionButton(
            text = { Text("Show snackbar") },
            icon = { Icon(Icons.Filled.Image, contentDescription = "") },
            onClick = {
                scope.launch {
                    snackbarHostState.showSnackbar("Snackbar")
                }
            }
        )
    }
) { contentPadding ->
    // Screen content
}

অ্যাকশন সহ স্ন্যাকবার

আপনি একটি ঐচ্ছিক অ্যাকশন প্রদান করতে এবং Snackbar সময়কাল সামঞ্জস্য করতে পারেন। snackbarHostState.showSnackbar() ফাংশনটি অতিরিক্ত actionLabel এবং duration প্যারামিটার গ্রহণ করে এবং একটি SnackbarResult রিটার্ন করে।

val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
Scaffold(
    snackbarHost = {
        SnackbarHost(hostState = snackbarHostState)
    },
    floatingActionButton = {
        ExtendedFloatingActionButton(
            text = { Text("Show snackbar") },
            icon = { Icon(Icons.Filled.Image, contentDescription = "") },
            onClick = {
                scope.launch {
                    val result = snackbarHostState
                        .showSnackbar(
                            message = "Snackbar",
                            actionLabel = "Action",
                            // Defaults to SnackbarDuration.Short
                            duration = SnackbarDuration.Indefinite
                        )
                    when (result) {
                        SnackbarResult.ActionPerformed -> {
                            /* Handle snackbar action performed */
                        }
                        SnackbarResult.Dismissed -> {
                            /* Handle snackbar dismissed */
                        }
                    }
                }
            }
        )
    }
) { contentPadding ->
    // Screen content
}

আপনি snackbarHost প্যারামিটার ব্যবহার করে একটি কাস্টম Snackbar প্রদান করতে পারেন। আরও তথ্যের জন্য SnackbarHost এপিআই রেফারেন্স ডক্স দেখুন।

মূল বিষয়গুলো

  • actionLabel = "Action" : অ্যাকশন বাটনের টেক্সট নির্ধারণ করে।
  • duration = SnackbarDuration.Indefinite : ব্যবহারকারী বা প্রোগ্রাম বাতিল না করা পর্যন্ত স্নাকবারটি প্রদর্শিত থাকে।
  • SnackbarResult.ActionPerformed : এর অর্থ হলো, ব্যবহারকারী স্নাকবারের অ্যাকশন বাটনে ক্লিক করেছেন।
  • SnackbarResult.Dismissed : এর অর্থ হলো, ব্যবহারকারী অ্যাকশন বাটনে ক্লিক না করেই স্নাকবারটি বন্ধ করে দিয়েছেন।