Flutter项目快速创建插件flutter_create的使用

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

Flutter项目快速创建插件flutter_create的使用

在创建自定义Flutter项目时,flutter_create 是一个独立的解决方案,用于解决 GitHub上的问题

安装

如果您想在命令行中使用 flutter_create,请使用以下命令进行安装:

> pub global activate flutter_create

要更新 flutter_create,也可以使用相同的 pub global activate 命令。

使用

您可以使用以下命令来创建一个新的Flutter项目:

> flutter_create -a appname -u template_url

或者使用 pub global run 来运行该命令:

> pub global run flutter_create -a appname -u template_url

创建完成后,进入项目目录并执行以下命令:

> cd appname
> flutter pub get
> flutter run

功能和错误报告

如需提交功能请求或错误报告,请前往 问题追踪器


示例代码

以下是使用 flutter_create 创建项目的示例:

flutter_create -a my_awesome_app -u https://github.com/VictorUvarov/provider_architecture_template

更多关于Flutter项目快速创建插件flutter_create的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter项目快速创建插件flutter_create的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中快速创建插件并使用flutter_create命令的详细说明及代码案例。不过需要注意的是,flutter_create 实际上并不是 Flutter SDK 提供的官方命令。Flutter 官方提供了一个 flutter create --template=plugin 命令来快速生成一个插件项目。这里我将展示如何使用这个命令来创建一个插件,并给出相关的代码结构示例。

创建 Flutter 插件项目

首先,确保你已经安装了 Flutter SDK,并且你的 flutter 命令可以在命令行中运行。

  1. 打开命令行工具。

  2. 使用以下命令创建一个新的 Flutter 插件项目:

flutter create --template=plugin my_plugin

这里 my_plugin 是你的插件项目的名称,你可以根据需要替换它。

插件项目结构

执行上述命令后,Flutter 会生成一个包含以下结构的插件项目:

my_plugin/
├── android/
│   └── src/
│       └── main/
│           └── kotlin/
│               └── com/
│                   └── example/
│                       └── my_plugin/
│                           └── MyPluginPlugin.kt
├── ios/
│   └── Classes/
│       └── MyPluginPlugin.swift
├── lib/
│   └── my_plugin.dart
├── example/
│   ├── android/
│   ├── ios/
│   ├── lib/
│   │   └── main.dart
│   ├── pubspec.yaml
│   └── README.md
├── CHANGELOG.md
├── LICENSE
├── pubspec.yaml
└── README.md

插件代码示例

lib/my_plugin.dart

这是 Dart 端的插件接口定义文件。你可以在这里定义你的插件提供的方法。

import 'dart:async';

import 'package:flutter/services.dart';

class MyPlugin {
  static const MethodChannel _channel = const MethodChannel('my_plugin');

  static Future<String?> get platformVersion async {
    final String? version = await _channel.invokeMethod('getPlatformVersion');
    return version;
  }
}

android/src/main/kotlin/com/example/my_plugin/MyPluginPlugin.kt

这是 Android 端的插件实现文件。

package com.example.my_plugin

import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
import android.app.Activity
import android.os.Bundle

/** MyPluginPlugin */
class MyPluginPlugin: FlutterPlugin, ActivityAware, MethodCallHandler {
  /// The MethodChannel that will the communication between Flutter and native Android
  ///
  /// This local reference serves to register the plugin with the Flutter Engine and unregister it
  /// when the Flutter Engine is detached from the Activity
  private lateinit var channel : MethodChannel

  override fun onAttachedToEngine(binding: FlutterPluginBinding) {
    channel = MethodChannel(binding.binaryMessenger, "my_plugin")
    channel.setMethodCallHandler(this)
  }

  override fun onMethodCall(call: MethodCall, result: Result) {
    if (call.method == "getPlatformVersion") {
      result.success("Android ${android.os.Build.VERSION.RELEASE}")
    } else {
      result.notImplemented()
    }
  }

  override fun onDetachedFromEngine(binding: FlutterPluginBinding) {
    channel.setMethodCallHandler(null)
  }

  override fun onAttachedToActivity(binding: ActivityPluginBinding) {
    // You can add custom behaviors here
  }

  override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
    // You can add custom behaviors here
  }

  override fun onDetachedFromActivityForConfigChanges() {
    // You can add custom behaviors here
  }

  override fun onDetachedFromActivity() {
    // You can add custom behaviors here
  }
}

ios/Classes/MyPluginPlugin.swift

这是 iOS 端的插件实现文件。

import Flutter

public class MyPluginPlugin: NSObject, FlutterPlugin {
  public static func register(with registrar: FlutterRegistrar) {
    let channel = FlutterMethodChannel(name: "my_plugin", binaryMessenger: registrar.messenger())
    let instance = MyPluginPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }

  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    if call.method == "getPlatformVersion" {
      let version = UIDevice.current.systemVersion
      result(version)
    } else {
      result(FlutterMethodNotImplementedError(methodName: call.method))
    }
  }
}

使用插件

example/lib/main.dart 文件中,你可以测试你创建的插件。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: FutureBuilder<String?>(
            future: MyPlugin.platformVersion,
            builder: (context, snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error!}');
                }
                return Text('Platform version: ${snapshot.data!}');
              } else if (snapshot.connectionState == ConnectionState.active) {
                return Text('Awaiting result...');
              } else {
                return Text('Initializing...');
              }
            },
          ),
        ),
      ),
    );
  }
}

以上就是使用 Flutter 官方提供的 flutter create --template=plugin 命令快速创建插件项目,并给出相关代码结构的示例。希望这对你有所帮助!

回到顶部