Flutter Getx Snackbar не работает

Я создал приложение flutter и использовал пакет getx. Но затем я использовал его, чтобы показать закусочную, функция выполняется, но закусочная не отображается.

       onPressed: () {
        print("executed");
        Get.snackbar(
            "title",
            "content",
          ); 
        },

5 ответов

Измените виджет MaterialApp() на виджет GetMaterialApp().

Чтобы использовать GetX Snack Bar, вы должны использоватьGetMaterialAppвместоMaterialAppвmain.dart.

Вы можете создать свой собственныйSnackBarтакже.

      
final kPadding = 8.0; // up to you
 
class Snack {
  /// show the snack bar
  /// [content] is responsible for the text of the snack bar
  static show({
    required String content,
    SnackType snackType = SnackType.info,
    SnackBarBehavior behavior = SnackBarBehavior.fixed,
  }) {
    ScaffoldMessenger.of(Get.context!).showSnackBar(
      SnackBar(
        content: Text(
          content,
          style: Get.textTheme.headline5
              ?.copyWith(color: _getSnackbarTextColor(snackType)),
        ),
        behavior: behavior,
        backgroundColor: _getSnackbarColor(snackType),
        padding: const EdgeInsets.symmetric(
          horizontal: kPadding * 3,
          vertical: kPadding * 2,
        ),
      ),
    );
  }

  static Color _getSnackbarColor(SnackType type) {
    if (type == SnackType.error) return const Color(0xffFF7A7A);
    if (type == SnackType.warning) return Colors.amber;
    if (type == SnackType.info) return Colors.blue;
    return Colors.white;
  }

  static Color _getSnackbarTextColor(SnackType type) {
    if (type == SnackType.error || type == SnackType.info) return Colors.white;

    return const Color(0xff1C1C1C);
  }
}

enum SnackType { info, warning, error }

Теперь в любом месте вы можете использовать это таким образом.

      Snack.show(content: 'Your Snack Message', snackType: SnackType.error, behavior: SnackBarBehavior.floating);

Единственная причина в том, что вы не используете виджет GetMaterialApp() при запуске.

вам нужно изменить виджет MaterialApp() на виджет GetMaterialApp().

      import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return GetMaterialApp(
      home: SafeArea(
        child: Scaffold(
          body: Center(
            child: ElevatedButton(
                onPressed: () {
                  print("executed");
                  Get.snackbar(
                    "title",
                    "content",
                  );
                },
                child: Icon(Icons.ac_unit)),
          ),
        ),
      ),
    );
  }
}
Другие вопросы по тегам