🍟
透明のSnackBarを作ってみた!
💡Tips
ボタンを押すと、check iconがあるスナックバーってありませんか?
それを出してみたいと思った。背景色は透明なのかな...
薄いブラックで、その中にRowでラップして、iconとTextを表示するので、再現してみました。
withOpacity
が非推奨になったので、withValues
に修正いたしました。
新しいコード
example
main.dart
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
),
home: const SnackBarWidget(),
);
}
}
class SnackBarWidget extends StatelessWidget {
const SnackBarWidget({super.key});
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('SnackBar Demo')),
body: Center(
child: ElevatedButton(
onPressed: () {
final snackBar = SnackBar(
backgroundColor: Colors.black.withValues(alpha: 0.3),
content: Row(
children: [
DecoratedBox(
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(color: Colors.white, width: 2),
),
child: const CircleAvatar(
backgroundColor: Colors.transparent,
child: Icon(Icons.check, color: Colors.white),
),
),
const SizedBox(width: 10),
const Text('コメントを送信しました'),
],
),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
},
child: const Text('Show SnackBar'),
),
),
);
}
}
以前のコード
SnackBar(
backgroundColor: Colors.black.withOpacity(0.3),
content: Row(
children: [
DecoratedBox(
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
color: Colors.white,
width: 2,
),
),
child: const CircleAvatar(
backgroundColor: Colors.transparent,
child: Icon(
Icons.check,
color: Colors.white,
),
),
),
const SizedBox(width: 10),
const Text('コメントを送信しました'),
],
),
),
コードの説明をすると、Containerでiconの白い枠線を再現しています。CircleAvatarを使用して、icon Widgetを丸くして背景色を透明にしてます。これで、外枠が白のcheck iconが作れます。
こんな感じになります。
もしWebページでよく見かける緑の丸のiconが欲しい時は、こっちを使ってみてください。
CircleAvatar(
backgroundColor: Colors.green,
child: Icon(
Icons.check,
color: Colors.white,
),
)
Discussion