Size: a a a

Flutter Developers — русскоговорящее сообщество

2019 August 23

РА

Ренат Абайдулин in Flutter Developers — русскоговорящее сообщество
Kherel
забавное поведение
так в эмуляторе еще не такое бывает))
Включите performance overlay
источник

РА

Ренат Абайдулин in Flutter Developers — русскоговорящее сообщество
Ali Almas
any push notification framework for flutter
In Flutter, access this functionality using the firebase_messaging plugin.
For more information on using the Firebase Cloud Messaging API, see the firebase_messaging plugin documentation.
https://pub.dev/packages/firebase_messaging
источник

ND

Nikita Dauhashei in Flutter Developers — русскоговорящее сообщество
Kherel
никто не знает, как это можно победить?
Как минимум правильной настройкой анимации

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     debugShowCheckedModeBanner: false,
     title: 'Flutter Demo',
     theme: ThemeData(
       primarySwatch: Colors.blue,
     ),
     home: Scaffold(
       backgroundColor: Colors.blue,
       body: Test(),
     ),
   );
 }
}

class Test extends StatelessWidget {
 DateTime lastRender;

 get _duration {
   var now = DateTime.now();
   var defaultDelay = Duration(milliseconds: 100);
   Duration delay;

   if (lastRender == null) {
     lastRender = now;
     delay = defaultDelay;
   } else {
     var difference = now.difference(lastRender);
     if (difference > defaultDelay) {
       lastRender = now;
       delay = defaultDelay;
     } else {
       var durationOffcet = difference - defaultDelay;
       delay = defaultDelay + (-durationOffcet);
       lastRender = now.add(-durationOffcet);
     }
     return delay;
   }

   return defaultDelay;
 }

 @override
 Widget build(BuildContext context) {
   return ListView(
     children: List.generate(
       100,
       (index) => Item('item $index', _duration),
     ),
   );
 }
}

class Item extends StatefulWidget {
 const Item(this.text, this.duration);

 final Duration duration;
 final String text;

 @override
 _ItemState createState() => _ItemState();
}

mixin AfterLayoutMixin<T extends StatefulWidget> on State<T> {
 @override
 void initState() {
   super.initState();
   WidgetsBinding.instance
       .addPostFrameCallback((_) => afterFirstLayout(context));
 }

 void afterFirstLayout(BuildContext context);
}

class _ItemState extends State<Item> with AfterLayoutMixin<Item> {
 bool _visible = false;

 @override
 Widget build(BuildContext context) {
   return AnimatedOpacity(
     duration: widget.duration,
     opacity: _visible ? 1 : 0,
     child: Container(
       decoration: BoxDecoration(
         color: Colors.white,
         border: Border.all(
           width: 4,
           color: Colors.blueAccent,
         ),
       ),
       height: 80,
       child: Text(widget.text, style: TextStyle(fontSize: 20.0)),
     ),
   );
 }

 @override
 void afterFirstLayout(BuildContext context) {
   setState(() {
     _visible = true;
   });
 }
}
источник

M

Max in Flutter Developers — русскоговорящее сообщество
btw offcet -> offset
источник

K

Kherel in Flutter Developers — русскоговорящее сообщество
Nikita Dauhashei
Как минимум правильной настройкой анимации

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     debugShowCheckedModeBanner: false,
     title: 'Flutter Demo',
     theme: ThemeData(
       primarySwatch: Colors.blue,
     ),
     home: Scaffold(
       backgroundColor: Colors.blue,
       body: Test(),
     ),
   );
 }
}

class Test extends StatelessWidget {
 DateTime lastRender;

 get _duration {
   var now = DateTime.now();
   var defaultDelay = Duration(milliseconds: 100);
   Duration delay;

   if (lastRender == null) {
     lastRender = now;
     delay = defaultDelay;
   } else {
     var difference = now.difference(lastRender);
     if (difference > defaultDelay) {
       lastRender = now;
       delay = defaultDelay;
     } else {
       var durationOffcet = difference - defaultDelay;
       delay = defaultDelay + (-durationOffcet);
       lastRender = now.add(-durationOffcet);
     }
     return delay;
   }

   return defaultDelay;
 }

 @override
 Widget build(BuildContext context) {
   return ListView(
     children: List.generate(
       100,
       (index) => Item('item $index', _duration),
     ),
   );
 }
}

class Item extends StatefulWidget {
 const Item(this.text, this.duration);

 final Duration duration;
 final String text;

 @override
 _ItemState createState() => _ItemState();
}

mixin AfterLayoutMixin<T extends StatefulWidget> on State<T> {
 @override
 void initState() {
   super.initState();
   WidgetsBinding.instance
       .addPostFrameCallback((_) => afterFirstLayout(context));
 }

 void afterFirstLayout(BuildContext context);
}

class _ItemState extends State<Item> with AfterLayoutMixin<Item> {
 bool _visible = false;

