У меня есть класс StatefulWidget «FirstClass», который расширяет состояние «_FirstClassState». Из отдельного класса состояния, называемого «_SecondClassState», я пытаюсь получить доступ к значению переменной (называемой «счетчиком» в «_FirstClassState»).
Я нашел решение, но не уверен, что это лучшее решение проблемы. Я пробовал смотреть на другие похожие вопросы:
- Как получить доступ к переменной виджета с отслеживанием состояния внутри класса State вне метода сборки? (Объявление переменной в классе StatefulWidget и использование 'widget.' в классе State не позволяет мне получить значение 'counter' из '_SecondClassState')
- Я также видел другие сайты, которые рекомендуют использовать GlobalKey. Однако, несмотря на то, что это могло быть решением, я не стал вдаваться в подробности, так как нашел другие сайты, которые рекомендуют минимизировать использование GlobalKeys.
second_class.dart:
import 'package:brew_crew/question/first_class.dart';
import 'package:flutter/material.dart';
class SecondClass extends StatefulWidget {
@override
_SecondClassState createState() => _SecondClassState();
}
class _SecondClassState extends State<SecondClass> {
final FirstClass firstClass = FirstClass();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("MyApp"),
centerTitle: true,
),
body: Column(
children: <Widget>[
firstClass, //Displays the button to increase 'counter'
FlatButton(
child: Text("Submit"),
onPressed: () {
print(firstClass
.getCounter()); //I need to get the value of 'counter' here to use elsewhere
}),
],
),
);
}
}
first_class.dart
import 'package:flutter/material.dart';
class FirstClass extends StatefulWidget {
final _FirstClassState firstClassState = _FirstClassState();
@override
_FirstClassState createState() => firstClassState;
int getCounter() {
return firstClassState.counter;
}
}
class _FirstClassState extends State<FirstClass> {
int counter = 0;
//Increases counter by 1
void _increaseCounter() {
setState(() {
counter++;
});
}
@override
Widget build(BuildContext context) {
//A button which increases counter when clicked
return FlatButton.icon(
icon: Icon(Icons.add),
label: Text("Counter: $counter"),
onPressed: () {
_increaseCounter();
},
);
}
}
Как видите, в «FirstClass» я инициализирую новый экземпляр «_FirstClassState». Используя это в функции getCounter (), я могу получить значение счетчика.
Есть ли лучший способ (например, передовой опыт, меньше строк кода, более простой для понимания метод и т. Д.), Чем этот, для достижения того, что я пытаюсь сделать?