Flutter开发工具集成插件devtools_app_shared的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter开发工具集成插件devtools_app_shared的使用

devtools_app_shared 是一个包含了Dart和Flutter DevTools中可以共享的UI、实用工具和服务组件的包。它可以被DevTools、DevTools扩展和其他需要相同逻辑或样式的工具表面使用。

使用方法

添加依赖

首先,将该包作为依赖添加到你的 pubspec.yaml 文件中:

dependencies:
  devtools_app_shared: ^latest_version

然后运行以下命令来获取依赖:

$ flutter pub add devtools_app_shared

导入所需的库

根据需要导入相应的组件库:

import 'package:devtools_app_shared/service.dart';
import 'package:devtools_app_shared/service_extensions.dart' as extensions;
import 'package:devtools_app_shared/ui.dart';
import 'package:devtools_app_shared/utils.dart';

示例代码

1. 设置和访问全局变量

import 'package:devtools_app_shared/utils.dart';

class MyCoolClass {
  void foo() {
    print('Hello from MyCoolClass');
  }
}

MyCoolClass get coolClass => globals[MyCoolClass] as MyCoolClass;

void main() {
  // 创建一个全局可访问的变量(`globals[ServiceManager]`);
  setGlobal(MyCoolClass, MyCoolClass());
  coolClass.foo();
}

2. 使用实用工具如 AutoDisposeMixin

AutoDisposeMixin 支持在 StatefulWidget 生命周期中自动处理监听器。

import 'package:flutter/material.dart';
import 'package:devtools_app_shared/utils.dart';

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

  @override
  State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> with AutoDisposeMixin {
  var foo = 'hi';

  @override
  void initState() {
    super.initState();
    addAutoDisposeListener(ValueNotifier(0), () {
      setState(() {
        foo = '$foo hi';
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Text(foo);
  }
}

3. 访问共享的UI组件和样式

import 'package:flutter/material.dart';
import 'package:devtools_app_shared/ui.dart';

class ExampleWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return RoundedOutlinedBorder(
      child: Column(
        children: [
          AreaPaneHeader(
            roundedTopBorder: false,
            includeTopBorder: false,
            title: Text('This is a section header'),
          ),
          Expanded(
            child: Center(
              child: Text(
                'Foo',
                style: Theme.of(context).textTheme.bodyText1, // 使用主题中的样式
              ),
            ),
          ),
        ],
      ),
    );
  }
}

4. VM服务管理,包括访问隔离和扩展

import 'package:devtools_app_shared/service.dart';
import 'package:devtools_app_shared/service_extensions.dart' as extensions;
import 'package:devtools_shared/service.dart';
import 'dart:async';

void main() async {
  final serviceManager = ServiceManager();

  // 监听连接更新
  serviceManager.connectedState.addListener(() {
    if (serviceManager.connectedState.value.connected) {
      print('Manager connected to VM service');
    } else {
      print('Manager not connected to VM service');
    }
  });

  final finishedCompleter = Completer<void>();
  final vmService = await connect<VmService>(
    uri: Uri.parse('ws://localhost:8181/ws'),
    finishedCompleter: finishedCompleter,
    serviceFactory: VmService.defaultFactory,
  );

  await serviceManager.vmServiceOpened(
    vmService,
    onClosed: finishedCompleter.future,
  );

  // 获取服务扩展状态
  final ValueListenable<ServiceExtensionState> performanceOverlayEnabled =
      serviceManager.manager.serviceExtensionManager.getServiceExtensionState(
        extensions.performanceOverlay.extension,
      );

  // 设置服务扩展状态
  await serviceManager.manager.serviceExtensionManager.setServiceExtensionState(
    extensions.performanceOverlay.extension,
    enabled: true,
    value: true,
  );

  // 访问隔离
  final myIsolate = serviceManager.isolateManager.mainIsolate.value;

  // 等等...
}

问题反馈

此包是更大的 flutter/devtools 项目的一部分。请在那里报告任何问题或反馈。

支持的Flutter版本

此包遵循 flutter/packages 的支持Flutter版本策略,即支持最新的 stable 版本以及当前的 master 版本。实际上,这个包通常也支持较旧的版本,除非有特定需求,如使用新的DevTools或Flutter功能,才会更新最低版本要求。


更多关于Flutter开发工具集成插件devtools_app_shared的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter开发工具集成插件devtools_app_shared的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,devtools_app_shared 插件是用于与 Flutter DevTools 集成的共享代码库。虽然它本身不是一个直接面向开发者的插件(开发者更常使用的是 flutter_devtools),但了解如何在项目中集成和使用相关的 DevTools 功能对于调试和优化应用非常有帮助。

下面是一个如何在 Flutter 项目中集成并使用 DevTools 的示例,虽然不直接涉及 devtools_app_shared(因为它是内部使用的库),但会展示如何通过 DevTools 提升开发效率。

1. 安装 Flutter DevTools

首先,确保你已经安装了 Flutter DevTools。你可以通过以下命令全局安装它(如果还未安装):

flutter pub global activate flutter_devtools

2. 启动 Flutter 应用

在你的 Flutter 项目根目录下,启动你的 Flutter 应用:

flutter run

3. 启动 Flutter DevTools

在另一个终端窗口中,启动 Flutter DevTools:

flutter pub global run flutter_devtools

这将打开 DevTools 在你的默认浏览器中。

4. 连接到你的 Flutter 应用

在 DevTools 界面中,你会看到一个“Connect to a Flutter application”的按钮。点击它,然后选择你正在运行的 Flutter 应用。这通常涉及到复制并粘贴从 Flutter 终端输出的一个调试连接 URI。

5. 使用 DevTools 的各种功能

一旦连接成功,你就可以使用 DevTools 提供的各种强大功能了,包括但不限于:

  • 性能分析(Performance):查看应用的帧率和 CPU 使用情况,识别性能瓶颈。
  • 内存分析(Memory):监控应用的内存使用情况,查找内存泄漏。
  • Widget 检查器(Widget Inspector):实时查看和修改应用的 UI 树。
  • 网络日志(Network):查看应用的网络请求和响应。

代码示例:性能分析

虽然 DevTools 的使用主要是图形界面操作,但这里提供一个简单的 Flutter 应用示例,并说明如何使用 DevTools 的性能分析功能。

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter DevTools Example'),
        ),
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: List.generate(100, (index) {
        return GestureDetector(
          onTap: () {
            // Simulate some work
            Future.delayed(Duration(seconds: 1), () {});
          },
          child: Container(
            height: 50,
            width: double.infinity,
            color: Colors.blue.shade100,
            child: Center(child: Text('Item $index')),
          ),
        );
      }),
    );
  }
}

在这个简单的应用中,我们生成了一个包含 100 个可点击项目的列表。当你点击这些项目时,它们会模拟执行一些耗时操作(通过 Future.delayed)。

使用 DevTools 分析性能

  1. 运行你的 Flutter 应用。
  2. 启动 Flutter DevTools 并连接到你的应用。
  3. 在 DevTools 中,选择“Performance”标签。
  4. 点击红色的录制按钮开始性能录制。
  5. 在你的应用中快速点击几个项目,模拟用户交互。
  6. 点击停止按钮结束录制。

你将看到一个详细的性能分析报告,包括每一帧的 CPU 使用情况、渲染时间等信息,帮助你识别和优化性能瓶颈。

通过这种方式,flutter_devtools 和其背后的 devtools_app_shared 等库共同为 Flutter 开发者提供了一个强大的工具集,用于调试、优化和理解他们的应用。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!