Flutter设备管理插件simple_managers的使用

Flutter设备管理插件simple_managers的使用

概览

simple_managers 是一个包含多个支持序列化的管理类的包。它目前包含以下管理类:

  • FlagManager: 管理单个标志,如开关按钮。
  • IndexManager: 管理单一索引值,例如下拉列表。
  • TagSelectionManager: 管理单一字符串标签值。
  • MultiFlagManager: 管理多标志,例如复选框。
  • MultiIndexManager: 管理多索引集,例如分段按钮。
  • MultiTagSelectionManager: 管理多字符串标签集。
  • TextFieldManager: 文本编辑控制器和焦点管理器。
  • ValueManager: 管理单一浮点数。
  • StateManager: 包含所有管理类的管理类。当使用 SpWML 时特别有用。
  • SingletonStateManager: 封装了 StateManager 的单例类,允许你轻松地保存和恢复整个应用的状态,前提是你的应用中不使用重复的键。

使用

这个包包含多个管理类,但我会解释一下 TextFieldManager,因为它有稍微特殊的用法。

TextFieldManager _tfm = TextFieldManager();

[@override](/user/override)
void dispose() {
  _tfm.dispose();
  super.dispose();
}

通过调用 getCtrlgetFocus 方法并传入名称,如果尚未创建,则会内部创建一个新的对象;如果已创建,则返回之前创建的对象。

TextField(
  focusNode: _tfm.getFocus("first"),
  controller: _tfm.getCtrl("first", initialText: "first"),
  onSubmitted: (String s) {
    _tfm.getFocus("second").requestFocus();
  }
)

序列化

调用 toDict 方法会将所有分配的数据序列化为一个 Map。此外,还可以从使用 fromDict 创建的 Map 中检索信息。换句话说,这个包中的管理类使得将输入数据保存到服务器并恢复变得容易。

setState(() {
  _tfm.getCtrl("sendTextSample").text = json.encode(
      _tfm.toDict(nonSaveKeys: ["sendTextSample"]));
});

支持

基本上没有支持。

如果您有任何问题,请提交一个问题。

此包优先级较低,但可能会被修复。

关于版本控制

在版本升级时,C部分可能会更改。

  • 添加变量、结构变化等导致读取以前文件出现问题的情况。
    • C.X.X
  • 添加方法等。
    • X.C.X
  • 小修改和错误修复。
    • X.X.C

如果版本小于1,可能会有重大修正和更改,不受上述限制。

许可证

此软件根据MIT许可证发布,参见 LICENSE 文件。

版权声明

“Dart” 和 “Flutter” 名称是Google LLC的商标。 *此包的开发者不是Google LLC。

完整示例

import 'dart:convert';

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextFieldManager _tfm = TextFieldManager();

  [@override](/user/override)
  void dispose() {
    _tfm.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Padding(
            padding: const EdgeInsets.symmetric(horizontal: 36),
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                TextField(
                  focusNode: _tfm.getFocus("first"),
                  controller: _tfm.getCtrl("first", initialText: "first"),
                  onSubmitted: (String s) {
                    _tfm.getFocus("second").requestFocus();
                  },
                ),
                TextField(
                  focusNode: _tfm.getFocus("second"),
                  controller: _tfm.getCtrl("second", initialText: "second"),
                  onSubmitted: (String s) {
                    _tfm.getFocus("third").requestFocus();
                  },
                ),
                TextField(
                  focusNode: _tfm.getFocus("third"),
                  controller: _tfm.getCtrl("third", initialText: "third"),
                  onSubmitted: (String s) {
                    _tfm.getFocus("first").requestFocus();
                  },
                ),
                Container(
                    margin: const EdgeInsets.fromLTRB(0, 12, 0, 12),
                    child: ElevatedButton(
                        onPressed: () {
                          setState(() {
                            _tfm.getCtrl("sendTextSample").text = json.encode(
                                _tfm.toDict(nonSaveKeys: ["sendTextSample"]));
                          });
                        },
                        child: const Text("Send text"))),
                TextField(
                  focusNode: _tfm.getFocus("sendTextSample"),
                  controller: _tfm.getCtrl("sendTextSample"),
                  maxLines: 8,
                  decoration:
                      const InputDecoration(hintText: "send text sample"),
                )
              ],
            )),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用simple_managers插件进行设备管理的代码示例。simple_managers插件通常用于访问设备的各种功能,如电池信息、设备信息等。需要注意的是,由于simple_managers可能不是一个广为人知的插件,具体的方法和类名可能会有所不同,这里假设它提供了类似的功能,并基于常见的Flutter插件设计模式给出示例。

首先,确保你已经在pubspec.yaml文件中添加了simple_managers依赖:

dependencies:
  flutter:
    sdk: flutter
  simple_managers: ^latest_version  # 替换为实际的最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下方式使用simple_managers插件:

import 'package:flutter/material.dart';
import 'package:simple_managers/simple_managers.dart';  // 假设插件提供了这样的导入路径

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

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

class DeviceInfoScreen extends StatefulWidget {
  @override
  _DeviceInfoScreenState createState() => _DeviceInfoScreenState();
}

class _DeviceInfoScreenState extends State<DeviceInfoScreen> {
  String _deviceName = 'Unknown';
  String _batteryLevel = 'Unknown';
  String _osVersion = 'Unknown';

  @override
  void initState() {
    super.initState();
    _getDeviceInfo();
  }

  Future<void> _getDeviceInfo() async {
    // 假设simple_managers提供了DeviceManager类
    final DeviceManager deviceManager = DeviceManager();

    try {
      // 获取设备名称
      String deviceName = await deviceManager.getDeviceName();
      setState(() {
        _deviceName = deviceName;
      });

      // 获取电池级别
      double batteryLevel = await deviceManager.getBatteryLevel();
      setState(() {
        _batteryLevel = batteryLevel.toStringAsFixed(1) + '%';
      });

      // 获取操作系统版本
      String osVersion = await deviceManager.getOSVersion();
      setState(() {
        _osVersion = osVersion;
      });
    } catch (e) {
      print('Error fetching device info: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Device Info'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text(
              'Device Name:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 8),
            Text(
              _deviceName,
              style: TextStyle(fontSize: 16),
            ),
            SizedBox(height: 24),
            Text(
              'Battery Level:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 8),
            Text(
              _batteryLevel,
              style: TextStyle(fontSize: 16),
            ),
            SizedBox(height: 24),
            Text(
              'OS Version:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 8),
            Text(
              _osVersion,
              style: TextStyle(fontSize: 16),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们假设simple_managers插件提供了一个DeviceManager类,该类具有getDeviceNamegetBatteryLevelgetOSVersion等异步方法来获取设备信息。

请注意,由于simple_managers可能不是一个实际存在的插件或者其API可能与上述示例不同,因此你需要参考该插件的实际文档来调整代码。如果simple_managers插件不存在或者其API不同,你可能需要寻找一个类似的插件或者自己实现这些功能。

回到顶部