Flutter插件flutter_quash_sdk的使用方法介绍

Flutter插件flutter_quash_sdk的使用方法介绍

Flutter App with Quash Integration

本README提供了如何在你的Flutter应用程序中集成Quash SDK以捕获错误、启用屏幕录制和拦截网络请求的说明。

Getting Started

请遵循以下步骤在你的Flutter应用中设置Quash SDK。

1. 捕获所有错误

要捕获应用中发生的任何错误,请使用runZonedGuarded包装你的runApp调用。这可以确保任何未捕获的错误都被记录并适当处理。

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

void main() {
  runZonedGuarded(() async {
    runApp(const MyApp());
  }, (error, stackTrace) {
    FlutterError.dumpErrorToConsole(
      FlutterErrorDetails(stack: stackTrace, exception: error),
    );
    FlutterQuashSdk().getBugReportingScreen();
  });
}

1.2 初始化Quash SDK

在主部件的initState方法中初始化Quash SDK。从Quash网站获取你的API密钥,并将"your_api_key_here"替换为实际密钥。

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

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

  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _flutterQuashSdkPlugin = FlutterQuashSdk();

  [@override](/user/override)
  void initState() {
    super.initState();
    _flutterQuashSdkPlugin.intializeApp("your_api_key_here", true); // 生产环境
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorKey: _flutterQuashSdkPlugin.getNavigatorKey(),
      home: FabInjector(child: SplashScreen()), // 替换为你的部件
    );
  }
}

3. 启用屏幕录制

要在你的应用中启用屏幕录制功能,请使用Quash SDK提供的navigatorKey并包装你的主页部件。

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

class MyApp extends StatelessWidget {
  final _flutterQuashSdkPlugin = FlutterQuashSdk();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorKey: _flutterQuashSdkPlugin.getNavigatorKey(),
      home: FabInjector(child: SplashScreen()), // 替换为你的部件
    );
  }
}

4. 拦截网络请求

要记录你的应用发出的所有网络请求,请将QuashCurlInterceptor添加到你的Dio实例中。

import 'package:dio/dio.dart';
import 'package:flutter_quash_sdk/flutter_quash_sdk.dart';

final Dio _dio = Dio();

void setupDio() {
  _dio.interceptors.add(QuashCurlInterceptor());
}

示例代码

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

import 'package:flutter/services.dart';
import 'package:flutter_quash_sdk/flutter_quash_sdk.dart';
import 'package:flutter_quash_sdk/ui/bug_reporting/fab_button/fab_button.dart';
import 'package:flutter_quash_sdk_example/screens/splash_screen.dart';

void main() {
  FlutterError.onError = (FlutterErrorDetails details) {
    FlutterError.dumpErrorToConsole(details);
    FlutterQuashSdk().getBugReportingScreen();
  };

  runZonedGuarded(() async {
    runApp(const MyApp());
  }, (error, stackTrace) {
    FlutterError.dumpErrorToConsole(
      FlutterErrorDetails(stack: stackTrace, exception: error),
    );
    FlutterQuashSdk().getBugReportingScreen();
  });
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _flutterQuashSdkPlugin = FlutterQuashSdk();
  Duration _elapsed = Duration();
  Timer? _timer;

  [@override](/user/override)
  void initState() {
    // _flutterQuashSdkPlugin.intializeApp("0QUAS2dbgb007c2a2fc02c042a98cf9575bf84cdb42b5f549d7da30adaa4dcc9ba70da45e", true); // 生产环境
    _flutterQuashSdkPlugin.intializeApp("0QUASdbgfdf04d93332743695ab403052fea9f4bd61c442796700736b637f2a7e1cefaa7", true); // 测试环境
    // _flutterQuashSdkPlugin.intializeApp("0DSFAdbgc3e0d2579e909c148b504fca509b751a4435b184e3ed969239285807fea56bc5", true); // 阶段环境
    // _flutterQuashSdkPlugin.intializeApp("01dbgaff15ffc72c6650f2c5efc26e427447fd20a4683aaded3d9c101af7b8d857af6", true); // 阶段环境
    // _startTimer();
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    // _timer?.cancel();
    super.dispose();
  }

  void _startTimer() {
    _timer = Timer.periodic(Duration(milliseconds: 1), (timer) {
      setState(() {
        _elapsed = Duration(milliseconds: _elapsed.inMilliseconds + 1);
      });
    });
  }

  ///TODO 移除后添加pegion
  // 平台消息异步,因此我们通过异步方法进行初始化。
  Future<void> initPlatformState() async {
    String platformVersion;
    // 平台消息可能会失败,因此我们使用try/catch来捕获PlatformException。
    // 我们还处理了可能返回null的消息。
    try {
      platformVersion = await _flutterQuashSdkPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // 如果在异步平台消息仍在飞行时小部件已被从树中移除,则我们想要丢弃回复而不是调用setState来更新我们的不存在的外观。
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      navigatorKey: _flutterQuashSdkPlugin.getNavigatorKey(),
      home: FabInjector(child: SplashScreen()),

      // home: Scaffold(
      //   backgroundColor: Colors.blue,
      //   appBar: AppBar(
      //     title: const Text('Plugin example app'),
      //   ),
      //   body: Column(
      //     children: [
      //       Text('${_elapsed.inSeconds}.${_elapsed.inMilliseconds.remainder(1000).toString().padLeft(3, '0')}'),
      //       Center(
      //         child: ElevatedButton(
      //           onPressed: () {
      //             throw Exception('Manual crash triggered');
      //           },
      //           child: Text('Trigger Crash'),
      //         ),
      //       ),
      //       Center(
      //         child: ElevatedButton(
      //           onPressed: () {
      //             _flutterQuashSdkPlugin.getScreenshotDisplayScreen();
      //           },
      //           child: Text('Open Screenshot Page'),
      //         ),
      //       ),
      //     ],
      //   ),
      // ),
    );
  }
}

更多关于Flutter插件flutter_quash_sdk的使用方法介绍的实战教程也可以访问 https://www.itying.com/category-92-b0.html

回到顶部