Flutter模拟数据生成插件geiger_dummy_data的使用

Flutter模拟数据生成插件geiger_dummy_data的使用

作者

  • Nosa Daniel Ahanor @FHNW

GEIGER DUMMY DATA

这个仓库包含了一些类,这些类提供了方法来轻松地从Geiger Indicator文档中提供的节点路径获取和设置数据。

特性

  • 可以接收特定节点值路径的json对象形式的数据。
  • 提供序列化和反序列化的功能。
  • 可以根据在Geiger Indicator文档中定义的节点路径设置数据。
  • 自动生成userId、deviceId、threatId、recommendationId、roleId等的uuid。
  • 提供数据模型访问。

开始使用

在终端中运行以下命令,将该包添加到你的pubspec.yaml文件中:

flutter pub add geiger_dummy_data

对于Flutter用户额外的信息

还需要在终端中运行以下命令,将该包添加到你的pubspec.yaml文件中:

flutter pub add sqlite3_flutter_libs
flutter pub add sqflite

使用说明

这是一个简短且有用的示例,供用户参考。更多详细信息请查看/example文件夹。

import "package:geiger_dummy_data/geiger_dummy_data.dart";
import 'package:geiger_localstorage/geiger_localstorage.dart';

//仅限flutter用户:取消注释以下导入行
// import 'package:path/path.dart';
// import 'package:sqflite/sqflite.dart';

void main() {

  //仅限flutter用户
  //初始化数据库
  void _iniDatabase() async {
    String dbPath = join(await getDatabasesPath(), 'database.db');
    StorageController _storageController = GenericController('Example', SqliteMapper(dbPath));
  }
  
  //dart用户
  //初始化数据库
  StorageController _storageController =
  GenericController("Example", SqliteMapper("./database.db"));

  //从:Global:threats获取威胁信息
  GeigerThreat _geigerThreat = GeigerThreat(_storageController);

  //存储和检索来自:Global:threats的威胁信息
  //返回一个包含threatId和名称的Threat对象列表
  List<Threat> getThreatInfo() {
    try {
      return _geigerThreat.getThreats;
    } catch (e) {
      //威胁Json格式 '[{"threatId": "t1", "name":"phishing"},{"threatId":"t2","name":"malware"}]'
      //Threat将您的json转换为Threat对象
      // threatId是可选的:自动生成。
      List<Threat> threatData =
      Threat.convertFromJson('[{"name":"phishing"},{"name":"malware"}]');

      //存储威胁到:Global:threats:
      _geigerThreat.setGlobalThreatsNode = threatData;
      return _geigerThreat.getThreats;
    }
  }

  // 在终端显示
  print(getThreatInfo());
}

检查test/geiger_dummy_data_test文件夹获得更多演示。

待办事项

  • 提供更多的功能来设置数据并遵循以下节点路径:
    • :EnterPrise:users
    • :Global:profile
    • :Local:plugin
    • :Users:userId:data:metrics
    • :Device:deviceId:data:metrics
  • 提供更多的数据模型
  • 文档

此项目欢迎贡献和改进


示例代码

import 'package:geiger_api/geiger_api.dart';
import 'package:geiger_localstorage/geiger_localstorage.dart';

