emas_crashlytics 0.0.1 copy "emas_crashlytics: ^0.0.1" to clipboard
emas_crashlytics: ^0.0.1 copied to clipboard

flutter crashlytics

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'dart:async';

import 'package:emas_crashlytics/emas_crashlytics.dart';
import './ErrorTriggert.dart';

void main() {
  // 收集 Flutter Framework 异常
  FlutterError.onError = (FlutterErrorDetails details) async {
    // 将异常转发至 Zone 统一处理
    Zone.current.handleUncaughtError(details.exception,
        details.stack ?? StackTrace.fromString(details.toString()));
  };
  // 收集异步触发的 Dart 异常
  runZonedGuarded(() {
    runApp(MyApp());
  }, (Object error, StackTrace stackTrace) {
    // debugPrint 不会截断:https://flutterchina.club/debugging/#printdebugprintflutter-logs
    // debugPoint 可自定义:https://zhuanlan.zhihu.com/p/99917712
    // debugPrint(error.toString());
    // debugPrint(stackTrace.toString());
    // 上报异常
    EmasCrashlytics.instance
        .captureException(error: error, stackTrace: stackTrace)
        .then((bool result) {
      print('采集到异常,上报${result ? '成功' : '失败'},result:$result');
    });
  });
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: Home(), navigatorObservers: <NavigatorObserver>[
      EmasNavigatorObserver.instance
    ]);
  }
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('EMAS 异常上报 Demo'),
        ),
        body: Column(
          children: <Widget>[
            ErrorTrigger(),
            Divider(
              color: Colors.black,
              height: 30,
            ),
            RaisedButton(
                onPressed: () async {
                  Navigator.push(
                    context,
                    MaterialPageRoute<void>(
                      settings: const RouteSettings(name: '/second'),
                      builder: (BuildContext context) => Second(),
                    ),
                  );
                },
                child: Text('去子页面:/second')),
          ],
        ));
  }
}

/// 子路由
class Second extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('Second 子路由'),
        ),
        body: Column(
          children: <Widget>[
            ErrorTrigger(),
            Divider(
              color: Colors.black,
              height: 30,
            ),
            Text('子路由:/second\n上报的错误将携带 /second 路由标识',
                style: TextStyle(fontSize: 16)),
          ],
        ));
  }
}
0
likes
30
pub points
0%
popularity

Publisher

unverified uploader

flutter crashlytics

Homepage

License

Apache-2.0 (LICENSE)

Dependencies

emas_core, flutter

More

Packages that depend on emas_crashlytics