Отображение флаттера и выключатель - PullRequest
0 голосов
/ 27 марта 2020

Я только что начал с Flutter, и я хочу запустить колесо прокрутки, где после нажатия кнопки прокрутки я хочу открыть разные страницы в соответствии с углом. Я использовал Map<int,String>.

Я добавлю код ниже. Отображение дает значения, но оно перемещается на той же странице. Каждый раз, когда нажимается кнопка прокрутки и вращается колесо, я хочу другой маршрут.

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



        }));
}
}
...