🐁

AppBarなくしたいけど戻るボタン欲しい

2023/03/27に公開

良い解決方法を見つけた!

FlutterでAppBarなしにしたいけど、戻るボタンが使えなくなってしまう🤔
どうすればいいのか?
背景色が白だから、同じにすれば誤魔化せるのではないか?
でもAppBarを白にしただけでは、影がついていてこれだけでは、解決できません。

こちらのコードを追加して、AppBarの色を白にして影をなくしてみる。

Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
          appBarTheme: const AppBarTheme(
        backgroundColor: Colors.white,
        centerTitle: true,// Androidの端末のときはタイトルを中央寄せにする
        elevation: 0,// 影をなくす
      )),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );

でもこれだけでは、色が同じにならなかった!
アプリの画面の背景色に薄いグレーが混ざっている。なので、背景色が白になるように指定する。
こんな感じです

Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,// 背景色に白を指定
      appBar: AppBar(),
      body: Center(
        child: Column(

こちらが色々テクニックを使ってAppBarがないように見せかけた画面。

main.dart
import 'package:flutter/material.dart';
import 'package:widget_example/next_page.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
          appBarTheme: const AppBarTheme(
        backgroundColor: Colors.white,
        centerTitle: true,
        elevation: 0,
      )),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
      Navigator.of(context)
          .push(MaterialPageRoute(builder: (context) => const NextPage()));
    });
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

こんな画面になります。フローティングアクションボタンを押すと、次のページへ画面遷移します。

次のページ

最近流行りのアプリはAppBarがないらしいですが、ドロワーがついていたり、戻るボタンが表示されたり、透明のAppBarらしきものがあるように見えるので、実際はついているのかも?

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

class NextPage extends StatelessWidget {
  const NextPage({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: const [Text('NextPage')],
        ),
      ),
    );
  }
}

まとめ

AppBarと背景色の色を揃えて、なんとか誤魔化しましたが、もしこれが地図アプリだったら、AppBarは透明にしないとダサくなってしまうかもしれないですね😅
ボトムナビゲーションバーで切り替えるページならば大丈夫かもしれないですね。

Discussion