我创建了一个包含多个页面的颤振应用程序。每个页面都包含用于导航到其他页面的按钮。此外,每个页面都有一个容器,其中包含可随时更改的文本。
我的问题:
我无法获得 1 个可用于多个页面/命令的有状态小部件(这就是为什么在我的代码中我为多个页面使用了多个有状态小部件)。
我想在自动播放模式下添加背景音乐,它将一直播放到应用程序运行(如果用户愿意,可以使用按钮停止音乐),但无法通过任何可以帮助我的教程。
- 这两件事如何实现?
这是我的应用程序的视频:
https://drive.google.com/file/d/1Wa0Lj0pq4EyQUIauN6r6lSGbNCjyUZ_p/view?usp=sharing
这是我的代码:
主要.dart
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_different_page_swap/home_page.dart';
import 'swapPage0.dart';
import 'swapPage1.dart';
import 'swapPage2.dart';
void main() => runApp(MindfulNess());
class MindfulNess extends StatelessWidget {
@override
Widget build(BuildContext context) {
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
return MaterialApp(
theme: ThemeData.dark().copyWith(
scaffoldBackgroundColor: Colors.black87,
),
initialRoute: '/',
routes: {
'/': (context) => HomePage(),
'/first': (context) => SwapPage0(),
'/second': (context) => SwapPage1(),
'/third': (context) => SwapPage2(),
},
);
}
}
home_page.dart
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter_different_page_swap/constants.dart';
import 'package:flutter_different_page_swap/update_texts.dart';
import 'package:flutter_different_page_swap/fuelledBy.dart';
import 'package:flutter_different_page_swap/openingInfo.dart';
import 'package:flutter_different_page_swap/emotion_buttons.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
padding: EdgeInsets.fromLTRB(10, 15, 10, 10),
constraints: BoxConstraints.expand(),
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("images/mindfulness1.jpg"),
fit: BoxFit.cover,
),
),
child: Column(
children: [
OpeningInfo(
Text(
'Welcome to Mindfulness',
style: TextStyle(
color: Colors.white60,
fontWeight: FontWeight.bold,
fontSize: 20,
),
textAlign: TextAlign.center,
),
),
SizedBox(height: 20),
UpdateMindfulnessTexts(),
Expanded(
child: Text(''),
flex: 3,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
EmotionButtons(
onPress: () {
Navigator.pushNamed(context, '/first');
},
emotionTexts: kMindText,
),
EmotionButtons(
onPress: () {
Navigator.pushNamed(context, '/second');
},
emotionTexts: kLoveText,
),
EmotionButtons(
onPress: () {
Navigator.pushNamed(context, '/third');
},
emotionTexts: kHappyText,
),
],
),
Expanded(
child: FuelledByInfo(),
),
],
),
),
);
}
}
mindfulness_brain.dart
import 'package:flutter_different_page_swap/messages.dart';
class MindfulnessBrain {
int mindfulnessMessageNumber = 0;
List<Messages> mindfulnessMessageBank = [
Messages("Mind is the EPICENTER of all my Emotions."),
Messages(
"Whatever is my 'State of Mind', will determine my 'State of Being' "),
Messages(
"A mental state achieved by focusing my awareness on the present moment, while calmly acknowledging and accepting other's feelings and thoughts"),
Messages(
'I must be aware of what I think as it will determine my thoughts for others and will come out as I speak'),
Messages(
'I must take control of my mind otherwise my mind will control me'),
Messages('Click any of the Emotion Buttons below to know more'),
];
void nextMessage() {
if (mindfulnessMessageNumber < mindfulnessMessageBank.length) {
mindfulnessMessageNumber++;
}
}
String getMessageText() {
return mindfulnessMessageBank[mindfulnessMessageNumber].messageText;
}
bool isFinished() {
if (mindfulnessMessageNumber == mindfulnessMessageBank.length) {
return true;
} else {
return false;
}
}
void reset() {
mindfulnessMessageNumber = 0;
}
}
(update_texts.dart - 这是重复代码所在的位置)
update_texts.dart
import 'package:flutter/material.dart';
import 'package:flutter_different_page_swap/mind_brain.dart';
import 'package:flutter_different_page_swap/love_brain.dart';
import 'happy_brain.dart';
import 'mindfulness_brain.dart';
//MINDFULNESS BRAIN
MindfulnessBrain mindfulnessBrain = MindfulnessBrain();
class UpdateMindfulnessTexts extends StatefulWidget {
@override
UpdateMindfulnessTextsState createState() => UpdateMindfulnessTextsState();
}
class UpdateMindfulnessTextsState extends State {
//String textHolder = '';
void changeText() {
setState(() {
mindfulnessBrain.nextMessage();
if (mindfulnessBrain.isFinished() == true) {
mindfulnessBrain.reset();
}
});
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
changeText();
},
child: Container(
alignment: Alignment.topCenter,
margin: EdgeInsets.all(12.0),
padding: EdgeInsets.all(8.0),
child: Column(
children: [
Text(
mindfulnessBrain.getMessageText(),
style: TextStyle(
color: Colors.white,
fontSize: 20,
),
textAlign: TextAlign.center,
),
Icon(Icons.touch_app_outlined, color: Colors.lightGreenAccent),
],
),
decoration: BoxDecoration(
color: Colors.black.withOpacity(.5),
shape: BoxShape.rectangle,
borderRadius: BorderRadius.all(
Radius.elliptical(20, 20),
),
),
),
);
}
}
//MIND BRAIN
MindBrain mindBrain = MindBrain();
class UpdateMindTexts extends StatefulWidget {
@override
UpdateMindTextsState createState() => UpdateMindTextsState();
}
class UpdateMindTextsState extends State {
void changeText() {
setState(() {
mindBrain.nextMessage();
if (mindBrain.isFinished() == true) {
mindBrain.reset();
}
});
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
changeText();
},
child: Container(
alignment: Alignment.topCenter,
margin: EdgeInsets.all(12.0),
padding: EdgeInsets.all(8.0),
child: Column(
children: [
Text(
mindBrain.getMessageText(),
style: TextStyle(
color: Colors.white,
fontSize: 20,
),
textAlign: TextAlign.center,
),
Icon(Icons.touch_app_outlined, color: Colors.lightGreenAccent),
],
),
decoration: BoxDecoration(
color: Colors.black.withOpacity(.5),
shape: BoxShape.rectangle,
borderRadius: BorderRadius.all(
Radius.elliptical(20, 20),
),
),
),
);
}
}
//LOVE BRAIN
LoveBrain loveBrain = LoveBrain();
class UpdateLoveTexts extends StatefulWidget {
@override
UpdateLoveTextsState createState() => UpdateLoveTextsState();
}
class UpdateLoveTextsState extends State {
//String textHolder = '';
void changeText() {
setState(() {
loveBrain.nextMessage();
if (loveBrain.isFinished() == true) {
loveBrain.reset();
}
});
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
changeText();
},
child: Container(
alignment: Alignment.topCenter,
margin: EdgeInsets.all(12.0),
padding: EdgeInsets.all(8.0),
child: Column(
children: [
Text(
loveBrain.getMessageText(),
style: TextStyle(
color: Colors.white,
fontSize: 20,
),
textAlign: TextAlign.center,
),
Icon(Icons.touch_app_outlined, color: Colors.lightGreenAccent),
],
),
decoration: BoxDecoration(
color: Colors.black.withOpacity(.5),
shape: BoxShape.rectangle,
borderRadius: BorderRadius.all(
Radius.elliptical(20, 20),
),
),
),
);
}
}
//HAPPY BRAIN
HappyBrain happyBrain = HappyBrain();
class UpdateHappyTexts extends StatefulWidget {
@override
UpdateHappyTextsState createState() => UpdateHappyTextsState();
}
class UpdateHappyTextsState extends State {
//String textHolder = '';
void changeText() {
setState(() {
happyBrain.nextMessage();
if (happyBrain.isFinished() == true) {
happyBrain.reset();
}
});
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
changeText();
},
child: Container(
alignment: Alignment.topCenter,
margin: EdgeInsets.all(12.0),
padding: EdgeInsets.all(8.0),
child: Column(
children: [
Text(
happyBrain.getMessageText(),
style: TextStyle(
color: Colors.white,
fontSize: 20,
),
textAlign: TextAlign.center,
),
Icon(Icons.touch_app_outlined, color: Colors.lightGreenAccent),
],
),
decoration: BoxDecoration(
color: Colors.black.withOpacity(.5),
shape: BoxShape.rectangle,
borderRadius: BorderRadius.all(
Radius.elliptical(20, 20),
),
),
),
);
}
}