void main() async {
  final GeigerApi? localDummyData =
      await getGeigerApi('', 'dummyData', Declaration.doNotShareData);
  //SimpleEventListner masterListener;
  await StorageMapper.initDatabaseExpander();
  final StorageController? _masterController = localDummyData!.getStorage();

  //Make sure we start off with a fresh DB
  await _masterController!.zap();

  Future<void> setGlobalThreatsNode() async {
    List<String> threats = ["phishing", "malware"];
    List<String> threatid = ["t1", "t2"];
    try {
      for (int i = 0; i < threats.length; i++) {
        Node _node =
            await _masterController.get(':Global:threats:${threatid[i]}');
        //创建一个NodeValue
        NodeValue threatNodeValueName = NodeValueImpl("name", threats[i]);
        await _node.addOrUpdateValue(threatNodeValueName);
        await _masterController.update(_node);
      }
    } on StorageException {
      //log(":Global:threats not found");
      Node threatsNode = NodeImpl(":Global:threats", "nosa");
      await _masterController.addOrUpdate(threatsNode);

      for (int i = 0; i < threats.length; i++) {
        Node threatIdNode = NodeImpl(":Global:threats:${threatid[i]}", "nosa");
        //创建:Global:threats:$threatId
        await _masterController.addOrUpdate(threatIdNode);
        //创建一个NodeValue
        NodeValue threatNodeValueName = NodeValueImpl("name", threats[i]);
        await threatIdNode.addOrUpdateValue(threatNodeValueName);
        await _masterController.update(threatIdNode);
      }
    }
  }

  Future<List<String>> getThreats({String language: "en"}) async {
    List<String> t = [];
    try {
      Node _node = await _masterController.get(":Global:threats");

      //return _node!.getChildNodesCsv();
      for (String threatId
          in await _node.getChildNodesCsv().then((value) => value.split(','))) {
        Node threatNode =
            await _masterController.get(":Global:threats:$threatId");

        t.add(await threatNode
            .getValue("name")
            .then((value) => value!.getValue(language)!));
      }
    } on StorageException {
      rethrow;
    }
    return t;
  }

  Future<List<String>> getListThreat() async {
    await setGlobalThreatsNode();
    return await getThreats();
  }

  print("Global Threats: ${await getListThreat()}");
}

更多关于Flutter模拟数据生成插件geiger_dummy_data的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter模拟数据生成插件geiger_dummy_data的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


geiger_dummy_data 是一个用于 Flutter 的插件,可以帮助开发者生成模拟数据。这对于开发和测试应用程序非常有用,尤其是在没有真实数据源的情况下。以下是如何使用 geiger_dummy_data 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 geiger_dummy_data 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  geiger_dummy_data: ^0.0.1  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 geiger_dummy_data 插件:

import 'package:geiger_dummy_data/geiger_dummy_data.dart';

3. 生成模拟数据

geiger_dummy_data 提供了多种方法来生成不同类型的模拟数据。以下是一些常见的用法示例:

生成随机姓名

String randomName = DummyData.name();
print(randomName);  // 输出例如 "John Doe"

生成随机地址

String randomAddress = DummyData.address();
print(randomAddress);  // 输出例如 "123 Main St, Springfield, IL"

生成随机电子邮件

String randomEmail = DummyData.email();
print(randomEmail);  // 输出例如 "john.doe@example.com"

生成随机电话号码

String randomPhone = DummyData.phoneNumber();
print(randomPhone);  // 输出例如 "+1-555-123-4567"

生成随机日期

DateTime randomDate = DummyData.dateTime();
print(randomDate);  // 输出例如 "2023-10-05 14:30:00.000"

生成随机文本

String randomText = DummyData.loremIpsum(words: 10);
print(randomText);  // 输出例如 "Lorem ipsum dolor sit amet, consectetur adipiscing elit."

4. 自定义数据生成

geiger_dummy_data 还允许你自定义数据生成的方式。例如,你可以通过传递参数来生成特定范围内的数字或特定格式的日期。

生成特定范围内的数字

int randomNumber = DummyData.number(min: 1, max: 100);
print(randomNumber);  // 输出例如 42

生成特定格式的日期

DateTime specificDate = DummyData.dateTime(year: 2023, month: 12, day: 25);
print(specificDate);  // 输出例如 "2023-12-25 00:00:00.000"

5. 使用生成的模拟数据

生成的模拟数据可以直接用于你的应用程序中,例如填充 UI 控件、模拟 API 响应或进行单元测试。

class UserProfile {
  final String name;
  final String email;
  final String phone;

  UserProfile({required this.name, required this.email, required this.phone});
}

void main() {
  UserProfile dummyUser = UserProfile(
    name: DummyData.name(),
    email: DummyData.email(),
    phone: DummyData.phoneNumber(),
  );

  print('Name: ${dummyUser.name}');
  print('Email: ${dummyUser.email}');
  print('Phone: ${dummyUser.phone}');
}
回到顶部