🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / FLUTTER / SliverList SliverAppBar vs kullanımı

1-) FLUTTER - SliverList SliverAppBar vs kullanımı

 

SONRADAN EKLEDİM GÜZEL GİBİ bunuda kullan -> https://www.roketnot.com/not/1435-basit-hero-animations-kullanimi

 

import 'package:flutter/material.dart';

import '../anasayfa_model.dart';

class GeciciPage extends StatefulWidget {
  
AnasayfaModel currentModel;

  
GeciciPage({required this.currentModel, Key? key}) : super(key: key);

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

class _MemnuniyetMainPageState extends State<GeciciPage> {
  
@override
  
Widget build(BuildContext context) {
    
return SafeArea(
      child:
Container(
        child:
CustomScrollView(
          slivers: <
Widget>[
            
SliverAppBar(
              expandedHeight:
100.0,
              pinned:
true,
              flexibleSpace:
FlexibleSpaceBar(
                title:
Column(
                  mainAxisAlignment:
MainAxisAlignment.end,
                  crossAxisAlignment:
CrossAxisAlignment.start,
                  children:  <
Widget>[
                    
Text(widget.currentModel.ad,style: TextStyle(fontSize: 13)),
                    
Text('', style: TextStyle(fontSize: 10)),
                  ],
                ),
                background:
Hero(
                  tag:
'location-img-${widget.currentModel.logo}',
                  child:
Image.asset(
                    
"assets/images/${widget.currentModel.logo}.png",
                    height:
70,
                    alignment:
Alignment.centerRight,
                  ),
                ),
              ),
            ),
            
SliverList(
              delegate:
SliverChildBuilderDelegate(
                    (_,
int index) {
                  
return Container();
                },
                childCount:
1,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

 

DİĞER

body: Container(
  child:
CustomScrollView(
    slivers: <
Widget>[
      
SliverAppBar(
        expandedHeight:
250.0,
        pinned:
true,
        flexibleSpace:
FlexibleSpaceBar(
          title:
Text('Goa', textScaleFactor: 1),
          background:
Image.asset(
            
'assets/images/rmos.png',
            fit:
BoxFit.fill,
          ),
        ),
      ),
      
SliverList(
        delegate:
SliverChildBuilderDelegate(
          (_,
int index) {
            
return ListTile(
              leading:
Container(
                  padding:
EdgeInsets.all(8),
                  width:
100,
                  child:
Placeholder()),
              title:
Text('Place ${index + 1}', textScaleFactor: 2),
            );
          },
          childCount:
20,
        ),
      ),
    ],
  ),
),

 

 

kaynak : https://blog.logrocket.com/how-to-add-sliverappbar-to-your-flutter-app/

 

 

 

SliverGrid.count u da kullabilirsin

 

 

*******************DİĞERİ BU DAHA GÜZEL ***************************

pubspec.yaml' a resmin rengine göre appbarın rengini yapar ekle -> palette_generator: 0.3.3

 

import 'package:flutter/material.dart';
import 'package:palette_generator/palette_generator.dart';

import '../model/burc.dart';

class BurcDetay extends StatefulWidget {
  
final Burc secilenBurc;
  
const BurcDetay({required this.secilenBurc, Key? key}) : super(key: key);

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

class _BurcDetayState extends State<BurcDetay> {
  
Color appbarRengi = Colors.transparent;
  
late PaletteGenerator _generator;

  
@override
  
void initState() {
    
super.initState();

    print(
'init state çalıstıktan sonra');
    
WidgetsBinding.instance!.addPostFrameCallback((_) => appbarRenginiBul());
    
// _generator = PaletteGenerator.fromImageProvider(AssetImage(assetName));
  
}

  
@override
  
Widget build(BuildContext context) {
    print(
'build çalıstı');
    
return Scaffold(
        body:
CustomScrollView(
      slivers: [
        
SliverAppBar(
          expandedHeight:
250,
          pinned:
true,
          backgroundColor:
appbarRengi,
          flexibleSpace:
FlexibleSpaceBar(
            title:
Text(widget.secilenBurc.burcAdi + " Burcu ve Özellikleri"),
            centerTitle:
true,
            background:
Image.asset(
              
'images/' + widget.secilenBurc.burcBuyukResim,
              fit:
BoxFit.cover,
            ),
          ),
        ),
        
SliverToBoxAdapter(
          child:
Container(
            margin:
EdgeInsets.all(16),
            padding:
EdgeInsets.all(8),
            child:
SingleChildScrollView(
              child:
Text(
                
widget.secilenBurc.burcDetayi,
                style:
Theme.of(context).textTheme.subtitle1,
              ),
            ),
          ),
        ),
      ],
    ));
  }

  
void appbarRenginiBul() async {
    print(
'build bitti baskın renk bulunacak');
    
_generator = await PaletteGenerator.fromImageProvider(
        
AssetImage('assets/images/${widget.secilenBurc.burcBuyukResim}'));
    
appbarRengi = _generator.vibrantColor!.color;
     print(
'baskın renk bulundu build metotu tekrar calıstırılacak');
    setState(() {});
    print(
appbarRengi);
  }
}

 

 

****AÇIKLAMA****

 

Aşağıdaki kod initstate çalıştıktan yani build edildikten sonra çalışan kod demek

 

WidgetsBinding.instance!.addPostFrameCallback((_) => appbarRenginiBul());

@override
void initState() {
  
super.initState();

  print(
'init state çalıstı');
  
WidgetsBinding.instance!.addPostFrameCallback((_) => appbarRenginiBul());
  
// _generator = PaletteGenerator.fromImageProvider(AssetImage(assetName));
}

 

 2022 Mart 02 Çarşamba
 359