Flutter化学式结构式查看插件chemical_structural_formula_viewer的使用

Flutter化学式结构式查看插件chemical_structural_formula_viewer的使用

化学结构式查看器

这是一个用于在Flutter应用中展示化学结构式的插件。

特性

  • 支持CDXML和CML格式。
  • 目前界面较为简单,仅提供基础的展示功能。

UI 图像

开始使用

首先,在你的pubspec.yaml文件中添加该插件:

dependencies:
  chemical_structure_formula_viewer: ^0.0.1

然后运行flutter pub get来安装该插件。

使用方法

以下是一个完整的示例代码,展示了如何在应用中使用chemical_structure_formula_viewer插件:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:chemical_structural_formula_viewer/chemical_structural_formula_viewer.dart';
import 'package:file_picker/file_picker.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MainPage(),
    );
  }
}

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

  [@override](/user/override)
  State<MainPage> createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  StructurePage? page;
  List<String> files = [];

  void addData() async {
    // 打开文件选择器,允许用户选择CDXML或CML文件
    final result = await FilePicker.platform.pickFiles(
        allowedExtensions: ["cdxml", "cml"],
        type: FileType.custom,
        allowMultiple: true);

    if (result == null) return;

    // 获取选中的文件路径
    final pathes = result.files.map((e) => e.path).nonNulls;
    print(pathes.first);

    // 将文件路径添加到列表中,并加载第一个文件
    files.addAll(pathes);
    load(pathes.first);
    print("done");

    // 更新状态以刷新UI
    setState(() {});
  }

  void load(String path) {
    // 读取文件内容
    var xml = File(path).readAsStringSync();

    // 根据文件扩展名解析XML
    switch (path.split(".").last) {
      case "cdxml":
        page = parseCdxml(xml);
        break;
      case "cml":
        page = parseCml(xml);
        break;
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: Drawer(
        child: ListView.builder(
            itemCount: files.length,
            itemBuilder: (context, index) {
              return TextButton(
                  onPressed: () {
                    // 当用户点击侧边栏中的文件时,加载对应的文件
                    Navigator.pop(context);
                    load(files[index]);
                    setState(() {});
                  },
                  child: Text(files[index]));
            }),
      ),
      appBar: AppBar(
        title: const Text('化学结构式查看器'),
      ),
      body: InteractiveViewer(
        maxScale: 100,
        minScale: 0.1,
        child: StructureViewer(
          page: page,
        ),
      ),
      floatingActionButton: FloatingActionButton(onPressed: addData),
    );
  }
}

示例代码

以下是完整的示例代码,您可以直接复制并在您的项目中运行:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:chemical_structural_formula_viewer/chemical_structural_formula_viewer.dart';
import 'package:file_picker/file_picker.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MainPage(),
    );
  }
}

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

  [@override](/user/override)
  State<MainPage> createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  StructurePage? page;
  List<String> files = [];

  void addData() async {
    final result = await FilePicker.platform.pickFiles(
        allowedExtensions: ["cdxml", "cml"],
        type: FileType.custom,
        allowMultiple: true);

    if (result == null) return;

    final pathes = result.files.map((e) => e.path).nonNulls;
    print(pathes.first);
    files.addAll(pathes);
    load(pathes.first);
    print("done");
    setState(() {});
  }

  void load(String path) {
    var xml = File(path).readAsStringSync();
    switch (path.split(".").last) {
      case "cdxml":
        page = parseCdxml(xml);
        break;
      case "cml":
        page = parseCml(xml);
        break;
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      drawer: Drawer(
        child: ListView.builder(
            itemCount: files.length,
            itemBuilder: (context, index) {
              return TextButton(
                  onPressed: () {
                    Navigator.pop(context);
                    load(files[index]);
                    setState(() {});
                  },
                  child: Text(files[index]));
            }),
      ),
      appBar: AppBar(
        title: const Text('化学结构式查看器'),
      ),
      body: InteractiveViewer(
        maxScale: 100,
        minScale: 0.1,
        child: StructureViewer(
          page: page,
        ),
      ),
      floatingActionButton: FloatingActionButton(onPressed: addData),
    );
  }
}

更多关于Flutter化学式结构式查看插件chemical_structural_formula_viewer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter化学式结构式查看插件chemical_structural_formula_viewer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


chemical_structural_formula_viewer 是一个用于在 Flutter 应用中查看化学结构式的插件。它允许开发者在应用中嵌入化学结构式的查看器,方便用户查看和理解化学分子结构。

安装

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

dependencies:
  flutter:
    sdk: flutter
  chemical_structural_formula_viewer: ^版本号

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

基本用法

chemical_structural_formula_viewer 插件提供了一个 ChemicalStructuralFormulaViewer 小部件,你可以直接在你的 Flutter 应用中使用它来显示化学结构式。

示例代码

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('化学结构式查看器'),
        ),
        body: Center(
          child: ChemicalStructuralFormulaViewer(
            formula: 'C6H6', // 化学式
            width: 300, // 宽度
            height: 300, // 高度
          ),
        ),
      ),
    );
  }
}
回到顶部