Flutter UI管理插件commander_ui的使用

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

Flutter UI管理插件commander_ui的使用

Commander 是一个 Dart 库,用于在终端中创建用户界面。它提供了交互式组件,如选项选择和文本输入,并且具有高级用户输入管理。

安装

要在您的Dart项目中使用Commander,请将以下内容添加到pubspec.yaml文件中:

dependencies:
  commander_ui: ^2.0.0

然后运行pub get以安装依赖项。

使用示例

Ask 组件

一个简单的使用Commander创建Ask组件的例子:

Future<void> main() async {
  final commander = Commander(level: Level.verbose);

  final value = await commander.ask('What is your email ?',
    validate: (validator) =&gt; validator
      ..notEmpty(message: 'Name cannot be empty :)')
      ..email(message: 'Please enter a valid email'));

  // 自定义验证器
  final value = await commander.ask(' What is your name ?',
    validate: (validator) =&gt; validator
      ..validate((value) =&gt; value == 'Bob' 
          ? 'Bob is not allowed' 
          : null));

  print(value);
}
Number 组件

一个简单的使用Commander创建Number组件的例子:

Future&lt;void&gt; main() async {
  final commander = Commander(level: Level.verbose);

  final value = await commander.number('What is your age ?',
      interval: 1,
      onDisplay: (value) =&gt; value?.toStringAsFixed(2),
      validate: (validator) =&gt; validator
        ..greaterThan(18, message: 'You must be at least 18 years old')
        ..lowerThan(99, message: 'You must be at most 99 years old'));

  print(value);
}
Select 组件

一个简单使用Commander创建Option Selection组件的例子:

Future&lt;void&gt; main() async {
  final commander = Commander(level: Level.verbose);

  final value = await commander.select(' What is your name ?',
      onDisplay: (value) =&gt; value,
      placeholder: 'Type to search',
      defaultValue: 'Charlie',
      options: ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'John']);

  print(value);
}
Swap 组件

一个简单使用Commander创建Swap组件的例子:

Future&lt;void&gt; main() async {
  final commander = Commander(level: Level.verbose);

  final value = await commander.swap('Do you love cats', 
    defaultValue: true, 
    placeholder: '🐈'
  );
  
  final str = switch (value) {
    true =&gt; 'I love cats 😍',
    false =&gt; 'I prefer dogs 😕',
  };

  print(str);
}
Task 组件

一个简单使用Commander创建Task组件的例子:

Future&lt;void&gt; sleep() =&gt; Future.delayed(Duration(seconds: 1));

Future&lt;String&gt; sleepWithValue() =&gt;
    Future.delayed(Duration(seconds: 1), () =&gt; 'Hello World !');

Future&lt;void&gt; main() async {
  final commander = Commander(level: Level.verbose);

  final successTask = await commander.task();
  await successTask.step('Success step 1', callback: sleepWithValue);
  await successTask.step('Success step 2', callback: sleep);
  successTask.success('Success task data are available !');

  final warnTask = await commander.task();
  await warnTask.step('Warn step 1', callback: sleepWithValue);
  await warnTask.step('Warn step 2', callback: sleep);
  await warnTask.step('Warn step 3', callback: sleep);
  warnTask.warn('Warn task !');

  final errorTask = await commander.task();
  await errorTask.step('Error step 1', callback: sleepWithValue);
  await errorTask.step('Error step 2', callback: sleep);
  await errorTask.step('Error step 3', callback: sleep);
  errorTask.error('Error task !');
}
Checkbox 组件

一个简单使用Commander创建Checkbox组件的例子:

Future&lt;void&gt; main() async {
  final commander = Commander(level: Level.verbose);

  final value = await commander.checkbox(
    'What is your favorite pet ?',
    defaultValue: 'Charlie',
    options: ['cat', 'dog', 'bird'],
  );

  print(value);
}
Table 组件

一个简单使用Commander创建Table组件的例子:

Future&lt;void&gt; main() async {
  final commander = Commander(level: Level.verbose);
  commander.table(
    columns: ['Name', 'Age', 'Country', 'City'],
    lineSeparator: false,
    columnSeparator: false,
    data: [
      ['Alice', '20', 'USA', 'New York'],
      ['Bob', '25', 'Canada', 'Toronto'],
      ['Charlie', '30', 'France', 'Paris'],
      ['David', '35', 'Germany', 'Berlin'],
      ['Eve', '40', 'Italy', 'Rome'],
      ['Frank', '45', 'Japan', 'Tokyo'],
      ['John', '50', 'China', 'Beijing'],
    ],
  );
}
Alternative Screen 组件

