Я хотел вложить текст Update BlocBuilder в другой BlocBuilder, который управляет размером шрифта через виджет ползунка. Но я не могу заставить его работать. Пожалуйста помоги!
BlocBuilder<SettingsBloc, SettingsState>(
builder: (context, state) {
return BlocBuilder<TextFieldBloc, TextFieldState>(
builder: (context, state) {
if (state is TextFieldInitState) {
return Text(
state.text.toString(),
style: TextStyle(
fontSize: state.fontSize,
fontFamily: 'EthiopicWookianos',
fontWeight: FontWeight.normal,
color: Colors.blueGrey,
),
);
} else if (state is TextFieldLaterState) {
return Text(
state.text.toString(),
style: TextStyle(
fontSize: state.fontSize,
fontFamily: 'EthiopicWookianos',
fontWeight: FontWeight.normal,
color: Colors.blueGrey,
),
);
} else {
return Text("something wrong");
}
});
}),
Вот код для TextField Bloc ... (конечно, они находятся в отдельных файлах).
import 'package:flutter/widgets.dart';
abstract class TextFieldEvent {}
class TextInit extends TextFieldEvent {
}
class TextChange extends TextFieldEvent {
final String data;
TextChange({@required this.data});
}
class TextFieldState {}
class TextFieldInitState extends TextFieldState {
String text;
TextFieldInitState({this.text});
}
class TextFieldLaterState extends TextFieldState {
String text;
TextFieldLaterState({this.text});
}
class TextFieldBloc extends Bloc<TextFieldEvent, TextFieldState> {
@override
get initialState => TextFieldInitState(text: '');
@override
Stream<TextFieldState> mapEventToState(event) async* {
if (event is TextInit) {
yield TextFieldInitState(text: "");
} else if (event is TextChange) {
yield TextFieldLaterState(text: event.data);
}
}
}
Вот код блока настроек ... (они тоже в отдельных файлах).
part of 'settings_bloc.dart';
@immutable
abstract class SettingsEvent {
final dynamic payload;
SettingsEvent(this.payload);
}
class FontSize extends SettingsEvent {
FontSize(payload) : super(payload);
}
abstract class SettingsState {
final double sliderFontSize;
SettingsState({this.sliderFontSize});
double get fontSize => sliderFontSize;
}
class InitialSettingsState extends SettingsState {
InitialSettingsState() : super(
sliderFontSize: 20,
);
}
class NewSettingsState extends SettingsState {
NewSettingsState.fromOldSettingsState(SettingsState oldState,
{double sliderFontSize})
: super(
sliderFontSize: sliderFontSize ?? oldState.sliderFontSize,
);
}
class SettingsBloc extends Bloc<SettingsEvent, SettingsState> {
@override
SettingsState get initialState => InitialSettingsState();
@override
Stream<SettingsState> mapEventToState(SettingsEvent event) async* {
if (event is FontSize) {
SettingsState currentState;
yield NewSettingsState.fromOldSettingsState(
currentState, sliderFontSize: event.payload);
}
}
}