 @override
 Widget build(BuildContext context) {
   return AnimatedOpacity(
     duration: widget.duration,
     opacity: _visible ? 1 : 0,
     child: Container(
       decoration: BoxDecoration(
         color: Colors.white,
         border: Border.all(
           width: 4,
           color: Colors.blueAccent,
         ),
       ),
       height: 80,
       child: Text(widget.text, style: TextStyle(fontSize: 20.0)),
     ),
   );
 }

 @override
 void afterFirstLayout(BuildContext context) {
   setState(() {
     _visible = true;
   });
 }
}
так не совсем правильно как вы сделали. мне надо чтобы они по одному появлялись
источник

K

Kherel in Flutter Developers — русскоговорящее сообщество
Ренат Абайдулин
так в эмуляторе еще не такое бывает))
Включите performance overlay
спасибо. буду пробывать
источник

K

Kherel in Flutter Developers — русскоговорящее сообщество
Nikita Dauhashei
Как минимум правильной настройкой анимации

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MaterialApp(
     debugShowCheckedModeBanner: false,
     title: 'Flutter Demo',
     theme: ThemeData(
       primarySwatch: Colors.blue,
     ),
     home: Scaffold(
       backgroundColor: Colors.blue,
       body: Test(),
     ),
   );
 }
}

class Test extends StatelessWidget {
 DateTime lastRender;

 get _duration {
   var now = DateTime.now();
   var defaultDelay = Duration(milliseconds: 100);
   Duration delay;

   if (lastRender == null) {
     lastRender = now;
     delay = defaultDelay;
   } else {
     var difference = now.difference(lastRender);
     if (difference > defaultDelay) {
       lastRender = now;
       delay = defaultDelay;
     } else {
       var durationOffcet = difference - defaultDelay;
       delay = defaultDelay + (-durationOffcet);
       lastRender = now.add(-durationOffcet);
     }
     return delay;
   }

   return defaultDelay;
 }

 @override
 Widget build(BuildContext context) {
   return ListView(
     children: List.generate(
       100,
       (index) => Item('item $index', _duration),
     ),
   );
 }
}

class Item extends StatefulWidget {
 const Item(this.text, this.duration);

 final Duration duration;
 final String text;

 @override
 _ItemState createState() => _ItemState();
}

mixin AfterLayoutMixin<T extends StatefulWidget> on State<T> {
 @override
 void initState() {
   super.initState();
   WidgetsBinding.instance
       .addPostFrameCallback((_) => afterFirstLayout(context));
 }

 void afterFirstLayout(BuildContext context);
}

class _ItemState extends State<Item> with AfterLayoutMixin<Item> {
 bool _visible = false;

 @override
 Widget build(BuildContext context) {
   return AnimatedOpacity(
     duration: widget.duration,
     opacity: _visible ? 1 : 0,
     child: Container(
       decoration: BoxDecoration(
         color: Colors.white,
         border: Border.all(
           width: 4,
           color: Colors.blueAccent,
         ),
       ),
       height: 80,
       child: Text(widget.text, style: TextStyle(fontSize: 20.0)),
     ),
   );
 }

 @override
 void afterFirstLayout(BuildContext context) {
   setState(() {
     _visible = true;
   });
 }
}
источник

ND

Nikita Dauhashei in Flutter Developers — русскоговорящее сообщество
У вас такая логика - я просто поправил анимацию (ибо её по факту небыло)
источник

ND

Nikita Dauhashei in Flutter Developers — русскоговорящее сообщество
Поэтому и казалось, что лагает
источник

K

Kherel in Flutter Developers — русскоговорящее сообщество
ну мне и не нужна анимация, просто я controller использую просто для задержки
источник

M

Max in Flutter Developers — русскоговорящее сообщество
lol
источник

ND

Nikita Dauhashei in Flutter Developers — русскоговорящее сообщество
Что-то странное )
источник

K

Kherel in Flutter Developers — русскоговорящее сообщество
🤷‍♂️
источник

T

Tim in Flutter Developers — русскоговорящее сообщество
Ребят, а кто нибудь использовал jaguar_query_sqflite? Я вот смотрю на доки и кажется, что проще свою надстройку сделать над sqflite
источник

ND

Nikita Dauhashei in Flutter Developers — русскоговорящее сообщество
Tim
Ребят, а кто нибудь использовал jaguar_query_sqflite? Я вот смотрю на доки и кажется, что проще свою надстройку сделать над sqflite
Как на счёт этого https://pub.dev/packages/moor_flutter ?
источник

T

Tim in Flutter Developers — русскоговорящее сообщество
Всё равно делать обертку
источник

T

Tim in Flutter Developers — русскоговорящее сообщество
источник

T

Tim in Flutter Developers — русскоговорящее сообщество
Но тут в доках не вижу ничего про транзакции (
источник

T

Tim in Flutter Developers — русскоговорящее сообщество
Пробовали исппользовать в проектах?
источник

ND

Nikita Dauhashei in Flutter Developers — русскоговорящее сообщество
Tim
Пробовали исппользовать в проектах?
Пробовал
источник