اسنک بار

جزء اسنکبار به عنوان یک اعلان کوتاه عمل می کند که در پایین صفحه ظاهر می شود. این بازخورد در مورد یک عملیات یا اقدام بدون وقفه در تجربه کاربر ارائه می دهد. اسنک بارها پس از چند ثانیه ناپدید می شوند. کاربر همچنین می تواند با یک عمل، مانند ضربه زدن روی یک دکمه، آنها را رد کند.

این سه مورد استفاده را در نظر بگیرید که ممکن است از اسنک بار استفاده کنید:

  • تأیید اقدام: پس از حذف یک ایمیل یا پیام توسط کاربر، یک نوار اسنک برای تأیید عملکرد ظاهر می شود و گزینه «واگرد» را ارائه می دهد.
  • وضعیت شبکه: هنگامی که برنامه اتصال اینترنت خود را قطع می کند، یک نوار اسنک ظاهر می شود تا متوجه شود که اکنون آفلاین است.
  • ارسال داده ها: پس از ارسال موفقیت آمیز فرم یا به روز رسانی تنظیمات، یک اسنکبار متوجه می شود که تغییر با موفقیت ذخیره شده است.

مثال اساسی

برای پیاده سازی نوار اسنک، ابتدا SnackbarHost را ایجاد می کنید که شامل یک ویژگی SnackbarHostState است. SnackbarHostState دسترسی به تابع showSnackbar() فراهم می کند که می توانید از آن برای نمایش نوار اسنک خود استفاده کنید.

این تابع تعلیق به CoroutineScope مانند استفاده از rememberCoroutineScope نیاز دارد - و می تواند در پاسخ به رویدادهای UI برای نشان دادن Snackbar در Scaffold فراخوانی شود.

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
}

می توانید یک Snackbar سفارشی با پارامتر snackbarHost تهیه کنید. برای اطلاعات بیشتر به اسناد مرجع SnackbarHost API مراجعه کنید.