在Flutter中,我有经典的反例。遵循BLoC模式,我已经获得了正确的工作方式示例。
class _MyHomePageState extends State<MyHomePage> {
CounterBloc _counterBlockSink;
@override
void dispose() {
super.dispose();
_counterBlockSink?.close();
}
@override
Widget build(BuildContext context) {
_counterBlockSink = BlocProvider.of<CounterBloc>(context);
TextEditingController txt = TextEditingController(text: ("asd"));
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child:
BlocBuilder<CounterBloc, CounterState>(builder: (context, state) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'${(state as CounterUpdatedState).count}',
style: Theme.of(context).textTheme.headline4,
),
],
);
}),
),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: () {
_counterBlockSink.add(DecrementEvent());
},
tooltip: 'Decrement',
child: Icon(Icons.remove),
),
SizedBox(
width: 10,
),
FloatingActionButton(
onPressed: () {
_counterBlockSink.add(IncrementEvent());
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
],
),
);
}
}
下一步,我要使用TextField
而不是Text
,这样我就可以在TextField中编写自定义值并将其解析为int
,但是我也可以可以按“增加”或“减少”按钮,然后我想看到TextField
会增加/减少的文本。
在以前的逻辑中,我曾经使用TextEditingController
并通过文本变量分配新值。
是否有一种聪明的方法可以直接通过Bloc封闭圈子?