Чтобы объяснить это, я собираюсь использовать простой код, который обновляет текстовый виджет при каждом нажатии кнопки. Возможно, вы знаете, что есть два класса, на самом деле их три.
- Виджет без состояния
- Виджет с отслеживанием состояния
- Унаследованный виджет
Виджет без состояния неизменяем, и когда мы хотим изменить что-то, что отображается, нам нужно создать новый.
Stateful Widget является изменяемым и может взаимодействовать с пользователями. Когда мы хотим перерисовать/изменить что-то отображаемое, нам нужно использовать этот виджет. Чтобы использовать этот виджет, нам нужны два класса. И для перерисовки дисплея у нас есть вызов метода setState().
Унаследованный виджет представляет собой смесь обоих вышеперечисленных.
Я думаю, теперь вы понимаете, что это за виджет, который нам нужно использовать для этой ситуации. Это виджет с отслеживанием состояния. Вы правильно догадались?
Итак, вот полный код, и я объясню его один за другим.
import 'package:flutter/material.dart'; void main() => runApp(new MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( title: 'Converter App', theme: new ThemeData( primarySwatch: Colors.blue, ), home: new Scaffold( appBar: new AppBar( title: new Text('Converter App'), ), body: new Center( child: new Converter(), ), ) ); } } class Converter extends StatefulWidget { @override _ConverterWidget createState() => new _ConverterWidget(); } class _ConverterWidget extends State<Converter> { String value = "click Me"; @override Widget build(BuildContext context) { return new Column( children: <Widget>[ new Text(value), new RaisedButton( child: new Text('Click me'), onPressed: () { setState(() { value += ' Me'; }); }, ), ], ); } }
Первоначально опубликовано на сайте slcoderlk.blogspot.com 15 марта 2018 г.