Flutter性能监控与分析插件truesight_core的使用

Flutter性能监控与分析插件truesight_core的使用

特性

  • JSON处理
  • 与后端兼容的数据过滤类型
  • 将HTTP响应转换为各种格式

安装

要安装该包:

flutter pub add truesight_core

如何使用

JSON处理

该包定义了以下JSON数据类型:

  • JsonBoolean:用于bool类型
  • JsonDate:用于DateTime类型
  • JsonList:用于List<Object>类型
  • JsonNumber:用于num类型
  • JsonObject:用于Object类型
  • JsonString:用于String类型

模型定义

例如:

class User extends DataModel {
    //
    JsonBoolean isAdmin = JsonBoolean("isAdmin");

    JsonString username = JsonString("username");

    JsonDate dateOfBirth = JsonDate("dateOfBirth");
    //
}

使用:

JsonType fieldName = JsonType("jsonFieldName");

将对象转换为JSON和从JSON转换:

User.fromJSON(Map<String, dynamic> json); // 从JSON创建User对象

final Map<String, dynamic> json = User.toJSON(); // 转换为Dart Map

final String jsonString = User.toString(); // 转换为JSON字符串

高级过滤器

过滤器类型:

  • DateFilter:用于日期类型的字段
  • StringFilter:用于string类型的字段
  • NumberFilter:用于数值类型的字段
  • GuidFilter:用于Guid类型的键字段(主键或外键)
  • IdFilter:用于整数Id类型的键字段

过滤器类示例

class UserFilter extends DataFilter {
    StringFilter username = StringFilter();

    DateFilter dateOfBirth = DateFilter();

    // 默认字段

    int skip;

    int take;

    String? orderBy;

    OrderType? orderType;
}

排序类型

有两种排序类型:

OrderType.asc; // 升序

OrderType.desc; // 降序

HTTPRepository

仓库是一个包含调用后端控制器/API组对应API的方法的类。

创建仓库示例

[@singleton](/user/singleton) // 这是GetIt注解 => 使该类成为单例实例
class AccountRepository extends HttpRepository {
  // 这告诉仓库使用拦截器来转换每个请求
  [@override](/user/override)
  bool get useInterceptor => true;

  // 这是与`useInterceptor = true`一起使用的拦截器包装器
  [@override](/user/override)
  InterceptorsWrapper interceptorsWrapper = globalInterceptorsWrapper;

  // 基础URL,例如:https://example.com
  // 应使用`flutter_dotenv`配置apiBaseUrl,
  [@override](/user/override)
  String get baseUrl => dotenv.apiBaseUrl;

  AccountRepository() : super("api/prefix");

  Future<AppUser> login(String username, String password) {
    return post(
      url("login"),
      data: {
        "username": username,
        "password": password,
      },
    ).then(
      (Response response) => response.body<AppUser>(AppUser),
    );
  }

  Future<AppUser> getProfile() {
    return post(
      url("get"),
      data: {},
    ).then(
      (Response response) => response.body<AppUser>(AppUser),
    );
  }

  Future<Map<String, dynamic>> refreshToken() {
    return post(
      url("refresh-token"),
      data: {},
    ).then(
      (Response response) => response.data,
    );
  }
}

此文档概述了Truesight包在Dart和Flutter中的核心功能,包括其JSON处理能力、过滤类型以及处理HTTP响应的方法,并提供了安装和使用说明。

完整示例代码

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Truesight Core Example')),
        body: Center(
          child: Text('Hello, Truesight Core!'),
        ),
      ),
    );
  }
}

class User extends DataModel {
  JsonBoolean isAdmin = JsonBoolean("isAdmin");
  JsonString username = JsonString("username");
  JsonDate dateOfBirth = JsonDate("dateOfBirth");
}

class UserFilter extends DataFilter {
  StringFilter username = StringFilter();
  DateFilter dateOfBirth = DateFilter();
  int skip;
  int take;
  String? orderBy;
  OrderType? orderType;
}

[@singleton](/user/singleton)
class AccountRepository extends HttpRepository {
  [@override](/user/override)
  bool get useInterceptor => true;
  [@override](/user/override)
  InterceptorsWrapper interceptorsWrapper = globalInterceptorsWrapper;
  [@override](/user/override)
  String get baseUrl => dotenv.apiBaseUrl;

  AccountRepository() : super("api/prefix");

