Flutter设备管理或功能管理插件flutter_manager的使用
Flutter设备管理或功能管理插件flutter_manager的使用
需求
flutter_manager
的最新版本需要 Dart SDK 2.12.0
或更高版本。
安装
终端执行以下命令以激活插件:
$ dart pub global activate flutter_manager
了解更多关于激活和使用包的信息,请参阅这里。
更新
更新操作与安装相同:
$ dart pub global activate flutter_manager
使用
基本用法如下:
manager <command> [arguments]
主要功能
mvm
命令可以统一管理 Flutter 组件库的版本号,并通过一次点击在本地路径和远程 Git 依赖之间切换。其原理是通过读取 mvm
文件夹下的配置文件来构建有向无环图(DAG),然后从每个子节点回溯到根节点的所有路径。
flutter_manager
库的最大优势包括:
- 低使用成本:由于是一个命令行工具,只需执行一次
manager mvm
即可添加或删除依赖库或更新库版本。 - 低重构成本:原有的组件化解决方案几乎无需移动,只需在
mvm
配置文件夹中配置项目结构和依赖关系,工具会自动识别和管理。 - 用户无需手动添加或删除依赖库或更新版本号:只需修改统一的配置文件
mvm
,工具将自动定位并更新正确的模块。特别是在在 Git 和路径依赖之间切换时,无需重复繁琐的搜索过程。 - 各模块对第三方库的依赖相互独立:因此不需要统一的底层模块,真正实现了组件化。
- 通过
version.yaml
配置文件管理依赖库的版本号:在整个项目中共享,即每个子模块使用统一版本的第三方库,避免版本冲突。 - 通过
delegate.yaml
配置文件统一管理每个组件的本地/远程分支。
当第一次执行 manager mvm
时,配置文件会自动生成模板,也可以手动创建。它包含 module.yaml
、version.yaml
和 delegate.yaml
,用户将在这些文件中注册和更新项目组件信息。
各个文件的作用
- module.yaml
列出所有业务组件(包括宿主项目)的依赖项:
yourModuleName:
dependencies:
- thirdPartyLibraryName
- yourModuleName
- version.yaml
配置所有依赖库的版本号(支持版本号、路径和 Git 三种方式):
version:
thirdPartyLibraryName1: versionCode
thirdPartyLibraryName2: git
yourModuleName1: git
yourModuleName2: path
- delegate.yaml
配置 Git 和路径依赖的实际地址:
# 所有组件的本地根路径
path: commonLocalRootPath
git:
yourModuleName:
git:
url: ""
# 这个组件的分支
ref: ""
thirdPartyLibraryName:
git:
url: ""
ref: ""
记住,当配置文件发生变化时,需要再次执行 manager mvm
命令才能生效。
当控制台出现 Execution succeed
日志关键字时,表示任务成功执行,实际的项目组件依赖关系将被打印出来,这可能与你在 version.yaml
中配置的依赖关系不同,因为 Flutter 要求从组件到宿主项目的所有路径的实际依赖关系必须一致。但你只需要关注 version.yaml
,日志仅表示存在更好的依赖配置。
你可以运行 example
示例体验一下。
其他功能
- 运行 Flutter 命令,例如
clean
:
manager clean
- 运行内置命令,例如删除文件:
manager delete a.txt
- 运行自定义命令:
manager custom ~/currentActivity.sh
manager custom flutter pub get
最后
每个命令都有一个缩写,通常是命令的第一个字符。
你可以运行 manager help
获取更多信息。
Global options:
-h, --help 打印此使用信息。
Available commands:
clean 运行 flutter clean
custom 运行自定义命令或自己的脚本
delete 运行删除文件,默认为 pubspec.lock
format 运行 flutter format .
mvm Flutter 模块版本管理器
pub 运行 flutter pub get (注意:这是一个父命令)
pure 按顺序运行删除、清理和获取命令
运行 "manager help <command>" 获取更多关于某个命令的信息。
示例代码
example/lib/main.dart
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp();
// 此小部件是您的应用程序的根部。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter 示例',
theme: ThemeData(
// 这是您的应用程序的主题。
//
// 尝试运行您的应用程序,您会看到应用有一个蓝色的工具栏。然后,在不退出应用程序的情况下,尝试将
// 下面的 primarySwatch 更改为 Colors.green 并重新加载(在运行 "flutter run" 的控制台中按 "r" 键,
// 或者在 Flutter IDE 中按 "运行 > Flutter 热重载")。请注意,计数器不会重置为零;应用程序并未重启。
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter 示例首页'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({required this.title});
// 这个小部件是您的应用程序的主页。它是有状态的,意味着它有一个状态对象(定义在下面)
// 该状态对象包含影响外观的字段。
// 这个类是状态的配置。它保存了由父级(在这里是 App 小部件)提供的值(在这个例子中是标题),
// 并且由 State 的 build 方法使用。Widget 子类中的字段总是标记为 "final"。
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
// 这次调用 setState 告诉 Flutter 框架某些事情已经改变,
// 导致它重新运行下面的 build 方法,以便显示更新后的值。
// 如果我们不调用 setState() 改变 _counter,那么 build 方法就不会被重新调用,
// 因此什么都不会发生。
_counter++;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
// 每次调用 setState 时,此方法都会被重新运行,例如在上面的 _incrementCounter 方法中。
//
// Flutter 框架经过优化,使重新运行 build 方法变得快速,
// 因此您可以重建任何需要更新的东西,而不是逐个更改小部件实例。
return Scaffold(
appBar: AppBar(
// 在这里,我们从由 App.build 方法创建的 MyHomePage 对象中获取值,
// 并将其用于设置我们的应用栏标题。
title: Text(widget.title),
),
body: Center(
// Center 是一个布局小部件。它接受一个子元素并将其置于父元素的中间。
child: Column(
// Column 也是一个布局小部件。它接受一个子元素列表并垂直排列它们。
// 默认情况下,它水平地调整自身大小以适应其子元素,并尽可能高。
//
// 调用 "调试绘制"(在控制台中按 "p" 键,选择 Android Studio 中的 "切换调试绘制" 动作,
// 或者 Visual Studio Code 中的 "切换调试绘制" 命令)以查看每个小部件的线框图。
//
// Column 有许多属性可以控制其自身的大小和子元素的位置。在这里我们使用 mainAxisAlignment 来
// 垂直居中子元素;主轴是垂直的,因为 Columns 是垂直的(交叉轴是水平的)。
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'您已经按下了按钮这么多次:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: '增加',
child: const Icon(Icons.add),
), // 这个逗号使得格式化更美观。
);
}
}
更多关于Flutter设备管理或功能管理插件flutter_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter设备管理或功能管理插件flutter_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,flutter_manager
并不是一个官方或广泛认可的 Flutter 插件名称,但基于你提到的“设备管理或功能管理插件”,我们可以假设你正在寻找一种方式来管理设备的功能或设置。在 Flutter 社区中,通常我们会使用多个插件来实现不同的设备管理功能,比如电池状态、设备信息、网络连接等。
不过,为了给你一个具体的代码示例,我将展示如何使用一些流行的 Flutter 插件来管理设备的一些基本功能。这些插件可能不完全符合你提到的 flutter_manager
,但它们提供了类似的功能。
示例:使用 Flutter 插件管理设备功能
1. 获取设备信息
使用 device_info
插件获取设备信息。
首先,在 pubspec.yaml
文件中添加依赖:
dependencies:
flutter:
sdk: flutter
device_info: ^2.0.3 # 请检查最新版本
然后,在 Dart 代码中获取设备信息:
import 'package:flutter/material.dart';
import 'package:device_info/device_info.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DeviceInfoScreen(),
);
}
}
class DeviceInfoScreen extends StatefulWidget {
@override
_DeviceInfoScreenState createState() => _DeviceInfoScreenState();
}
class _DeviceInfoScreenState extends State<DeviceInfoScreen> {
DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
Future<void> _getDeviceInfo() async {
if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo;
print('Brand: ${androidInfo.brand}');
print('Model: ${androidInfo.model}');
// 可以添加更多信息获取
} else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await deviceInfoPlugin.iosInfo;
print('Name: ${iosInfo.name}');
print('System Name: ${iosInfo.systemName}');
// 可以添加更多信息获取
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Device Info'),
),
body: Center(
child: ElevatedButton(
onPressed: _getDeviceInfo,
child: Text('Get Device Info'),
),
),
);
}
}
2. 管理电池状态
使用 battery
插件获取电池状态。
在 pubspec.yaml
文件中添加依赖:
dependencies:
battery: ^2.0.0 # 请检查最新版本
在 Dart 代码中获取电池状态:
import 'package:flutter/material.dart';
import 'package:battery/battery.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: BatteryInfoScreen(),
);
}
}
class BatteryInfoScreen extends StatefulWidget {
@override
_BatteryInfoScreenState createState() => _BatteryInfoScreenState();
}
class _BatteryInfoScreenState extends State<BatteryInfoScreen> {
Battery _battery = Battery();
BatteryState _batteryState = BatteryState.unknown;
int _batteryLevel = -1;
@override
void initState() {
super.initState();
_battery.onBatteryStateChanged.listen((BatteryState state) {
setState(() {
_batteryState = state;
});
});
_battery.onBatteryLevelChanged.listen((int level) {
setState(() {
_batteryLevel = level;
});
});
// 初始化获取电池状态
_battery.batteryState.then((state) {
setState(() {
_batteryState = state;
});
});
_battery.batteryLevel.then((level) {
setState(() {
_batteryLevel = level;
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Battery Info'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Battery State: $_batteryState'),
SizedBox(height: 10),
Text('Battery Level: $_batteryLevel%'),
],
),
),
);
}
}
注意
- 上述代码示例仅展示了如何使用特定的 Flutter 插件来获取设备信息和电池状态。
- 实际应用中,你可能需要处理更多的边缘情况和错误处理。
- 如果你正在寻找一个综合性的设备管理插件,可能需要自己组合多个插件的功能,或者查找社区中是否有类似的第三方插件。
希望这些示例代码能帮助你开始使用 Flutter 管理设备功能!如果你有更具体的需求或问题,请随时提问。