x_apm 2.0.0 copy "x_apm: ^2.0.0" to clipboard
x_apm: ^2.0.0 copied to clipboard

X APM

example/lib/main.dart

import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:x_apm/x_apm.dart';
import 'package:x_apm_example/common/router.dart';
import 'package:x_apm_example/widgtes.dart';

GlobalKey<NavigatorState> globalKey = GlobalKey<NavigatorState>();

void main() {
  // WidgetsFlutterBinding.ensureInitialized();
  XApmManager.instance.init(
      config: ApmConfig(
          enable: true,
          handlers: [FloatWindowHandler(globalKey)],
          endpoint:
              "https://hyperf.debug.591.com.hk/api/flutter/apm/save-record"));
  HttpOverrides.global = ApmHttpOverrides();

  XApm(appRunner: () => runApp(const MyApp()),ensureInitialized: true);
  // FlutterError.onError = (FlutterErrorDetails details) {
  //   print('FlutterError.onError');
  //   print(details);
  // };
  //
  // PlatformDispatcher.instance.onError = (error, stack) {
  //   print("PlatformDispatcher.instance.onError");
  //   print(error);
  //   print(stack);
  //   return true;
  // };
  //
  // runApp(const MyApp());
  // const dynamic x = 20;
  // print(x.trim());
  // runZonedGuarded(() {
  //
  // }, (error, stack) {
  //   print('runZonedGuarded');
  //   print(error);
  //   print(stack);
  // });
}

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

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      navigatorKey: globalKey,
      routes: generateRoutes(),
      theme: ThemeData(primarySwatch: Colors.blue, useMaterial3: false),
      navigatorObservers: [ApmNavigatorObserver.instance],
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('通用版首页'),
        actions: <Widget>[
          IconButton(
            icon: const Icon(Icons.settings),
            tooltip: 'Setting',
            onPressed: () => Navigator.of(context).pushNamed('/setting'),
          ),
        ],
      ),
      body: Center(
        child: ListView(
          padding: const EdgeInsets.only(
              left: 16.0, right: 16.0, top: 8.0, bottom: 8.0),
          children: <Widget>[
            buildEntryButton(context, '异常测试', '/error_test'),
            buildEntryButton(context, '页面路由跳转测试', '/navigator_test/first_page'),
            buildEntryButton(
                context, '设备信息', '/navigator_test/device_info_page'),
            buildEntryButton(context, '网络测试', '/navigator_test/network_page'),
          ],
        ),
      ),
    );
  }
}