Flutter代码检查与分析插件gits_inspector的使用

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

Flutter代码检查与分析插件gits_inspector的使用

插件介绍

Gitss Inspector 是一个简单的用于 Gitss HTTP 检查器的内嵌应用。 它拦截并保存应用程序中的所有 HTTP 请求和响应,并提供了一个 UI 用于查看这些内容。它受到了 Alice、Chuck 和 Chucker 的的启发。

支持功能

  • 每个 HTTP 调用的详细日志(HTTP 请求,HTTP 响应)
  • 观察 HTTP 调用的 UI
  • 将 HTTP 调用保存到 Sqflite
  • HTTP 调用通知
  • 支持 Dart 中最常用的 HTTP 客户端
  • 摇晃以打开观察器
  • HTTP 调用搜索

使用方法

// 注册 GitsInspector
locator.registerLazySingleton(
    () => GitsInspector(
      showNotification: true, // 默认为 true
      showInspectorOnShake: true, // 默认为 true
      saveInspectorToLocal: true, // 默认为 true
      notificationIcon: '[@mipmap](/user/mipmap)/ic_launcher', // 默认为 '[@mipmap](/user/mipmap)/ic_launcher' 只适用于 Android
    ),
);

// 注册 GitssHttp 并激活观察器
locator.registerLazySingleton(
    () => GitssHttp(
      timeout: 30000,
      showLog: true,
      gitssInspector: locator(), // 添加此行以激活观察器在 Gitss Http 中
    ),
);

为了帮助导航到 gitss inspector 页面,需要通过 setNavigatorState 方法设置 navigator 状态,推荐在启动页面如 SplashPage 上进行。

class SplashPage extends StatefulWidget {
  const SplashPage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<SplashPage> createState() => _SplashPageState();
}

class _SplashPageState extends State<SplashPage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    locator<GitsInspector>().setNavigatorState(N Navigator.of(context)); // 添加此行以从本地通知或摇晃中导航
    ...
  }
  ...
}

示例代码

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

final inspector = GitsInspector(
  notificationIcon: '[@mipmap](/user/mipmap)/ic_launcher',
  saveInspectorToLocal: true,
  showInspectorOnShake: true,
  showNotification: true,
);

final http = GitssHttp(
  gitssInspector: inspector,
);

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      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](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    inspector.setNavigatorState(Navigator.of(context));
  }

  bool isLoading = false;
  String? error;
  Response? response;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'Send HTTP call',
            ),
            if (isLoading)
              const CircularProgressIndicator()
            else if (response != null || error != null)
              Text(
                error ?? response?.body ?? '',
                style: Theme.of(context).textTheme.bodySmall,
              ),
            const SizedBox(height: 8),
            ElevatedButton(
              onPressed: () async {
                try {
                  final response = await http.get(
                    Uri.parse('https://jsonplaceholder.typicode.com/users/1'),
                  );
                  setState(() {
                    this.response = response;
                    error = null;
                  });
                } on GitsException catch (e) {
                  setState(() {
                    error = e.toGitsFailure().toString();
                  });
                } catch (e) {
                  setState(() {
                    error = e.toString();
                  });
                }
              },
              child: const Text('Send HTTP'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter代码检查与分析插件gits_inspector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter代码检查与分析插件gits_inspector的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用gits_inspector插件进行代码检查与分析的一个示例。请注意,gits_inspector这个名称听起来像是一个特定于Git代码仓库检查的插件,但在Flutter和Dart的官方插件库中并没有找到这个确切名称的插件。因此,我将以一个假设的、类似功能的插件为例,展示如何在Flutter项目中集成和使用代码检查与分析工具。在实际应用中,你可能需要找到并使用一个具体存在的插件,如dart_code_metricsflutter_lints等。

假设我们有一个名为code_inspector的插件,它提供了代码检查和分析功能。以下是如何在Flutter项目中集成和使用这个插件的示例代码和步骤:

1. 添加依赖

首先,在你的pubspec.yaml文件中添加code_inspector依赖:

dependencies:
  flutter:
    sdk: flutter
  code_inspector: ^1.0.0 # 假设的版本号

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

2. 配置分析规则

通常,代码检查和分析工具允许你配置分析规则。你可以在项目的根目录下创建一个.analysis_options.yaml文件,并添加你的规则配置。例如:

include: package:flutter_lints/flutter.yaml

linter:
  rules:
    avoid_empty_else: true
    avoid_print: true
    # 添加更多规则...

3. 使用插件进行代码检查

在你的Flutter项目中,你可以编写一个脚本来运行code_inspector进行代码检查。不过,由于code_inspector是一个假设的插件,这里我们将以命令行方式运行Dart的分析工具作为替代示例。在实际应用中,你应该查阅code_inspector的文档来了解如何使用其提供的API或命令行工具。

假设你有一个脚本analyze.dart,它使用Dart的分析API来检查代码:

import 'dart:io';
import 'package:analyzer/dart_analysis_server/protocol/protocol_generated.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/services/correction/dart_fix.dart';

void main(List<String> arguments) {
  var sdkPath = Platform.environment['DART_SDK'];
  var workspace = Directory.current;
  var contextCollection = AnalysisContextCollectionImpl(
    includedPaths: [workspace.path],
    sdkPath: sdkPath,
    resourceProvider: PhysicalFileSystem(),
  );

  contextCollection.contextFor(workspace.path).analysisOptions = AnalysisOptionsImpl()
    ..lintRules = {
      'avoid_empty_else': true,
      'avoid_print': true,
      // 添加更多规则...
    };

  var results = <AnalysisError>[];
  contextCollection.contextFor(workspace.path).computeErrors().listen((errors) {
    results.addAll(errors);
  }).onDone(() {
    results.forEach((error) {
      print('Error at ${error.source.fullName}: ${error.message}');
    });
  });
}

注意:上面的代码是一个简化的示例,实际上使用Dart的分析API要复杂得多,并且可能需要处理异步操作、错误处理等。在实际应用中,你可能需要查阅Dart分析器的文档来编写一个完整的脚本。

对于code_inspector这样的插件,你应该查阅其官方文档来了解如何使用其提供的API或命令行工具。

4. 集成到CI/CD流程

最后,你可以将这个代码检查步骤集成到你的持续集成/持续部署(CI/CD)流程中,以确保在每次代码提交或合并时都进行代码检查。这通常涉及到在你的CI/CD工具(如GitHub Actions、GitLab CI、Jenkins等)中配置一个步骤来运行你的分析脚本或命令。

由于code_inspector是一个假设的插件,上述示例中的代码和步骤可能需要根据你的实际插件进行调整。在实际应用中,你应该查阅你选择的代码检查和分析工具的官方文档来了解如何集成和使用它。

回到顶部