一个简单使用Commander创建Alternative Screen组件的例子:

Future&lt;void&gt; main() async {
  final commander = Commander(level: Level.verbose);

  final screen = commander.screen(title: 'First screen');
  screen.enter();

  await sleep();
  print('Hello screen !');
  await sleep();

  screen.leave();

  print('Goodbye screen !');
}

Future&lt;void&gt; wait() =&gt;
    Future.delayed(Duration(seconds: Random().nextInt(3) + 1));
主题化

Commander 提供了一个主题系统来自定义组件的外观。 可以为所有组件定义一个全局主题,或者为每个组件定义一个特定的主题。

Future&lt;void&gt; main() async {
  final commander = Commander(
    level: Level.verbose,
    componentTheme: ComponentTheme(
      askTheme: DefaultAskTheme.copyWith(askPrefix: '🤖')
    ));

  final value = await commander.ask(' What is your email ?',
    validate: (validator) =&gt; validator
      ..notEmpty(message: 'Name cannot be empty :)')
      ..email(message: 'Please enter a valid email'));

  print(value);
}

每个与用户交互的组件都有一个 theme 属性,允许自定义其外观。

Future&lt;void&gt; main() async {
  final commander = Commander(level: Level.verbose);

  final value = await commander.ask(' What is your email ?',
    theme: DefaultAskTheme.copyWith(askPrefix: '🤖'),
    validate: (validator) =&gt; validator
      ..notEmpty(message: 'Name cannot be empty :)')
      ..email(message: ' Please enter a valid email'));
  
  print(value);
}

更多关于Flutter UI管理插件commander_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter UI管理插件commander_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用commander_ui插件的示例。commander_ui是一个用于UI管理的Flutter插件,尽管它不是一个广泛知名的插件(可能是一个自定义或特定用途的插件),但我们可以假设它提供了一个简洁的接口来管理应用的UI状态。

由于commander_ui可能不是Flutter官方插件库中的一部分,以下示例将基于一个假设的API设计。如果commander_ui的实际API不同,请根据实际情况调整代码。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加commander_ui依赖(假设它已经在pub.dev上发布或者在你的私有源中)。

dependencies:
  flutter:
    sdk: flutter
  commander_ui: ^1.0.0  # 假设版本号是1.0.0

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

2. 初始化插件

在你的main.dart文件中初始化commander_ui插件。

import 'package:flutter/material.dart';
import 'package:commander_ui/commander_ui.dart'; // 假设这是插件的导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Commander UI Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CommanderUIHome(),
    );
  }
}

class CommanderUIHome extends StatefulWidget {
  @override
  _CommanderUIHomeState createState() => _CommanderUIHomeState();
}

class _CommanderUIHomeState extends State<CommanderUIHome> {
  late CommanderUI commanderUI;

  @override
  void initState() {
    super.initState();
    // 初始化commander_ui插件
    commanderUI = CommanderUI.instance;
    // 配置UI管理逻辑(假设有这样的API)
    commanderUI.configure(
      // 假设的配置参数
      themeMode: ThemeMode.system,
      // 其他配置...
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Commander UI Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${commanderUI.someStateValue}', // 假设有一个状态值可以获取
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 假设有一个方法来更新UI状态
          commanderUI.updateState(newStateValue: 'New Value');
          setState(() {}); // 通知Flutter框架UI需要更新
        },
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // 这个示例按钮只是用来演示如何更新状态
    );
  }
}

3. 假设的插件API

由于commander_ui的具体API未知,这里假设它有以下方法和属性:

  • CommanderUI.instance:获取插件的实例。
  • configure(...):配置UI管理逻辑。
  • someStateValue:获取当前UI状态的一个值(例如计数器)。
  • updateState(newStateValue: String):更新UI状态。

注意事项

  • 上述代码是基于假设的API设计,实际使用时请根据commander_ui的文档或源代码进行调整。
  • 如果commander_ui不是通过pub.dev发布的,可能需要将其源代码添加到你的项目中,并相应地调整导入路径。
  • 确保你已经正确配置了插件的权限和依赖项。

希望这个示例能帮助你开始在Flutter项目中使用commander_ui插件!如果有更具体的需求或问题,请提供更多细节。

回到顶部