• Yardım
  • Sayfa geçişlerindeki yavaşlık

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 🙂

cakaros Merhaba,
aslında daha önce karşılaşmadığım bir sorun bu 🙂
gerçek cihazda da denediniz değilmi.
Gerçek cihazda flutter build apk –release çıktısı ile deneyin istersenz

    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?

    cakaros Çok etkisi olacağını zannetmiyorum. Muhtemelen debug olduğu için ağırdır.

    Flutter hocam şimdide release çıktısı alamıyorum android_intent kütüphanesini kullanıyorum ondan dolayı hatalar alıyorum. Gradle, google-service ve kotlin versiyonunu update ettim ama bu seferde proje çok fazla hata vermeye başladı.

    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 😃

    cakaros Debug modda ağırdı ya
    release size çok hızlı geliyor 🙂
    Ayrıca gerçekten hızlı. Çünkü 60FPS abi 😃

      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.

        Write a Reply...