Для анимации попробуйте использовать AnimatedBuilder
, это самый простой способ для анимации, но я думаю, это не решит вашу проблему.
Лично я всегда использую пакет провайдера, я не знаю, если вы тоже это делают.
Так что обычно firebase предоставляет вам поток данных (если вы используете его с облачными функциями, они разные)
Теперь вы можете использовать StreamBuilder
с Stream FireBase предоставляет вам и использовать данные потока. В этой версии перестройка виджета не приведет к подключению приложения к серверу и получению новых данных.
Если вы действительно хотите использовать ChangeNotifier
, вы можете использовать этот поток внутри ChangeNotifier
, слушайте к этому и всегда уведомляя слушателей об изменениях, которые произойдут с этой реализацией, также не будет никаких ненужных сетевых вызовов.
Некоторые примеры для второй версии:
class SomeNotifier extends ChangeNotifier {
List<MyData> dataList = [];
SomeNotifier() {
Firestore.instance.collection("MyCollection").snapshots().listen((data) {
dataList = data.documents.map((doc) => MyData.fromDoc(doc));
notifyListeners();
});
}
}
class _MyWidgetState extends State<MyWidget>
with SingleTickerProviderStateMixin {
AnimationController _controller;
@override
void initState() {
_controller = AnimationController(vsync: this);
super.initState();
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<SomeNotifier>(
create: (context) => SomeNotifier(),
child: AnimatedBuilder(
animation: _controller,
builder: (context, child) {
var notifier = Provider.of<SomeNotifier>(context);
return Container(); //Here you can use your animated widget, it will be rebuilt to animate propperly
//It will also rebuild every time data in firebase changes
},
),
);
}
}
I надеюсь, что это отвечает на ваш вопрос.