Flutter 骰子滚动动画颤振
我已经建立了骰子滚动动画使用资产图像,但图像只更新了最后一次,但随机骰子数字生成6次使用循环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',
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之间的值