You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法自定义Flutter Toast消息:fluttertoast组件全局显示异常

解决FlutterToast全局显示及自定义样式失效问题

问题场景

使用fluttertoast ^8.2.4包,在MaterialApp.router结构中通过BatteryLevelCubit封装电池状态检测逻辑,每分钟检查一次电池电量,需求是无论用户处于哪个页面都能弹出低电量Toast提示,但当前遇到两个问题:

  1. Toast的自定义样式(背景色、字体大小等)未生效
  2. 不清楚Toast默认图标的来源

现有代码问题分析

  1. 无效判断逻辑:showLowBatteryAlert方法中的if (batteryLevel == batteryLevel)是恒成立的无效判断,无实际意义
  2. 错误的Toast触发时机:将Fluttertoast.showToast放在LowBatteryLevelState的构造函数中调用,这种方式脱离了UI上下文管理,MaterialApp.router的路由结构下,状态类中无法获取正确的全局上下文,导致Toast只能使用默认样式,且无法保证全局显示

修复方案

1. 修正Cubit逻辑,移除无效判断

void showLowBatteryAlert({required int batteryLevel}) {
  if (!isShowLowBatteryAlert) {
    emit(LowBatteryLevelState(batteryLevel));
    isShowLowBatteryAlert = true; // 标记已显示,避免重复弹出
  }
}

2. 全局监听Cubit状态,触发Toast

在MaterialApp.router的builder中添加全局BlocListener,确保在任何页面都能监听状态变化并弹出Toast:

MaterialApp.router(
  routerDelegate: _routerDelegate,
  routeInformationParser: _routeInformationParser,
  builder: (context, child) {
    return BlocListener<BatteryLevelCubit, BatteryLevelState>(
      listener: (context, state) {
        if (state is LowBatteryLevelState) {
          Fluttertoast.showToast(
            msg: '低电量提醒: ${state.batteryLevel}%',
            backgroundColor: Colors.red,
            fontSize: 16.sp,
            textColor: Colors.white,
            gravity: ToastGravity.TOP,
            // 可选:指定Android系统内置图标
            androidToastIcon: AndroidToastIcon.warning,
          );
        }
      },
      child: child,
    );
  },
);

3. 全局初始化FlutterToast(可选)

在main函数中初始化FlutterToast,配置全局默认参数:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Fluttertoast.initialize(
    fontSize: 14.sp,
    backgroundColor: Colors.grey[800],
  );
  runApp(MyApp());
}

Toast图标来源说明

  • Android平台:默认图标是系统原生Toast的提示图标(通常为感叹号或信息图标),由系统主题决定。如需自定义,可通过androidToastIcon指定系统内置图标,或通过toastIcon参数指定项目中的Drawable资源路径
  • iOS平台:原生Toast不支持图标,因此FlutterToast在iOS上不会显示图标
  • Web平台:可通过webIcon参数指定图标URL或本地资源

内容的提问来源于stack exchange,提问作者Ahmet Talha Ablak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 12:42:49