Flutter随机数生成插件mt19937的使用

Flutter 随机数生成插件 mt19937 的使用

Dart 实现了 Mersenne Twister 伪随机数生成器。

提供了 MT19937、MT19937-64 以及适用于原生和 Web 平台的可配置实现。

使用

您可以查看 示例

运行测试

您可以查看 mt19937_test.dart 文件顶部的说明。

以下是一个完整的示例,展示了如何在 Flutter 应用程序中使用 mt19937 插件:

import 'package:flutter/material.dart';
import 'package:fixnum/fixnum.dart';
import 'package:mt19937/mt19937.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MT19937 示例'),
        ),
        body: Center(
          child: RandomNumberGenerator(),
        ),
      ),
    );
  }
}

class RandomNumberGenerator extends StatefulWidget {
  [@override](/user/override)
  _RandomNumberGeneratorState createState() => _RandomNumberGeneratorState();
}

class _RandomNumberGeneratorState extends State<RandomNumberGenerator> {
  List<int> _randomIntegers = [];
  List<double> _randomDoubles = [];
  List<BigInt> _randomBigInts = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    generateRandomNumbers();
  }

  void generateRandomNumbers() async {
    // 提供一个原始的 MT19937 生成器。
    var mt = MersenneTwister();
    setState(() {
      _randomIntegers = List<int>.generate(10, (_) => mt());
    });

    // 也提供了 [Random] 接口。
    var random = RandomMt19937();
    setState(() {
      _randomIntegers.addAll(List<int>.generate(10, (_) => random.nextInt(100)));
      _randomDoubles = List<double>.generate(10, (_) => random.nextDouble());
    });

    var random64 = RandomMt19937_64();
    setState(() {
      _randomBigInts = List<BigInt>.generate(
        10,
        (_) => random64.nextBigInt(random64.exclusiveMax),
      );
    });

    // 也提供了一个可配置的引擎,预配置为 MT19937(32位字)和 MT19937-64(64位字)。
    var seed = DateTime.now().millisecondsSinceEpoch;
    var mt64 = MersenneTwisterEngine.w64()..init(Int64(seed));
    setState(() {
      _randomBigInts.addAll(List<BigInt>.generate(10, (_) => mt64()));
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text('随机整数:', style: TextStyle(fontSize: 18)),
        Text(_randomIntegers.join(', '), style: TextStyle(fontSize: 16)),
        SizedBox(height: 20),
        Text('随机双精度浮点数:', style: TextStyle(fontSize: 18)),
        Text(_randomDoubles.join(', '), style: TextStyle(fontSize: 16)),
        SizedBox(height: 20),
        Text('随机大整数:', style: TextStyle(fontSize: 18)),
        Text(_randomBigInts.join(', '), style: TextStyle(fontSize: 16)),
      ],
    );
  }
}

更多关于Flutter随机数生成插件mt19937的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter随机数生成插件mt19937的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用mt19937插件来生成随机数是一个不错的选择,mt19937是一个基于Mersenne Twister算法的随机数生成器,以其长周期和高维度均匀性而著名。以下是如何在Flutter项目中集成并使用mt19937插件的代码示例。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加mt19937依赖:

dependencies:
  flutter:
    sdk: flutter
  mt19937: ^x.y.z  # 请替换为最新版本号

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

2. 导入插件

在你的Dart文件中导入mt19937插件:

import 'package:mt19937/mt19937.dart';

3. 使用MT19937生成随机数

以下是一个完整的示例,展示了如何使用mt19937插件生成随机数:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'MT19937 Random Number Generator',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: RandomNumberScreen(),
    );
  }
}

class RandomNumberScreen extends StatefulWidget {
  @override
  _RandomNumberScreenState createState() => _RandomNumberScreenState();
}

class _RandomNumberScreenState extends State<RandomNumberScreen> {
  MT19937 _mt19937;
  List<int> _randomNumbers = [];

  @override
  void initState() {
    super.initState();
    // 初始化MT19937实例,可以使用任意种子,这里使用当前时间戳作为种子
    _mt19937 = MT19937(seed: DateTime.now().millisecondsSinceEpoch);
    // 生成一些随机数
    for (int i = 0; i < 10; i++) {
      _randomNumbers.add(_mt19937.nextInt(1000)); // 生成0到999之间的随机数
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MT19937 Random Number Generator'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Generated Random Numbers:'),
            Text(
              _randomNumbers.join(', '),
              style: TextStyle(fontSize: 20),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 添加依赖:在pubspec.yaml中添加mt19937依赖。
  2. 导入插件:在Dart文件中导入mt19937包。
  3. 初始化MT19937实例:在initState方法中,使用当前时间戳作为种子初始化MT19937实例。
  4. 生成随机数:使用_mt19937.nextInt(1000)生成0到999之间的随机数,并将它们添加到_randomNumbers列表中。
  5. 显示随机数:在UI中显示生成的随机数。

这样,你就可以在Flutter应用中轻松地使用mt19937插件生成随机数了。

回到顶部