Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 骰子滚动动画颤振_Flutter_Dart_Dice - Fatal编程技术网

Flutter 骰子滚动动画颤振

Flutter 骰子滚动动画颤振,flutter,dart,dice,Flutter,Dart,Dice,我已经建立了骰子滚动动画使用资产图像,但图像只更新了最后一次,但随机骰子数字生成6次使用循环 import 'package:dicee/dice_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; void main() { return runApp( MaterialApp( title: 'Flutter Demo',

我已经建立了骰子滚动动画使用资产图像,但图像只更新了最后一次,但随机骰子数字生成6次使用循环

import 'package:dicee/dice_model.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() {
  return runApp(
    MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: ChangeNotifierProvider<DiceModel>(
          child: DicePage(),
          create: (BuildContext context) => DiceModel(),
        )),
  );
}

class DicePage extends StatelessWidget {
  void updateDices(DiceModel dice) {
    for (int i = 0; i < 6; i++) {
      print(i);
      sleep(Duration(milliseconds: 1000));
      dice.generateDiceOne();
    }
  }

  @override
  Widget build(BuildContext context) {
    List<String> _diceOneImages = [
      "images/dice1.png",
      "images/dice2.png",
      "images/dice3.png",
      "images/dice4.png",
      "images/dice5.png",
      "images/dice6.png",
    ];
    final dice = Provider.of<DiceModel>(context);
    final c = dice.diceOneCount;
    var img = Image.asset(
      _diceOneImages[c - 1],
      gaplessPlayback: true,
    );
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Row(
          children: <Widget>[
            Expanded(
              child: GestureDetector(
                onTap: () => updateDices(dice),
                child: img,
              ),
            ),
          ],
        ),
      ],
    );
  }
}```

**DiceModel**

```import 'dart:math';

import 'package:flutter/foundation.dart';

class DiceModel with ChangeNotifier {
  int diceOne = 1;

  int get diceOneCount => diceOne;

  void generateDiceOne() {
    diceOne = Random().nextInt(5) + 1;
    print("diceOne: $diceOne");
    notifyListeners();
  }
}```


问题是您正在调用SleepDurationMillissions:1000;。如果你检查你的日志,你应该会得到一个不支持的错误,其中有一条消息,说明这个嵌入程序不允许调用dart:io的sleep。此函数仅适用于主/UI隔离之外的隔离镖线程。因此,下一行代码dice.generateDiceOne;永远不会被执行


改为使updateDices异步,并将睡眠替换为Wait Future.delayedconst Durationseconds:1

你的骰子永远不会给出6个骰子1=Random.nextInt5+1;这将返回到最多5。将其更改为Random.nextIn6+1。Random.nextInt5将返回0到4之间的值