Flutter数据管理插件data_walker的使用

Flutter数据管理插件data_walker的使用

特性

  • DataWalker 基类提供了在给定范围内顺序或随机的索引,并且可以重复指定次数。
  • 派生类提供了顺序或随机的对象(如日期/时间、整数、数字、随机Unicode字符串、迭代器)映射到由基类生成的索引。
  • 可以通过列表生成顺序或随机预定义的字符串。
  • 随机字符串的实现借助于 StringWalkerrandom_unicode 包。

使用方法

以下是一个工作示例,也可以在仓库中找到 <code>example/data_walker_example.dart</code> 文件。

import 'dart:math';

import 'package:data_walker/data_walker.dart';

/// 自定义颜色类
///
enum Color {
  black,
  blue,
  yellow,
  white;

  [@override](/user/override)
  String toString() => name;
}

/// 自定义图标颜色类
///
class IconColors {
  final Color fg;
  final Color bg;
  IconColors(this.fg, this.bg);
  [@override](/user/override)
  String toString() => '$fg on $bg';
}

/// 自定义图标尺寸价格类
///
class IconSizePrice {
  final int size;
  final num price;
  IconSizePrice(this.size, this.price);
  [@override](/user/override)
  String toString() => '$size x $size, Price: \$${price.toStringAsFixed(2)}';
}

/// 示例主入口点
///
void main() {
  print('\n*** 顺序聚合 ListWalker ***\n');

  final walkers = <String, DataWalker>{
    'Icon': ListWalker<String>([
      'new',
      'open',
      'save',
      'edit',
      'find',
      'replace',
    ]),
    'Colors': ListWalker<IconColors>([
      IconColors(Color.black, Color.white),
      IconColors(Color.white, Color.black),
      IconColors(Color.yellow, Color.blue),
      IconColors(Color.blue, Color.yellow),
    ]),
    'Size': ListWalker<IconSizePrice>([
      IconSizePrice(16, 0.10),
      IconSizePrice(24, 0.15),
      IconSizePrice(32, 0.20),
      IconSizePrice(48, 0.25),
      IconSizePrice(64, 0.30),
      IconSizePrice(80, 0.35),
      IconSizePrice(96, 0.40),
    ])
  };

  walkers.exec(
      repeats: 1,
      valueProc: (values) {
        print(walkers.valuesToString(values, useKeys: false));
      });

  print('\n*** 顺序普通 NumWalker ***\n');

  var walker = NumWalker(0.1, 1.0, step: 0.05, repeats: 2);

  while (true) {
    final n = walker.next().toStringAsFixed(2);

    if (walker.isFinished) {
      break;
    }

    print('r:${walker.repeatNo + 1}, #${walker.currentNo + 1}: $n');
  }

  print('\n*** 随机普通 NumWalker ***\n');

  walker = walker.copyWith(repeats: 10, random: Random.secure());

  while (true) {
    final n = walker.next().toStringAsFixed(2);

    if (walker.isFinished) {
      break;
    }

    print('r:${walker.repeatNo + 1}, #${walker.currentNo + 1}: $n');
  }
}

完整示例代码

import 'dart:math';

import 'package:data_walker/data_walker.dart';

/// 自定义颜色类
///
enum Color {
  black,
  blue,
  yellow,
  white;

  [@override](/user/override)
  String toString() => name;
}

/// 自定义图标颜色类
///
class IconColors {
  final Color fg;
  final Color bg;
  IconColors(this.fg, this.bg);
  [@override](/user/override)
  String toString() => '$fg on $bg';
}

/// 自定义图标尺寸价格类
///
class IconSizePrice {
  final int size;
  final num price;
  IconSizePrice(this.size, this.price);
  [@override](/user/override)
  String toString() => '$size x $size, Price: \$${price.toStringAsFixed(2)}';
}

/// 示例主入口点
///
void main() {
  print('\n*** 顺序聚合 ListWalker ***\n');

  final walkers = <String, DataWalker>{
    'Icon': ListWalker<String>([
      'new',
      'open',
      'save',
      'edit',
      'find',
      'replace',
    ]),
    'Colors': ListWalker<IconColors>([
      IconColors(Color.black, Color.white),
      IconColors(Color.white, Color.black),
      IconColors(Color.yellow, Color.blue),
      IconColors(Color.blue, Color.yellow),
    ]),
    'Size': ListWalker<IconSizePrice>([
      IconSizePrice(16, 0.10),
      IconSizePrice(24, 0.15),
      IconSizePrice(32, 0.20),
      IconSizePrice(48, 0.25),
      IconSizePrice(64, 0.30),
      IconSizePrice(80, 0.35),
      IconSizePrice(96, 0.40),
    ])
  };

  // 执行walkers并打印结果
  walkers.exec(
      repeats: 1,
      valueProc: (values) {
        print(walkers.valuesToString(values, useKeys: false));
      });

  print('\n*** 顺序普通 NumWalker ***\n');

  // 创建NumWalker并执行
  var walker = NumWalker(0.1, 1.0, step: 0.05, repeats: 2);

  while (true) {
    final n = walker.next().toStringAsFixed(2);

    if (walker.isFinished) {
      break;
    }

    print('r:${walker.repeatNo + 1}, #${walker.currentNo + 1}: $n');
  }

  print('\n*** 随机普通 NumWalker ***\n');

  // 创建新的NumWalker实例并执行
  walker = walker.copyWith(repeats: 10, random: Random.secure());

  while (true) {
    final n = walker.next().toStringAsFixed(2);

    if (walker.isFinished) {
      break;
    }

    print('r:${walker.repeatNo + 1}, #${walker.currentNo + 1}: $n');
  }
}

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

1 回复

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


data_walker 是一个用于 Flutter 应用的数据管理插件,旨在简化数据的管理和状态更新。它提供了一种灵活的方式来处理数据流,并且可以与 Flutter 的状态管理方案(如 ProviderRiverpod 等)无缝集成。

安装 data_walker

首先,你需要在 pubspec.yaml 文件中添加 data_walker 依赖:

dependencies:
  flutter:
    sdk: flutter
  data_walker: ^0.1.0  # 请使用最新版本

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

基本用法

data_walker 的核心概念是 DataWalker,它允许你管理数据流并监听数据的变化。以下是一个简单的使用示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DataWalkerExample(),
    );
  }
}

class DataWalkerExample extends StatefulWidget {
  @override
  _DataWalkerExampleState createState() => _DataWalkerExampleState();
}

class _DataWalkerExampleState extends State<DataWalkerExample> {
  final DataWalker<int> _counterWalker = DataWalker(0);

  void _incrementCounter() {
    _counterWalker.update((value) => value + 1);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DataWalker Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Counter:',
            ),
            DataWalkerBuilder<int>(
              dataWalker: _counterWalker,
              builder: (context, value) {
                return Text(
                  '$value',
                  style: Theme.of(context).textTheme.headline4,
                );
              },
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

代码解释

  1. 创建 DataWalker 实例:

    final DataWalker<int> _counterWalker = DataWalker(0);
    

    这里我们创建了一个 DataWalker 实例,初始值为 0

  2. 更新数据:

    _counterWalker.update((value) => value + 1);
    

    通过 update 方法,我们可以更新 DataWalker 中的值。在这个例子中,每次调用 _incrementCounter 时,计数器都会增加 1。

  3. 监听数据变化:

    DataWalkerBuilder<int>(
      dataWalker: _counterWalker,
      builder: (context, value) {
        return Text(
          '$value',
          style: Theme.of(context).textTheme.headline4,
        );
      },
    ),
回到顶部