  Future<AppUser> login(String username, String password) {
    return post(
      url("login"),
      data: {
        "username": username,
        "password": password,
      },
    ).then(
      (Response response) => response.body<AppUser>(AppUser),
    );
  }

  Future<AppUser> getProfile() {
    return post(
      url("get"),
      data: {},
    ).then(
      (Response response) => response.body<AppUser>(AppUser),
    );
  }

  Future<Map<String, dynamic>> refreshToken() {
    return post(
      url("refresh-token"),
      data: {},
    ).then(
      (Response response) => response.data,
    );
  }
}

更多关于Flutter性能监控与分析插件truesight_core的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter性能监控与分析插件truesight_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用性能监控与分析插件truesight_core的代码案例。请注意,实际使用中可能需要根据truesight_core的最新版本和API文档进行调整。

1. 添加依赖

首先,在你的Flutter项目的pubspec.yaml文件中添加truesight_core依赖:

dependencies:
  flutter:
    sdk: flutter
  truesight_core: ^最新版本号  # 替换为实际的最新版本号

然后运行flutter pub get来安装依赖。

2. 初始化插件

在你的Flutter应用的入口文件(通常是main.dart)中初始化truesight_core插件。

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

void main() {
  // 初始化TrueSight Core
  TrueSightCore.instance.initialize(
    appKey: '你的AppKey', // 替换为你的TrueSight App Key
    appVersion: '1.0.0',  // 替换为你的应用版本
    enableLog: true      // 是否启用日志打印,生产环境建议关闭
  );

  runApp(MyApp());
}

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

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter TrueSight Demo'),
      ),
      body: Center(
        child: Text('Hello, TrueSight!'),
      ),
    );
  }
}

3. 使用性能监控功能

truesight_core插件提供了多种性能监控功能,如页面加载时间、网络请求监控等。以下是一些示例代码,展示如何使用这些功能。

页面加载时间监控

你可以在每个页面的initStatedispose方法中记录页面加载和销毁的时间。

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

class MonitoredPage extends StatefulWidget {
  @override
  _MonitoredPageState createState() => _MonitoredPageState();
}

class _MonitoredPageState extends State<MonitoredPage> {
  @override
  void initState() {
    super.initState();
    // 记录页面加载时间
    TrueSightCore.instance.trackPageStart('MonitoredPage');
  }

  @override
  void dispose() {
    // 记录页面结束时间
    TrueSightCore.instance.trackPageEnd('MonitoredPage');
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Monitored Page'),
      ),
      body: Center(
        child: Text('This page is monitored by TrueSight Core.'),
      ),
    );
  }
}

网络请求监控

你可以使用TrueSightCore提供的网络请求包装器来监控HTTP请求。

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

// 创建Dio实例
final Dio dio = Dio();

// 包装HTTP请求以进行监控
Future<Response> monitoredRequest(String url, Map<String, dynamic> params) async {
  try {
    // 开始监控网络请求
    TrueSightCore.instance.startNetworkRequest(
      url: url,
      method: 'GET',  // 替换为实际的请求方法
      params: params,
    );

    // 执行HTTP请求
    Response response = await dio.get(url, queryParameters: params);

    // 结束监控网络请求
    TrueSightCore.instance.endNetworkRequest(
      url: url,
      statusCode: response.statusCode,
      responseTime: response.requestOptions.responseTime,
    );

    return response;
  } catch (error) {
    // 如果发生错误,结束监控并记录错误信息
    TrueSightCore.instance.endNetworkRequest(
      url: url,
      statusCode: null,
      responseTime: null,
      error: error.toString(),
    );
    throw error;
  }
}

// 使用监控的网络请求
void fetchData() async {
  try {
    Response response = await monitoredRequest('https://api.example.com/data', {});
    print('Response data: ${response.data}');
  } catch (error) {
    print('Error fetching data: $error');
  }
}

4. 注意事项

  • 确保你已经正确配置了TrueSight平台,并获取了有效的App Key。
  • 在生产环境中,注意关闭不必要的日志打印,以保护用户隐私和数据安全。
  • 根据你的应用需求,选择性地使用TrueSight Core提供的各种性能监控功能。

以上是如何在Flutter项目中集成和使用truesight_core插件的基本步骤和代码案例。如果你需要更详细的功能和配置信息,请参考truesight_core的官方文档。

回到顶部