🐁
AppBarなくしたいけど戻るボタン欲しい
良い解決方法を見つけた!
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