首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flutter w/ MobX:出现异常时,Snackbar不显示

Flutter是一种跨平台的移动应用开发框架,而MobX是一种状态管理库。当在Flutter应用中使用MobX时,如果出现异常,Snackbar通常不会显示。这是因为MobX默认会捕获并处理异常,以避免应用崩溃。

要解决这个问题,可以通过在异常处理代码中手动显示Snackbar来实现。以下是一个示例代码:

代码语言:txt
复制
import 'package:flutter/material.dart';
import 'package:mobx/mobx.dart';

// 创建一个全局的异常处理器
final globalErrorHandler = (Object error, StackTrace stackTrace) {
  // 在这里显示Snackbar
  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(
      content: Text('出现异常:$error'),
    ),
  );
};

void main() {
  // 初始化MobX
  WidgetsFlutterBinding.ensureInitialized();
  // 设置全局异常处理器
  FlutterError.onError = globalErrorHandler;

  runApp(MyApp());
}

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

class MyHomePage extends StatelessWidget {
  final counter = Observable(0);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter w/ MobX'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '点击按钮增加计数器的值:',
            ),
            Observer(
              builder: (_) => Text(
                '${counter.value}',
                style: Theme.of(context).textTheme.headline4,
              ),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 在这里故意引发一个异常
          throw Exception('这是一个故意引发的异常');
        },
        child: Icon(Icons.add),
      ),
    );
  }
}

在上面的示例中,我们创建了一个全局的异常处理器globalErrorHandler,它会在应用中的任何地方捕获异常。然后,在main()函数中设置FlutterError.onErrorglobalErrorHandler,以确保所有异常都会被捕获和处理。

MyHomePage组件中,我们使用了MobX来管理计数器的状态。当点击FloatingActionButton时,故意引发一个异常。由于我们设置了全局异常处理器,异常会被捕获并显示Snackbar。

需要注意的是,Snackbar需要在有Scaffold的上下文中才能正常显示,因此我们使用ScaffoldMessenger.of(context)来获取ScaffoldMessengerState,并调用showSnackBar()来显示Snackbar。

这是一个简单的解决方案,可以根据实际需求进行修改和扩展。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【老孟Flutter】Flutter 2 新增的功能

    今天,我们很高兴地宣布Flutter 2的发布。距离Flutter 1.0的发布已经两年多了,但是在很短的时间内,我们已经关闭了24,541期,并合并了765个贡献者的17,039个PR。自9月Flutter 1.22发布以来,我们已经关闭了5807期并合并了298位贡献者的4091个PR。特别感谢我们的志愿者捐助者,他们慷慨地抽出时间来改进Flutter项目。Flutter 2 release 版本前几名志愿者贡献者是xubaolin46个PR,a14n32个PR,专注于使Flutter达到零安全,hamdikahloun具有20个PR,改善了Flutter插件的数量。但是,不仅仅是编码员为Flutter项目做出了贡献。一大批志愿者PR评审人员还负责评审1525个PR,包括hamdikahloun(再次!),CareF和YazeedAlKhalaf(16个!)。Flutter确实是社区的一项工作,如果没有问题提出者,PR贡献者和代码审查者,我们就不可能进入第2版。此版本适用于所有人。

    02
    领券