Flutter内存注解插件dart_mem_annotation的使用

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

Flutter内存注解插件dart_mem_annotation的使用

Dart Model Entity Mapper (MEM) 注解

PubVersion PubPoints build Latest dartdocs

Pub

android ios ios linux windows mac-os

Mem Annotation Generator 是一个代码生成插件,用于基于注解生成模型、实体和映射。此包旨在防止逐个添加额外的代码来创建模型、实体和映射。你可以将其用于模型、API 和 JSON。

目录

入门

pubspec.yaml 文件中添加依赖:

dependencies:
  dart_mem_annotation: ^latest

  # 如果需要 Freezed 代码生成:
  freezed: ^2.5.7
  json_annotation: ^4.9.0

dev_dependencies:
  build_runner: ^latest
  dart_mem_annotation_generator: ^latest

  # 如果需要 Freezed 代码生成:
  freezed_annotation: ^2.4.4
  json_serializable: ^6.8.0

生成库链接在 pub.dev 上:

Pub

通过以下命令获取更改:

flutter pub get

或者

dart pub get

使用

导入注解:

import 'package:dart_mem_annotation/annotation.dart';

对于生成的代码,需要在 Dart 文件顶部提供 part 指令:

part 'some_file.mem.dart';

在所需类的顶部添加所需的注解,并设置所需的选项。内嵌类也是支持的。

例如:

part 'some_file.mem.dart';

[@Mem](/user/Mem).all()
class SomeClass {
  SampleEnum? sampleEnum;
  String? name;
  String? description;
  InnerSample? innerClass;
  List<String>? sampleList;
  List<InnerSample>? innerSampleList;
}

[@Mem](/user/Mem).all(withFreezed: true)
class SomeInnerClass {
  const InnerSample({this.name, this.description});
  final String? name;
  final String? description;
}

注意

重要的是,如果 Freezed 类包含内嵌类,则所有内嵌类都将生成模型、实体和映射;如果不这样设置,类本身将用于主类。

然后你需要运行 build_runner 来生成代码并创建相关文件。可以使用以下命令:

dart pub run build_runner build --delete-conflicting-outputs

所有文件将以 *.mem.dart 格式生成。

你可以在 /example 中检查更完整的示例,更多细节和进一步信息。

选项

你可以在 @Annotation 中设置一些注解及其选项。 可用的注解:

  • [@Mem](/user/Mem).all:将生成所有选项,包括模式、实体和映射。

可用的选项:

  • [@Mem](/user/Mem)
    • as:更改依赖项中的页面名称,并使用另一个名称。
    • withFreezed:所有生成的类将装饰 @freezed 注解,并且所有 Freezed 类将在 Mem 代码生成后生成。
    • extendsBaseClass(不推荐) - 生成的类将扩展原始注解类,而没有此选项,所有类将是独立的。

注意

所有带有 Freezed 注解的类(如果标记 withFreezed 为真)应该提供自己的部分。

part '*filename*.mem.dart'; // For Meme Generator
part '*filename*.freezed.dart'; // For Freezed
part '*filename*.g.dart'; // For JsonSerializable with Freezed

文档

build

关于作者

Resam Taghipour

Pub account Pub Pub

包和依赖项

Pub Pub Pub Pub

许可证

该项目受 'BSD-3-Clause' 许可证保护 - 详情请参阅 LICENSE。

Pub


示例代码

import 'package:flutter/material.dart';

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:dart_mem_annotation/annotation.dart';
import 'package:json_annotation/json_annotation.dart';

part 'main.mem.dart';
part 'main.freezed.dart';
part 'main.g.dart';

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

enum SampleEnum {
  isEnum,
  notEnum,
}

[@Mem](/user/Mem).all()
class Sample {
  SampleEnum? sampleEnum;
  String? name;
  String? description;
  InnerSample? innerClass;
  List<String>? sampleList;
  List<InnerSample>? innerSampleList;
}

[@Mem](/user/Mem).all(withFreezed: true)
class InnerSample {
  const InnerSample({this.name, this.description});
  final String? name;
  final String? description;
}

class MainApp extends StatelessWidget {
  const MainApp({super.key});
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'App Name',
    );
  }
}

更多关于Flutter内存注解插件dart_mem_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter内存注解插件dart_mem_annotation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,dart_mem_annotation 是一个用于内存管理和性能优化的插件,它允许开发者通过注解(annotations)的方式标记 Dart 对象,从而帮助监控和分析内存使用情况。虽然这个库的具体实现和API可能会随着版本更新而变化,但我可以提供一个基础的使用示例,以展示如何在Flutter项目中使用dart_mem_annotation进行内存注解。

首先,确保你已经在pubspec.yaml文件中添加了dart_mem_annotation依赖:

dependencies:
  flutter:
    sdk: flutter
  dart_mem_annotation: ^x.y.z  # 替换为最新版本号

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

接下来,假设dart_mem_annotation提供了[@MemoryHeavy](/user/MemoryHeavy)[@MemoryLight](/user/MemoryLight)两个注解(具体注解名称和功能可能有所不同,请查阅官方文档),我们可以这样使用它们:

  1. 导入注解库

    在你的Dart文件中,首先导入注解库:

    import 'package:dart_mem_annotation/dart_mem_annotation.dart';
    
  2. 使用注解

    使用注解来标记你的类或方法。例如:

    [@MemoryHeavy](/user/MemoryHeavy)()
    class HeavyObject {
      // 假设这个对象消耗了大量内存
      List<int> largeList = List.filled(1000000, 0);
    }
    
    [@MemoryLight](/user/MemoryLight)()
    class LightObject {
      // 假设这个对象消耗了较少的内存
      String name;
    
      LightObject(this.name);
    }
    
  3. 在运行时分析内存(假设插件提供了相关API)

    虽然dart_mem_annotation本身可能不提供直接的内存分析工具,但它可以与Flutter的DevTools或其他性能分析工具结合使用,来帮助识别内存使用模式。以下是一个假设性的代码示例,展示如何可能地利用这些注解进行内存分析(具体实现依赖于插件的实际API):

    void main() {
      // 初始化Flutter应用
      runApp(MyApp());
    
      // 假设dart_mem_annotation提供了某种方式来注册和分析注解对象
      // 这是一个假设性的API调用,具体实现需参考插件文档
      MemoryAnalyzer.registerAndAnalyzeAnnotatedObjects();
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Flutter Memory Annotation Example'),
            ),
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Text('Check DevTools for memory analysis'),
                  ElevatedButton(
                    onPressed: () {
                      // 创建大量内存消耗对象
                      List<HeavyObject> heavyList = List.filled(100, HeavyObject());
    
                      // 创建少量内存消耗对象
                      List<LightObject> lightList = List.filled(100, LightObject('Light'));
                    },
                    child: Text('Create Objects'),
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    

注意:上述代码中的MemoryAnalyzer.registerAndAnalyzeAnnotatedObjects()是一个假设性的方法调用,用于说明可能的分析过程。实际使用时,你需要查阅dart_mem_annotation的官方文档,了解如何正确地注册和分析注解对象。

由于dart_mem_annotation的具体实现和API可能有所不同,建议直接查阅其官方文档或源代码,以获取最准确和最新的使用指南。

回到顶部