Я изучаю флаттер, и недавно я создал этот очень простой пример лампочки ( Проблемы при использовании пакета провайдера флаттера ).
Я понимаю, что любое приложение может использовать виджеты Consumer и Stateless с основным приложением Home, обеспечивающим все эти модели данных, полностью пропуская виджеты Stateful. Вот небольшой пример
class Data with ChangeNotifier {
bool isOn = false;
void toggle() {
this.isOn = !this.isOn;
notifyListeners();
}
}
class MainApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("main app");
return ChangeNotifierProvider<Data>(
create: (context) => Data(),
child: MaterialApp(
home: Home(),
),
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("home");
return Consumer<Data>(
builder: (context , data , child) => Scaffold(
appBar: AppBar(),
backgroundColor:
data.isOn ? Colors.yellow[100] : Colors.black,
body: Center(
child: Column(
children: <Widget>[
Stick(),
Bulb(),
Switch()
],
),
),
),
);
}
}
class Bulb extends StatelessWidget {
@override
Widget build(BuildContext context) {
print("bulb");
return Consumer<Data>(
builder: (context , data , child) => Container(
height: 200,
width: 250,
decoration: BoxDecoration(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(100),
topRight: Radius.circular(100),
bottomLeft: Radius.circular(30),
bottomRight: Radius.circular(30)),
boxShadow: data.isOn? <BoxShadow>[BoxShadow(spreadRadius: 5,color: Colors.orange , blurRadius: 100)] : null,
color: data.isOn ? Colors.yellow : Colors.white,
),
child: GestureDetector(
onTap: () {
data.toggle();
},
),
),
);
}
}
Итак, с учетом сказанного, правильно ли я пришел к выводу, что виджеты «Провайдер» и «без состояний» могут полностью заменить виджеты с «Stateful»? Если да, то будет ли это хорошей идеей?
Пожалуйста, укажите также места, где используются виджеты с отслеживанием состояния и где используются провайдеры.
Спасибо за ваше время и мысли по этому поводу.