Flutter命令行或GUI界面切换插件commandline_or_gui_windows的使用

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

Flutter命令行或GUI界面切换插件 commandline_or_gui_windows 的使用

概述

commandline_or_gui_windows 插件允许你在Flutter Windows应用中根据是否有命令行参数来选择运行在命令行模式或GUI模式。此插件利用了Dart的io.dart库访问stdoutstderr

设置步骤

  1. 导入包:在pubspec.yaml文件中添加依赖并运行flutter pub get

    dependencies:
      commandline_or_gui_windows: ^2.1.0
    
  2. 打开PowerShell,导航到项目的根目录(通常是你pubspec.yaml所在的目录)。

  3. 运行初始化脚本

    flutter pub run commandline_or_gui_windows:create
    

    如果需要更多细节,可以运行:

    flutter pub run commandline_or_gui_windows:create --help
    

恢复选项

选项1 - 仅恢复修改过的C++文件

  1. 打开PowerShell并导航到项目的根目录。
  2. 运行以下命令:
    flutter pub run commandline_or_gui_windows:restore
    
    需要更多信息时,运行:
    flutter pub run commandline_or_gui_windows:restore --help
    

选项2 - 恢复所有C++文件

  1. 删除Windows文件夹:C:\project_path\windows\
  2. 打开PowerShell并导航到项目的根目录。
  3. 运行以下命令重建项目:
    flutter create .
    

示例代码

示例1 - 命令行模式

import 'package:commandline_or_gui_windows/commandline_or_gui_windows.dart';
import 'dart:io';

void main(List<String> args) {
  CommandlineOrGuiWindows.runAppCommandlineOrGUI(
    argsCount: args.length,
    commandlineRun: () async {
      stdout.writeln("Hello world");
      stderr.writeln("Oh no!");
    },
  );
}

示例2 - GUI模式

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

void main(List<String> args) {
  CommandlineOrGuiWindows.runAppCommandlineOrGUI(
    argsCount: args.length,
    gui: const MaterialApp(
      home: Scaffold(
        body: Text("Hello World"),
      ),
    ),
  );
}

示例3 - 命令行或GUI模式

// flutter library for gui
import 'package:flutter/material.dart';

// import of the plugin
import 'package:commandline_or_gui_windows/commandline_or_gui_windows.dart';

// used to write to stdout and stderr
import 'dart:io';

// not part of plugin, added to add commandline input
import 'package:args/args.dart';

void main(List<String> args) async {
  // 创建标志解析器
  ArgParser parser = ArgParser();
  parser.addOption(
    "two_multiplied_by",
    abbr: "m",
    mandatory: false,
    help: "Pass an int, and see 2 * int",
  );
  parser.addFlag(
    "help",
    abbr: "h",
    negatable: true,
    defaultsTo: false,
    help: "If passed help for flags is displayed",
  );

  // 解析结果并处理错误
  ArgResults results;
  try {
    results = parser.parse(args);

    if (results["help"]) {
      stdout.writeln(parser.usage);
      exit(0);
    }
  } catch (err) {
    stderr.writeln(err.toString());
    exit(1);
  }

  // 根据参数数量决定运行模式
  CommandlineOrGuiWindows.runAppCommandlineOrGUI(
    argsCount: args.length,
    closeOnCompleteCommandlineOptionOnly: false,
    commandlineRun: () async {
      if (results["two_multiplied_by"] != null) {
        try {
          stdout.writeln(int.parse(results["two_multiplied_by"]) * 2);
        } catch (err) {
          stderr.writeln(
              "Unable to multiply, 2 * ${results["two_multiplied_by"]}:\n${err.toString()}");
          CommandlineOrGuiWindows.commandlineExit(exitCode: 87);
        }
      } else {
        stdout.writeln("You didn't pass anything to be multiplied by 2");
      }
    },
    gui: const MaterialApp(
      home: Scaffold(
        body: Center(
          child: Text("Hello World"),
        ),
      ),
    ),
  );
}

运行代码

调试模式

在调试模式下,你可以通过以下命令运行代码:

flutter run -a -m -a 5

发布模式

首先构建发布版本:

flutter build windows --release

然后导航到生成目录并运行可执行文件:

.\build\windows\runner\Release\your_app.exe -m 5

更多关于Flutter命令行或GUI界面切换插件commandline_or_gui_windows的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter命令行或GUI界面切换插件commandline_or_gui_windows的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用commandline_or_gui_windows插件来切换命令行界面和GUI界面的示例代码。这个插件可能是一个假设的插件,因为目前Flutter生态系统中没有一个直接名为commandline_or_gui_windows的广泛使用的插件。不过,我会基于这个假设插件的功能来提供一个示例代码框架。

首先,你需要确保你的Flutter项目已经添加了该插件。假设这个插件已经发布在pub.dev上,你可以通过以下命令添加它:

flutter pub add commandline_or_gui_windows

然后,你可以在你的Flutter项目中按照以下方式使用它。请注意,以下代码是基于假设的API设计的,实际插件的API可能会有所不同。

main.dart

import 'package:flutter/material.dart';
import 'package:commandline_or_gui_windows/commandline_or_gui_windows.dart'; // 假设的导入路径

void main() {
  // 检查当前是命令行模式还是GUI模式
  bool isCommandLineMode = CommandLineOrGuiWindows.isCommandLineMode();

  runApp(MyApp(isCommandLineMode: isCommandLineMode));
}

class MyApp extends StatelessWidget {
  final bool isCommandLineMode;

  MyApp({required this.isCommandLineMode});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Command Line or GUI Switcher',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: isCommandLineMode
          ? CommandLineScreen()
          : GUIScreen(),
    );
  }
}

class CommandLineScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Command Line Mode'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('You are in command line mode.'),
            ElevatedButton(
              onPressed: () {
                // 切换到GUI模式(假设的API)
                CommandLineOrGuiWindows.switchToGuiMode();
                // 这里可能需要重启应用或者导航到GUI屏幕的逻辑
              },
              child: Text('Switch to GUI Mode'),
            ),
          ],
        ),
      ),
    );
  }
}

class GUIScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GUI Mode'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('You are in GUI mode.'),
            ElevatedButton(
              onPressed: () {
                // 切换到命令行模式(假设的API)
                CommandLineOrGuiWindows.switchToCommandLineMode();
                // 这里可能需要重启应用或者导航到命令行屏幕的逻辑
              },
              child: Text('Switch to Command Line Mode'),
            ),
          ],
        ),
      ),
    );
  }
}

注意事项

  1. 插件API: 上述代码是基于假设的commandline_or_gui_windows插件API设计的。实际使用时,你需要参考插件的官方文档来调整代码。

  2. 平台限制: Flutter主要用于跨平台移动开发,直接在Flutter应用中切换命令行和GUI界面可能受限于特定平台(如Windows)。确保你的插件支持所需平台。

  3. 权限和配置: 某些平台可能要求额外的权限或配置才能支持命令行和GUI之间的切换。确保你的应用满足这些要求。

  4. 重启应用: 在某些情况下,切换模式可能需要重启应用。你可能需要在插件API中处理这一逻辑,或者通过其他方式(如使用system_alert_window插件显示提示信息)通知用户。

  5. 错误处理: 在实际应用中,添加适当的错误处理逻辑以确保应用的稳定性和用户体验。

由于commandline_or_gui_windows插件可能不存在,上述代码仅作为示例。如果你正在寻找特定功能,请考虑使用其他现有插件或开发自定义插件来满足你的需求。

回到顶部