【发布时间】:2021-02-16 11:35:49
【问题描述】:
好的,所以提醒你一下,我今年 15 岁,完全是个飘飘然的菜鸟。这是我的第一个项目,所以请原谅这个可能很愚蠢的问题,请放轻松。
我有这个有状态小部件(ride),其中主体是_children 中定义的子无状态小部件之一。 if 语句仅在第一个和第二个子小部件之间更改,具体取决于用户是否连接了 BT 设备(该部分无关紧要)。
我需要做的是从 ln 68 上的MaterialButton 内部设置状态,以便ride 显示riding 无状态小部件,但显然我无法从startRide 内部更改状态,因为它是一个无状态的小部件。我该怎么做呢?
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' ;
import 'results.dart';
import 'settings.dart';
class ride extends StatefulWidget {
@override
_rideState createState() => _rideState();
}
class _rideState extends State<ride> {
int _currentState = 0;
final List<Widget> _children = [
notConnected(),
startRide(),
riding(),
];
bool connected = checkBT(); // Function defined in settings.dart
@override
Widget build(BuildContext context) {
if (connected == true){
_currentState = 1;
setState((){_currentState;});
}
return _children[_currentState];
}
}
class notConnected extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
height:180,
padding: EdgeInsets.fromLTRB(40, 0, 40, 0),
child: Center(
child: Text(
"Oops! Looks like your phone isn’t connected to your bluetooth device.",
style:Theme.of(context).textTheme.bodyText2,
textAlign: TextAlign.center,
),
),
),
);
}
}
class startRide extends StatelessWidget {
AudioPlayer _audioPlayer = AudioPlayer();
AudioCache player = AudioCache();
@override
Widget build(BuildContext context) {
return Scaffold(
body:Center(
child: Container(
width: 200,
height: 80,
child: MaterialButton(
onPressed:(){
player.play("beeps.mp3");
// I NEED TO SET THE STATE OF RIDE HERE
},
child: Text(
"Start!",
style: Theme.of(context).textTheme.headline1,
),
color: Colors.red[500],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(40.0)),
),
),
),
),
);
}
}
class riding extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(); //not finished writing this yet
}
}
我可能会以完全错误的方式来做这件事,但我来自 python,所以它非常不同。任何帮助将不胜感激:)
【问题讨论】: