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));
}