Я создаю приложение, в котором есть экран с множеством текстовых полей, которые вы можете перемещать и настраивать. Я хочу изменить размер шрифта текстовых полей, нажав кнопку, которая находится в отдельном виджете с отслеживанием состояния. Поэтому я попытался реализовать пакет поставщика, объявив класс уведомителя об изменениях следующим образом:
class ChangeNotifierList with ChangeNotifier {
List<Widget> memeWidgets= new List();
void add(Widget widget){
memeWidgets.add(widget);
notifyListeners();
}
void remove(Widget widget){
memeWidgets.remove(widget);
notifyListeners();
}
void increaseFontSize(StateTextField widget){
widget.increaseFontSize();
notifyListeners();
}
}
И одним нажатием кнопки я изменяю размер шрифта текстового поля, например:
onTap: () {
setState(() {
Provider.of<ChangeNotifierList>(context,listen: false)
.increaseFontSize(widget.textField);
//widget.textField.increaseFontSize();
});
}
Мои виджеты отображаются в стеке, который определяется следующим образом:
Container(
height: MediaQuery.of(context).size.height * 0.8,
child: Consumer<ChangeNotifierList>(
builder: (context, value, child) {
return Stack(children: value.memeWidgets);
},
),
)
А мой виджет textField выглядит следующим образом:
class StateTextField extends StatefulWidget {
GlobalKey key = GlobalKey();
final FocusNode focusNode = FocusNode();
final Function(bool, Widget) callback;
final String fontFamily = FontFamily.Arial.toString().split('.')[1];
double fontSize = 18;
final Function(bool) selected;
final bool highlighted = false;
bool hasFocus() {
return focusNode.hasFocus;
}
increaseFontSize() {
fontSize += 2;
}
decreasefontSize() {
if (fontSize > 0) fontSize -= 2;
}
// increaseFontSize() {
// fontSize += 2;
// }
// decreasefontSize() {
// if (fontSize > 0) fontSize -= 2;
// }
StateTextField(
{@required this.callback,
@required this.selected,
@required this.fontSize});
@override
_StateTextFieldState createState() => _StateTextFieldState();
}
Я знаю, что проблема в том, что измененный размер шрифта не передается в класс состояния, как мне это преодолеть?