Flutter消息提示插件custom_flutter_toast的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter消息提示插件custom_flutter_toast的使用

custom_flutter_toast 是一个用于Flutter应用的消息提示(Toast)库。它支持两种类型的消息提示:一种需要 BuildContext,另一种不需要 BuildContext。以下是关于如何使用这个插件的详细介绍,并提供了一个完整的示例代码。

1. Toast 不需要 BuildContext (仅限 Android 和 iOS)

这种类型的 Toast 有有限的功能,并且无法自定义 UI。它适用于 Android 和 iOS 平台。

示例代码:
final _nativeToastPlugin = NativeToast();

await _nativeToastPlugin.showToast(
  message: "Hello from Native Toast", // 消息内容,必填
  backgroundColor: Colors.red,        // 背景颜色,默认为 null
  maxLines: 6,                        // 最大行数,默认为 2
  gravity: ToastGravity.bottom,       // 显示位置,默认为底部
  textColor: Colors.white,            // 文字颜色,默认为 null
  fontSize: 16,                       // 字体大小,默认为 null
  showImage: true,                    // 是否显示图片,默认为 true
  imagePath: "assets/car_image.jpeg",  // 图片路径,默认为 flutter_logo
);

2. Toast 需要 BuildContext (适用于所有平台)

这种类型的 Toast 提供了更多的控制选项,包括自定义 UI、排队显示、移除单个 Toast 和清除队列等功能。它适用于所有平台。

使用步骤:
  1. main.dart 中设置全局 NavigatorKey

    final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
    
  2. MaterialApp 中使用 builder 来初始化 Toast

    MaterialApp(
      builder: flutterToastBuilder(), // 使用自定义 Toast 构建器
      navigatorKey: navigatorKey,      // 设置全局 NavigatorKey
      home: const HomeScreen(),
    );
    
  3. 在页面中初始化 FToast

    class _HomeScreenState extends State<HomeScreen> {
      final _flutterToast = FlutterToast();
      FToast? fToast;
    
      [@override](/user/override)
      void initState() {
        super.initState();
        fToast = FToast();
        fToast!.init(context); // 初始化 FToast
      }
    
      Future<void> showToastMessage(String message, {bool withImage = false}) async {
        try {
          _flutterToast.showCustomToast(
            message,
            navigatorKey: navigatorKey, // 使用全局 NavigatorKey
            maxLines: 5,                // 最大行数,默认为 5
            backgroundColor: Colors.red, // 背景颜色,默认为 null
            textColor: Colors.white,    // 文字颜色,默认为 null
            imagePath: "assets/car_image.jpeg", // 图片路径,默认为 flutter_logo
            showImage: withImage,       // 是否显示图片,默认为 true
          );
        } on PlatformException {
          if (kDebugMode) {
            print('Failed to show toast.');
          }
        }
      }
    }
    

3. 完整示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 custom_flutter_toast 插件来显示不同类型的 Toast。

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:custom_flutter_toast/export.dart';

/// The navigator key to be used throughout the app.
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();

void main() {
  runApp(const MyApp());
}

/// The main application widget.
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      builder: flutterToastBuilder(), // Use the custom toast builder
      navigatorKey: navigatorKey,     // Set the navigator key
      home: const HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

  [@override](/user/override)
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final _nativeToastPlugin = NativeToast();
  final _flutterToast = FlutterToast();
  FToast? fToast;

  [@override](/user/override)
  void initState() {
    super.initState();
    fToast = FToast();
    fToast!.init(context); // Initialize FToast
  }

  Future<void> showToastMessage(String message, {bool useNativeToast = false, bool withImage = false}) async {
    try {
      if (useNativeToast) {
        await _nativeToastPlugin.showToast(
          message: message,
          backgroundColor: Colors.red,
          maxLines: 6,
          gravity: ToastGravity.bottom,
          textColor: Colors.white,
          fontSize: 16,
          showImage: withImage,
          imagePath: "assets/car_image.jpeg",
        );
      } else {
        _flutterToast.showCustomToast(
          message,
          navigatorKey: navigatorKey,
          maxLines: 5,
          backgroundColor: Colors.red,
          textColor: Colors.white,
          imagePath: "assets/car_image.jpeg",
          showImage: withImage,
        );
      }
    } on PlatformException {
      if (kDebugMode) {
        print('Failed to show toast.');
      }
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Toast Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                showToastMessage("Hello from Flutter Toast", useNativeToast: false, withImage: true);
              },
              child: const Text('Show Flutter Toast With Image'),
            ),
            const SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: () {
                showToastMessage("Hello from Native Toast", useNativeToast: true, withImage: true);
              },
              child: const Text('Show Native Toast With Image'),
            ),
            const SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: () {
                showToastMessage("Another message from Flutter Toast", useNativeToast: false);
              },
              child: const Text('Show Another Flutter Toast'),
            ),
            const SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: () {
                showToastMessage("Another message from Native Toast", useNativeToast: true);
              },
              child: const Text('Show Another Native Toast'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter消息提示插件custom_flutter_toast的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter消息提示插件custom_flutter_toast的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用custom_flutter_toast插件来显示消息提示的示例代码。这个插件允许你以更灵活和自定义的方式显示Toast消息。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加custom_flutter_toast依赖:

dependencies:
  flutter:
    sdk: flutter
  custom_flutter_toast: ^2.0.0  # 请确保使用最新版本

然后运行flutter pub get来安装依赖。

2. 初始化插件

在你的主文件(通常是main.dart)中,你需要初始化CustomFlutterToast插件。这通常在MaterialAppCupertinoAppbuilder属性中进行。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CustomFlutterToast.init(
      context,
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: MyHomePage(),
      ),
    );
  }
}

3. 使用Toast消息

现在你可以在任何地方调用CustomFlutterToast.showToast方法来显示Toast消息。以下是一个简单的例子,展示如何在按钮点击时显示Toast消息。

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Toast Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            showToastMessage(context);
          },
          child: Text('Show Toast'),
        ),
      ),
    );
  }

  void showToastMessage(BuildContext context) {
    CustomFlutterToast.showToast(
      context,
      msg: "Hello, this is a custom toast message!",
      toastLength: CustomFlutterToast.LENGTH_SHORT,
      gravity: CustomFlutterToast.BOTTOM,
      animation: CustomFlutterToast.BOUNCE,
      backgroundColor: Colors.black.withOpacity(0.7),
      textColor: Colors.white,
      fontSize: 16.0,
    );
  }
}

4. 自定义Toast样式

custom_flutter_toast插件允许你高度自定义Toast消息的样式,包括消息内容、显示时长、位置、动画效果、背景颜色和文本颜色等。在上面的例子中,我们展示了如何设置这些属性。

5. 运行应用

完成上述步骤后,你可以运行你的Flutter应用,点击按钮时应该会看到一个自定义的Toast消息。

总结

custom_flutter_toast插件提供了灵活且强大的方式来显示Toast消息,使得在Flutter应用中实现消息提示变得更加简单和直观。通过自定义各种属性,你可以轻松创建符合你应用风格的Toast消息。

回到顶部