Flutter核心辅助插件sidekick_core的功能使用

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

Flutter核心辅助插件sidekick_core的功能使用

什么是sidekick?

重复的CLI任务可以通过多种方式组织:README、bash脚本、别名、运行配置、CI/CD管道等。但所有这些方法都有其缺点。更好的方法是为您的项目创建一个定制的CLI。

sidekick CLI生成器可以帮助您实现这一点!

定制sidekick CLI的优势

  • 命令文档化:命令文档与命令本身关联,避免过时的文档。
  • 易用语言:使用Dart编写命令,而不是复杂的Bash脚本。
  • 可测试/调试:命令可以进行测试和调试。
  • 项目范围:仅包含您需要的命令。
  • 共享CLI:通过仓库共享CLI,方便新团队成员安装和使用。

入门指南 - 为您的项目生成自己的sidekick CLI

安装sidekick CLI生成器

确保您已经安装了 sidekick CLI生成器。

dart pub global activate sidekick

初始化新的sidekick CLI

导航到您的项目目录并运行以下命令来初始化一个新的sidekick CLI:

sidekick init

CLI生成器将引导您完成设置过程。您将被提示提供一些信息(例如CLI的名称),然后就完成了!

现在您可以从命令行调用自己的sidekick CLI。

安装Sidekick CLI全局并启用Tab补全

要使您的Sidekick CLI在系统任何地方都可访问并启用方便的Tab补全,运行以下命令:

<your-cli-name> sidekick install-global

重新启动终端或重新加载shell配置文件(例如 source ~/.bashrcsource ~/.zshrc),然后您可以在任何地方使用带有Tab补全的CLI。

可用的默认命令和插件

默认命令

这是新生成的sidekick CLI中的一些默认命令:

  • deps:获取所有包(包括嵌套包)的依赖项。
  • format:格式化所有包(包括嵌套包)中的Dart文件。
  • sidekick create-command:创建新命令的模板并将其添加到您的CLI。
  • sidekick plugins create:从模板创建新的sidekick插件。
  • sidekick plugins install:从pub.dev、GitHub或本地路径安装sidekick插件。

推荐的插件

增强您的Sidekick CLI,推荐以下插件:

您可以在pub.dev上找到所有可用的sidekick插件这里

其他与sidekick相关的包可以在pub.dev上找到这里

安装插件到您的CLI:

<your-cli-name> sidekick plugins install <plugin-name>

了解更多关于Sidekick

如果您想深入了解Sidekick并发现高级技巧和技术,建议观看我们的综合演讲:

sidekick_core

sidekick_core 包由 sidekick CLI使用,以获得以下功能:

  • 插件引擎
  • 更新迁移
  • 新项目和插件的模板
  • 预构建命令
    • AnalyzeCommand:Dart分析整个项目
    • DartCommand:调用Flutter SDK中嵌入的Dart SDK(默认系统)
    • DepsCommand:获取所有包的依赖项
    • FlutterCommand:调用与项目关联的Flutter SDK(默认系统)
    • BashCommand:包装bash脚本并将其转换为Dart命令
    • SidekickCommand
      • PluginsCommand:安装和创建插件
      • UpdateCommand:将您的CLI更新到最新的sidekick_core版本
      • InstallGlobalCommand:使CLI全局可用
      • RecompileCommand:在自动检测更改失败时重新编译CLI(路径依赖)

使用示例

import 'package:sidekick_core/sidekick_core.dart';

Future<void> main(List<String> args) async {
  final runner = initializeSidekick(mainProjectPath: 'dev/integration_tests/flutter_gallery');
  runner.addCommand(YourCommand());
  runner.addCommand(SidekickCommand());
  return await runner.run(args);
}

许可证

Copyright 2023 phntm GmbH

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

更多关于Flutter核心辅助插件sidekick_core的功能使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter核心辅助插件sidekick_core的功能使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,sidekick_core这样的核心辅助插件通常用于提供一系列实用的功能,以简化开发流程和提高代码的可维护性。尽管sidekick_core并非一个广泛认知的官方或知名第三方Flutter包(可能是特定项目或团队内部开发的插件),但我们可以基于类似的插件或假设其功能来展示一些核心功能的代码案例。

假设sidekick_core提供了如下功能:

  1. 网络请求封装
  2. 状态管理辅助
  3. UI组件复用

下面是根据这些假设功能提供的代码案例:

1. 网络请求封装

// 假设 sidekick_core 提供了 HttpService 类用于网络请求
import 'package:sidekick_core/sidekick_core.dart';
import 'dart:convert';

class ApiService {
  final HttpService _httpService = HttpService();

  Future<Map<String, dynamic>> fetchData(String endpoint) async {
    try {
      var response = await _httpService.get(Uri.parse(endpoint));
      if (response.statusCode == 200) {
        return jsonDecode(response.body);
      } else {
        throw Exception('Failed to load data');
      }
    } catch (e) {
      throw e;
    }
  }
}

// 使用示例
void main() async {
  ApiService apiService = ApiService();
  var data = await apiService.fetchData('https://api.example.com/data');
  print(data);
}

2. 状态管理辅助

// 假设 sidekick_core 提供了 StateManager 类用于状态管理
import 'package:sidekick_core/sidekick_core.dart';
import 'package:flutter/material.dart';

class CounterViewModel extends StateManager {
  int _count = 0;

  int get count => _count;

  void increment() {
    _count++;
    notifyListeners(); // 通知监听器状态已更改
  }
}

void main() {
  runApp(
    Provider<CounterViewModel>.value(
      value: CounterViewModel(),
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    var counterVM = Provider.of<CounterViewModel>(context);
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Counter')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('You have pushed the button this many times:'),
              Text(
                '${counterVM.count}',
                style: Theme.of(context).textTheme.headline4,
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            counterVM.increment();
          },
          tooltip: 'Increment',
          child: Icon(Icons.add),
        ),
      ),
    );
  }
}

3. UI组件复用

// 假设 sidekick_core 提供了 ReusableButton 组件
import 'package:sidekick_core/sidekick_core.dart';
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Reusable Button Example')),
        body: Center(
          child: ReusableButton(
            text: 'Click Me',
            onPressed: () {
              print('Button clicked!');
            },
          ),
        ),
      ),
    );
  }
}

// 假设这是 sidekick_core 中定义的 ReusableButton 组件
// (实际上,这个组件应该定义在 sidekick_core 包中,这里仅作示例)
class ReusableButton extends StatelessWidget {
  final String text;
  final VoidCallback onPressed;

  ReusableButton({required this.text, required this.onPressed});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: onPressed,
      child: Text(text),
    );
  }
}

请注意,以上代码是基于假设的sidekick_core插件功能编写的,实际使用时需要根据sidekick_core的具体文档和API进行调整。如果sidekick_core是内部或特定项目插件,请参考相应的项目文档获取准确的使用方法和API。

回到顶部