質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Q&A

1回答

1824閲覧

【Flutter】スクロールした時のAppBarの背景色

suupusoup

総合スコア0

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

0グッド

0クリップ

投稿2024/08/05 01:27

実現したいこと

  • 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
  • 初心者でつたない部分もあるかと思いますが、温かい目でご覧いただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

eren1

2024/12/28 09:40 編集

◼︎原因 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
guest

回答1

0

AppBar/SliverAppBarのscrolledUnderElevationを0.0にする。
https://api.flutter.dev/flutter/material/AppBar/scrolledUnderElevation.html

このパラメータは、bodyにリストなどがありそれがAppBarに隠れるような状況の場合にAppBarを上昇したような視覚効果を与えるものということです。

これでだめだった場合surfaceTintColorをColors.transparentにするという方法もあるようです。

投稿2024/08/05 22:48

ta.fu

総合スコア1740

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問