Herkese merhaba,
Geliştirmekte olduğum uygulamada sayfalar arasındaki geçişlerin yavaş veya kasılarak olmasını önlemenin veya neden kaynaklandığının bulmanın bir yolu var mıdır? Genelde sayfa üzerine eklediğim (textfield,listview ve dialog gibi) widgetları ayrı ayrı dart dosyalarında tutmak mı mantıklı olur. Sayfanın initState inde rest servisten çektiğim dataları da tutuyorum bundan da kaynaklı olabilir mi? Konu hakkında bir öneriniz varsa çok sevinirim. Şimdiden iyi kodlamalar
Sayfa geçişlerindeki yavaşlık
Evet hocam direk gerçek cihazda deniyorum hatta kablo ile bağlı direk cihaz üzerinde debug ediyorum. Dediğiniz gibi bide release çıktısı ile deneyeyim. Birde şöyle bir durum var bazı sayfalarda 20-30 adet widget kullanıyorum. Bunları ayrı dart dosyalarında tanımlayıp oradan çağırmak hızlandırabilir mi?
Flutter birkaç denemeden sonra bende aynı kanıya vardım hocam asıl sorunumu bi türlü çözemedim hala release çıktısı alamıyorum ama şununda farkına vardım bi yere kadar release çıktısı oluşuyor bunu kurduğumda uygulamada buttona tıklamadan sanki tıklayacağımı anlayıp ilerliyor gibi bi hız var bu kadar mı fark eder hız
- Edited
cakaros
Merhaba, Debug modu release moda gore çok çok yavaştır. Bunun yanında veri çekme islemlerini initstate yerine future/future builder kullanarak yapın. Uygulamanın yavaş gibi gözükmesine sebep olabilecek bir nokta var burda, halbuki servisten veri çekme islemi bitmemiştir. Mesela bir servisten liste alıp gösterilecek. iki yöntem ekledim. ikinci yöntemde veriler alinana kadar indicator gösterilecek, birinci yontemde ise veriler alinana kadar kullanıcı boş sayfaya bakacak bu da uygulamanın donması gibi gözükecek.
Birinci yontem
class XWidget extends StatefulWidget {
@override
_XWidgetState createState() => _XWidgetState();
}
class _XWidgetState extends State<XWidget> {
List<String> xList = List();
getDataFromService() async {
xList = await apiManager.getXData();
}
@override
void initState() {
super.initState();
getDataFromService();
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: xList.length,
itemBuilder: (BuildContext context, int index) {
return Text(xList[index]);
},
);
}
}
ikinci yöntem
class XWidget extends StatefulWidget {
@override
_XWidgetState createState() => _XWidgetState();
}
class _XWidgetState extends State<XWidget> {
// List<String> xList = List();
getDataFromService() async {
return await apiManager.getXData();
}
@override
void initState() {
super.initState();
// getDataFromService();
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: getDataFromService(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done &&
snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context,int index) {
return ListTile(title: Text(snapshot.data[index]),);
},
);
} else {
return CircularProgressIndicator();
}
});
}
}
yasintuncel çok sağolasın hocam ben genelde birinci yöntemi kullanıyorum. Uygulamada aynı sayfada birden fazla servisi çağırıyorum birbirlerine whencomplete ile bağlıyorum progressindicator içinde ModalProgressHUD kullanıyorum bool bi değişkeni true ile başlatıp son serviste false çekip bitiriyorum. Ekranı kilitlemek içinde güzel bi yöntem oluyor.