Flutter屏幕调试插件onscreen_ui_debugger的使用

Flutter屏幕调试插件onscreen_ui_debugger的使用

特性

Onscreen Ui Debugger可以在几行简单的代码中创建屏幕上的日志。

开始使用

pubspec.yaml 文件中添加该包,并检查以下代码。

使用方法

将以下代码添加到您的 MaterialApp 中。

builder: (context, child) {
    return Stack(
        children: [
            child ?? Container(),
            Overlay(
                initialEntries: [
                    OverlayEntry(
                        builder: (context) => const DebugWidget(),
                    ),
                ],
            ),
        ],
    );
},

在添加上述代码后,您的 MaterialApp 应该如下所示:

MaterialApp(
    title: 'Flutter Demo',
    theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
    ),
    //----------更改开始于此----------
    builder: (context, child) {
        return Stack(
            children: [
                child ?? Container(),
                Overlay(
                    initialEntries: [
                        OverlayEntry(
                            builder: (context) => const DebugWidget(),
                        ),
                    ],
                ),
            ],
        );
    },
    //----------更改结束于此----------
    home: const MyHomePage(title: 'Flutter Demo Home Page'),
)

日志格式

以下是记录日志的格式:

DebugLog debugLog = DebugLog(logTitle: "登录 REST API", dateTime: DateTime.now());
debugLog.logStrings.add(DebugLogString(logTitle: "登录请求", logsDescription: "{mobile:'9496699210'}"));
debugLog.logStrings.add(DebugLogString(logTitle: "响应", logsDescription: '{message:'success'}'));
debugLog.setAsBlue(); // 设置标题颜色为蓝色
DebugUtils.debugLogBloc.addDebugLog(debugLog);

额外信息

如有更多问题,请发送邮件至 nikhilishwar2@gmail.com。我们欢迎更多的贡献者加入此项目。


完整示例代码

import 'package:flutter/material.dart';
import 'package:onscreen_ui_debugger/debug_helper/debug_log_bloc.dart';
import 'package:onscreen_ui_debugger/debug_helper/debug_utilities.dart';
import 'package:onscreen_ui_debugger/debug_helper/debug_widget.dart';

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

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

  // 这个小部件是你的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      builder: (context, child) {
        return Stack(
          children: [
            child ?? Container(),
            Overlay(
              initialEntries: [
                OverlayEntry(
                  builder: (context) => const DebugWidget(),
                ),
              ],
            ),
          ],
        );
      },
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      DebugLog debugLog =
          DebugLog(logTitle: "计数器日志", dateTime: DateTime.now());
      debugLog.logStrings.add(DebugLogString(
          logTitle: "递增前", logsDescription: _counter.toString()));
      _counter++;
      debugLog.logStrings.add(DebugLogString(
          logTitle: "递增后", logsDescription: _counter.toString()));
      (_counter % 2 == 0) ? debugLog.setAsSad() : debugLog.setAsBlue();
      DebugUtils.debugLogBloc.addDebugLog(debugLog);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '你已经点击了按钮这么多次:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ), // 这个逗号使自动格式化更美观。
    );
  }
}

更多关于Flutter屏幕调试插件onscreen_ui_debugger的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕调试插件onscreen_ui_debugger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


onscreen_ui_debugger 是一个用于 Flutter 的屏幕调试插件,它可以帮助开发者在应用运行时直接在屏幕上显示调试信息,比如层次结构、布局边界、渲染性能等。这个工具对于快速定位 UI 问题和优化布局非常有帮助。

安装 onscreen_ui_debugger

要使用 onscreen_ui_debugger,首先需要将其添加到你的 Flutter 项目中。

  1. pubspec.yaml 中添加依赖

    dependencies:
      flutter:
        sdk: flutter
      onscreen_ui_debugger: ^1.0.0  # 请使用最新的版本号
    
  2. 运行 flutter pub get 来安装依赖。

使用 onscreen_ui_debugger

  1. 导入插件

    在你的 Dart 文件中导入 onscreen_ui_debugger

    import 'package:onscreen_ui_debugger/onscreen_ui_debugger.dart';
    
  2. 启用调试工具

    你可以通过调用 OnScreenDebugger.enable() 来启用调试工具。通常,你可以在 main 函数中调用它:

    void main() {
      OnScreenDebugger.enable();
      runApp(MyApp());
    }
    
  3. 查看调试信息

    启用调试工具后,你可以通过以下方式来查看各种调试信息:

    • 显示 Widget 边界:在屏幕上显示每个 Widget 的边界,帮助你了解布局结构。
    • 显示图层信息:显示每个 Widget 的图层信息,帮助识别重绘和布局问题。
    • 显示性能信息:在屏幕上显示应用的性能数据,如帧率等,帮助优化应用性能。

    你可以通过以下方法来控制调试信息的显示:

    OnScreenDebugger.showWidgetBounds(true);  // 显示 Widget 边界
    OnScreenDebugger.showLayerInfo(true);     // 显示图层信息
    OnScreenDebugger.showPerformance(true);   // 显示性能信息
    
  4. 自定义调试信息

    你还可以通过 OnScreenDebugger 在屏幕上显示自定义的调试信息:

    OnScreenDebugger.addMessage('这是一个自定义的调试信息');
    
  5. 禁用调试工具

    如果你需要禁用它,可以调用 OnScreenDebugger.disable()

    OnScreenDebugger.disable();
    

注意事项

  • onscreen_ui_debugger 主要用于调试和开发阶段,不要在发布模式(Release Mode)下使用它,因为它会影响应用的性能。
  • 调试信息可能会覆盖部分 UI,因此在调试完成后,记得禁用调试工具。

示例代码

以下是一个简单的示例,展示如何在 Flutter 应用中使用 onscreen_ui_debugger

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

void main() {
  OnScreenDebugger.enable();
  OnScreenDebugger.showWidgetBounds(true);
  OnScreenDebugger.showPerformance(true);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('OnScreen UI Debugger Example'),
        ),
        body: Center(
          child: Text('Hello, Flutter!'),
        ),
      ),
    );
  }
}
回到顶部