実現したいこと
- Flutterでbody部分の要素をスクロールした時にAppBarの色が変わらないようにしたい
前提
現在、Flutterでアプリを作成しています。
AppBarとbody部分にListView.builderを利用して、AppBarとリストの要素を一覧で表示できるような仕様にしています。
そして、Bodyのリストの要素を下にスクロールすると、AppBarの色が微妙に変化してしまう点が気になっており、可能であれば、スクロールしてもAppBarの色を変化させないようにしたいです。
発生している問題・エラーメッセージ
(前述と同様に)Bodyのリストの要素を下にスクロールすると、AppBarの色が微妙に変化してしまう
該当のソースコード
Dart
1import 'package:flutter/material.dart'; 2 3void main() => runApp(MyApp()); 4 5class MyApp extends StatelessWidget { 6 7 Widget build(BuildContext context) { 8 return MaterialApp( 9 title: 'Flutter Demo', 10 theme: ThemeData( 11 primarySwatch: Colors.blue, 12 ), 13 home: Scaffold( 14 /* SliverAppBar適用前のコード 15 // appBar: AppBar( 16 // title: Text('Flutter Demo'), 17 // ), 18 // body: ListView( 19 // children: <Widget>[ 20 // Text('Item 1', style: TextStyle(fontSize: 40)), 21 // Text('Item 2', style: TextStyle(fontSize: 40)), 22 // Text('Item 3', style: TextStyle(fontSize: 40)), 23 // Text('Item 4', style: TextStyle(fontSize: 40)), 24 // Text('Item 5', style: TextStyle(fontSize: 40)), 25 // ], 26 // ) 27 */ 28 body: NestedScrollView( 29 headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { 30 return <Widget>[ 31 SliverAppBar( 32 floating: true, 33 pinned: true, 34 backgroundColor: Colors.blue.withOpacity(1.0), 35 flexibleSpace: FlexibleSpaceBar( 36 title: Text('Flutter Demo'), 37 ), 38 ), 39 ]; 40 }, 41 body: MyListView(), 42 ), 43 ), 44 ); 45 } 46} 47 48class MyListView extends StatelessWidget { 49 50 Widget build(BuildContext context) { 51 return ListView.builder( 52 itemCount: 100, 53 itemBuilder: (context, index) { 54 return ListTile( 55 title: Text('Item $index'), 56 ); 57 }, 58 ); 59 } 60}
試したこと
ChatGPTやGeminiに相談し
- 「SliverAppBar」を利用する
- AppBarの透明度をwithOpacity(1.0)にして無くす
の2点を行いましたが、解決しませんでした。
補足情報(FW/ツールのバージョンなど)
- リストFlutterのバージョンは、次の通りです:
% flutter --version Flutter 3.22.2 • channel stable • https://github.com/flutter/flutter.git Framework • revision 761747bfc5 (9 weeks ago) • 2024-06-05 22:15:13 +0200 Engine • revision edd8546116 Tools • Dart 3.4.3 • DevTools 2.34.3
- 初心者でつたない部分もあるかと思いますが、温かい目でご覧いただければ幸いです。
◼︎原因
flutterのバージョンが3.16以上だと「Material3」がデフォルトで有効になってしまうことによる影響みたいです。
◼︎解決方法
main.dartの下記widgetのuseMaterial3: false,を追加すれば、スクロール時にAppBarの色の問題が解消されるはずです!
例
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
useMaterial3: false,
),
home: const TopPage(),
);
参考サイト
https://minpro.net/note-for-flutter-3-16-material-3
