Flutter 颤振映射与开关盒
我刚开始用颤振,我想执行一个旋转轮,一旦我点击旋转按钮,我想根据角度打开不同的页面。我使用了Flutter 颤振映射与开关盒,flutter,flutter-animation,flutter-navigation,Flutter,Flutter Animation,Flutter Navigation,我刚开始用颤振,我想执行一个旋转轮,一旦我点击旋转按钮,我想根据角度打开不同的页面。我使用了地图 我将在下面添加代码。映射正在提供值,但它在同一页面上导航。我希望每次单击“旋转”按钮和轮子旋转时都有不同的路线 import 'dart:async'; import 'dart:math'; import 'package:audioplayers/audio_cache.dart'; import 'package:audioplayers/audioplayers.dart'; impor
地图
我将在下面添加代码。映射正在提供值,但它在同一页面上导航。我希望每次单击“旋转”按钮和轮子旋转时都有不同的路线
import 'dart:async';
import 'dart:math';
import 'package:audioplayers/audio_cache.dart';
import 'package:audioplayers/audioplayers.dart';
import 'package:bedroom_game_flutter/playscreen.dart';
import 'package:bedroom_game_flutter/shake.dart';
import 'package:bedroom_game_flutter/slide1.dart';
//import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_spinning_wheel/flutter_spinning_wheel.dart';
import 'final.dart';
bool _isEnabled = true;
class Roulette extends StatefulWidget {
final int selected;
final Map<int,String> labels = {
1:"A",
2:"B",
3:"C",
4:"D"
};
Roulette(this.selected);
@override
_RouletteState createState() => new _RouletteState(this.selected);
}
class _RouletteState extends State<Roulette> {
final int selected;
final Map<int,String> labels = {
1:"A",
2:"B",
3:"C",
4:"D"
};
_RouletteState(this.selected);
AudioCache _audioCache;
RaisedButton raisedButton;
final StreamController _dividerController = StreamController<int>();
final _wheelNotifier = StreamController<double>();
//bool _isEnabled = true;
@override
void initState() {
super.initState();
_audioCache = AudioCache(
prefix: "sound/",
fixedPlayer: AudioPlayer()..setReleaseMode(ReleaseMode.STOP));
}
void _handleclick() {
_audioCache.play('spinning_wheel.mp3');
_wheelNotifier.sink.add(
_generateRandomVelocity(),
);
if (_isEnabled = true) {
setState(() {
_isEnabled = false;
});
}
}
void _hasclick() {
setState(() {
Navigator.push(context,
MaterialPageRoute(builder: (context) => Final(this.selected)));
});
if (_isEnabled = false) {}
}
dispose() {
_dividerController.close();
_wheelNotifier.close();
}
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
var _mybtn;
return Scaffold(
resizeToAvoidBottomPadding: false,
// appBar: AppBar(backgroundColor: Color(0xffDDC3FF), elevation: 0.0),
// backgroundColor: Color(0xffDDC3FF),
body: Stack(children: <Widget>[
Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/chance_bg.png"),
fit: BoxFit.fill)),
child: Column(mainAxisAlignment: MainAxisAlignment.center, children: [
SpinningWheel(
Image.asset('assets/spinthewheel_star2.png'),
width: 310,
height: 310,
initialSpinAngle: _generateRandomAngle(),
spinResistance: 0.6,
canInteractWhileSpinning: false,
dividers: 4,
onUpdate: _dividerController.add,
onEnd: _dividerController.add,
secondaryImage:
Image.asset('assets/arrow.png'),
secondaryImageHeight: 90,
secondaryImageWidth: 110,
shouldStartOrStop: _wheelNotifier.stream,
),
SizedBox(height: 30),
StreamBuilder(
stream: _dividerController.stream,
builder: (context, snapshot) =>
snapshot.hasData ? RouletteScore(snapshot.data) : Container(),
),
SizedBox(height: 100.0),
ButtonTheme(
minWidth: 500.0,
height: 48.0,
child: MaterialButton(
color: Color(0xffff5757),
textColor: Colors.white,
key: _mybtn,
child: new Text(
"Spin",
style: TextStyle(fontSize: 35.0),
),
onPressed: _isEnabled ? _handleclick : null)),
// SizedBox(height: 50.0),
// ButtonTheme(
// minWidth: 500.0,
// height: 48.0,
// child: MaterialButton(
// color: Color(0xfff14d66),
// textColor: Colors.white,
// key: _mybtn,
// child: new Text(
// "View My Task",
// style: TextStyle(fontSize: 35.0),
// ),
// onPressed: ()=>
// //_isEnabled ? null : _hasclick,
// Navigator.push(context, MaterialPageRoute(builder: (context)=>Final(this.selected))
// // },
]),
)
]));
}
double _generateRandomVelocity() => (Random().nextDouble() * 9000) + 10000;
double _generateRandomAngle() => Random().nextDouble() * pi * 2;
}
class RouletteScore extends StatefulWidget {
int selected;
Map<int,String> labels = {
1:"A",
2:"B",
3:"C",
4:"D"
};
RouletteScore(this.selected);
@override
_RouletteScoreState createState() => new _RouletteScoreState(this.selected);
}
class _RouletteScoreState extends State<RouletteScore> {
final int selected;
final Map<int,String> labels = {
1:"A",
2:"B",
3:"C",
4:"D"
};
_RouletteScoreState(this.selected);
void _hasclick() {
if (_isEnabled = false) {}
}
@override
Widget build(BuildContext context) {
return ButtonTheme(
minWidth: 500.0,
height: 48.0,
child: MaterialButton(
color: Color(0xffff5757),
child: Text("View My Voucher",
style: TextStyle(fontFamily: "font",
fontSize: 32.0),),
onPressed: (){
//want the different pages to open on this button
}));
}
}
导入'dart:async';
导入“dart:math”;
导入“包:AudioPlayer/audio_cache.dart”;
导入“包:AudioPlayer/AudioPlayer.dart”;
进口“套装:卧室、游戏、扑动/游戏屏幕、飞镖”;
进口“套装:卧室\游戏\颤振/摇晃.飞镖”;
导入“套装:卧室、游戏、颤振/幻灯片1.飞镖”;
//导入“包:AudioPlayer/AudioPlayer.dart”;
进口“包装:颤振/cupertino.dart”;
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
进口“包装:颤振纺纱轮/颤振纺纱轮.省道”;
导入“final.dart”;
bool _isEnabled=true;
类Roulette扩展了StatefulWidget{
最终选定int;
最终地图标签={
1:“A”,
2:“B”,
3:“C”,
4:“D”
};
轮盘赌(本次选择);
@凌驾
_RouletteState createState()=>新的_RouletteState(选择此选项);
}
类_轮盘测试扩展状态{
最终选定int;
最终地图标签={
1:“A”,
2:“B”,
3:“C”,
4:“D”
};
_轮盘赌(此选项已选定);
AudioCache\u AudioCache;
升起按钮升起按钮;
最终流控制器_dividerController=StreamController();
final _wheelNotifier=StreamController();
//bool _isEnabled=true;
@凌驾
void initState(){
super.initState();
_audioCache=audioCache(
前缀:“sound/”,
fixedPlayer:AudioPlayer()…设置ReleaseMode(ReleaseMode.STOP));
}
void_handleclick(){
_audioCache.play('spinning_wheel.mp3');
_wheelNotifier.sink.add(
_GeneratorDomainVelocity(),
);
如果(_isEnabled=true){
设置状态(){
_isEnabled=false;
});
}
}
void(点击){
设置状态(){
Navigator.push(上下文,
MaterialPage路线(生成器:(上下文)=>Final(this.selected));
});
如果(_isEnabled=false){}
}
处置{
_dividerController.close();
_wheelNotifier.close();
}
@凌驾
小部件构建(构建上下文){
SystemChrome.SetEnabledSystemEmioVerlays([]);
var_mybtn;
返回脚手架(
resizeToAvoidBottomPadding:false,
//appBar:appBar(背景颜色:颜色(0xffDDC3FF),标高:0.0),
//背景颜色:颜色(0xffDDC3FF),
主体:堆栈(子对象:[
容器(
装饰:盒子装饰(
图像:装饰图像(
图片:AssetImage(“assets/chance_bg.png”),
适合:BoxFit.fill),
子项:列(mainAxisAlignment:mainAxisAlignment.center,子项:[
旋转轮(
Image.asset('assets/spinthewheel_star2.png'),
宽度:310,
身高:310,
InitialSpingle:_GeneratorDomainAngle(),
自旋电阻:0.6,
caninteractwhilespining:false,
分隔符:4,
onUpdate:_dividerController.add,
onEnd:_dividerController.add,
第二图像:
Image.asset('assets/arrow.png'),
第二图像高度:90,
第二图像宽度:110,
shouldStartOrStop:\u wheelNotifier.stream,
),
尺寸箱(高度:30),
StreamBuilder(
流:_dividerController.stream,
生成器:(上下文,快照)=>
snapshot.hasData?轮盘赌(snapshot.data):容器(),
),
尺寸箱(高度:100.0),
钮扣(
最小宽度:500.0,
身高:48.0,
子:材质按钮(
颜色:颜色(0xffff5757),
textColor:Colors.white,
密钥:_mybtn,
儿童:新文本(
“旋转”,
样式:TextStyle(fontSize:35.0),
),
onPressed:_isEnabled?_handleclick:null)),
//尺寸箱(高度:50.0),
//钮扣(
//最小宽度:500.0,
//身高:48.0,
//子:材质按钮(
//颜色:颜色(0xfff14d66),
//textColor:Colors.white,
//密钥:_mybtn,
//儿童:新文本(
//“查看我的任务”,
//样式:TextStyle(fontSize:35.0),
// ),
//按下:()=>
////\u已启用?空:\u单击,
//Navigator.push(上下文,MaterialPageRoute(builder:(上下文)=>Final(this.selected))
// // },
]),
)
]));
}
双_生成器速度()=>(随机().nextDouble()*9000)+10000;
双_generateRandomAngle()=>Random().nextDouble()*pi*2;
}
类RouletteScore扩展了StatefulWidget{
选择int;
地图标签={
1:“A”,
2:“B”,
3:“C”,
4:“D”
};
轮盘赌(选择此选项);
@凌驾
_RouletteScoreState createState()=>新的_RouletteScoreState(此.选中);
}
类_RouletteScoreState扩展状态{
最终选定int;
最终地图标签={
1:“A”,
2:“B”,
3:“C”,
4:“D”
};
_轮盘赌CoreState(选择此选项);
void(点击){
如果(_isEnabled=false){}
}
@凌驾
小部件构建(构建上下文){
返回按钮(
最小宽度:500.0,
身高:48.0,
子:材质按钮(
颜色:颜色(0xffff5757),
子项:文本(“查看我的凭证”,
样式:TextStyle(fontFamily:“字体”,
字体大小:32.0),),
已按下:(){
//要在此按钮上打开不同的页面吗