モジュール性のために、アプリバーを別のクラスで次のように定義しました。
class HomeAppBar extends StatefulWidget implements PreferredSizeWidget{
HomeAppBar({Key key}) : preferredSize = Size.fromHeight(kToolbarHeight*0.8), super(key: key);
@override
final Size preferredSize; // default is 56.0
@override
_HomeAppBarState createState() => _HomeAppBarState();
}
class _HomeAppBarState extends State<HomeAppBar> {
@override
Widget build(BuildContext context) {
return Container(
//height: SizeConfig.blockSizeVertical * 20, // did not work well
child: AppBar(
backgroundColor: Colors.white,
leading: IconButton(
icon: Icon(Icons.account_circle, color: Colors.black) , onPressed: () => Scaffold.of(context).openDrawer()
),
title: Container(
//height: SizeConfig.blockSizeVertical * 20, // did not work well
child: TextField(
style: TextStyle(
//fontSize: 40,
//height: SizeConfig.blockSizeVertical * 1, // did not work well
),
onTap: () {
FocusScope.of(context).requestFocus(FocusNode());
Navigator.push(context, PageTransition(type: PageTransitionType.fade, child: Search()));
},
decoration: InputDecoration(
prefixIcon: Icon(Icons.search, color: Colors.black),
hintText: "Search...",
),
),
)
),
);
}
}
また、さまざまな画面サイズに合わせてアプリバーの高さを変更するSizeConfigクラスを作成しました。
import 'package:flutter/widgets.dart';
class SizeConfig {
static MediaQueryData _mediaQueryData;
static double screenWidth;
static double screenHeight;
static double blockSizeHorizontal;
static double blockSizeVertical;
void init(BuildContext context) {
_mediaQueryData = MediaQuery.of(context);
screenWidth = _mediaQueryData.size.width;
screenHeight = _mediaQueryData.size.height;
blockSizeHorizontal = screenWidth / 100;
blockSizeVertical = screenHeight / 100;
}
}
ホームページでsizeconfigを初期化します。
たくさん試しましたが、良い結果が得られませんでした。私が欲しいのは、アプリバーの高さをたとえば画面の高さの%10に設定することです。また、テキストフィールド(アプリバーのタイトル)の高さをアプリバーの高さに合わせて変更したいと思います。
私が達成したいのは、このアプリバーのより大きなバージョンです。
私が最終的に得たものはここにあります:
ご覧のとおり、ラベルのテキストサイズを大きくしようとすると、アイコンが整列せず、ヒントテキストも消えます。
@MickaelHrndzの回答をベースとして使用し、少しカスタマイズすることで問題を解決します。AppBarはいくつかの問題を引き起こすため、よりカスタマイズ可能なものを作成したい場合は、AppBarを使用しないでください。AppBarの代わりにSafeAreaを使用alignment: Alignment.center
し、領域が上から始まるように行を削除しました。
SafeArea(
child: Row(
children: <Widget>[
Flexible(
fit: FlexFit.tight,
flex: 1,
child: FittedBox(
child: IconButton(
icon: Icon(Icons.account_circle, color: Colors.black) , onPressed: () => Scaffold.of(context).openDrawer()
),
),
),
Flexible(
flex: 7,
child: Container(
child: TextField(
textAlignVertical: TextAlignVertical.center,
style: TextStyle(
),
onTap: () {
//FocusScope.of(context).requestFocus(FocusNode());
Navigator.push(this.context, MaterialPageRoute(builder: (context) => Search()));
},
decoration: InputDecoration(
prefixIcon: Icon(Icons.search, color: Colors.black),
hintText: "Search...",
),
),
),
)
],
),
);
その結果:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加