Я написал для вас образец кода, чтобы показать, как делать подобные вещи.
void main() {
runApp(AppState());
}
class AppState extends StatefulWidget {
@override
_AppStateState createState() => _AppStateState();
}
class _AppStateState extends State<AppState> {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Titolo",
theme: ThemeData(primarySwatch: Colors.blue),
home: HomeScreen());
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
List<String> mainPageHeading = [
'{ theSalmon', //0 mainloading page heading
'Complex', //1
' }' //2
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: TitleWidget(
mainPageHeading: mainPageHeading,
),
),
body: Center(
child: FlatButton(
child: Text("Change title"),
onPressed: () {
setState(() {
mainPageHeading = ["The", "Other", "Title"];
});
},
),
),
);
}
}
class TitleWidget extends StatelessWidget {
final List<String> mainPageHeading;
TitleWidget({@required this.mainPageHeading});
@override
Widget build(BuildContext context) {
return Container(
child: RichText(
text: TextSpan(
text: mainPageHeading[0],
style: TextStyle(
color: Colors.grey[700],
fontFamily: 'saturn',
fontSize: 25.0,
fontWeight: FontWeight.bold),
children: [
TextSpan(
text: mainPageHeading[1],
style: TextStyle(
color: Colors.grey[500],
fontFamily: 'saturn',
fontSize: 25.0,
fontStyle: FontStyle.italic,
)),
TextSpan(
text: mainPageHeading[2],
style: TextStyle(
color: Colors.grey[700],
fontFamily: 'saturn',
fontSize: 25.0,
fontWeight: FontWeight.bold,
)),
]),
textAlign: TextAlign.center,
),
);
}
}
Заголовок AppBars устанавливается из переменной titleText
. У меня есть FlatButton
с функцией, которая меняет titleText
на другой текст. Обратите внимание, что я изменяю эту переменную в блоке setState
. setState заставляет flutter перезагружать ваш UI, обновляя все, что изменилось. Поэтому, когда я нажимаю кнопку, переменная обновляется, и пользовательский интерфейс перезагружается, чтобы отобразить новый заголовок. один из ваших разделов, поместите туда setState и обновите все переменные, которые вам нужны для управления заголовком.
Я надеюсь, что это имеет смысл, если вам нужна дополнительная помощь, не стесняйтесь спрашивать. Удачи!
РЕДАКТИРОВАТЬ: Извините, я протестировал Код с другой настройкой экрана, что вызвало некоторые из ваших проблем. Я переместил код HomeScreen
в отдельный виджет. Это хорошая практика и требуется, если вы хотите позвонить по номеру setState
(как это делаем мы). Причина, по которой вы получали красную полосу, заключалась в том, что вы никогда не передавали titleText в виджет, поэтому он пытался получить строку, которой не существует, и выдал ошибку.
Также обязательно следите за ваше окно вывода, когда что-то пойдет не так, обычно выдает полезные сообщения об ошибках (прокрутите журнал ошибок до верхней части, это самая важная часть).