Futterは、一般的なページフレームを構築します。
最終的に実現した結果は上の図のように、上の方にナビゲーションバーがあります。下の方には4つのアイコンがあります。対応するアイコンをクリックして、対応するページにジャンプします。
アイコンの準備
今回のルーチンは4つのアイコン、2つの色が必要です。そしてpbspec.yamlの中のクラスメイトに素材の所在目録を指定します。注意したいのは、pngファイルであればディレクトリ全体を直接指定すればいいですが、jpgフォーマットであれば、ファイル名と拡張子を同時に指定する必要があります。
Bottom NavigationBar概要
Bottom NavigationBarの構造関数は以下の通りである。
BottomNavigationBar({
Key? key,
required this.items,
this.onTap,
this.currentIndex = 0,
this.elevation,
this.type,
Color? fixedColor,
this.backgroundColor,
this.iconSize = 24.0,
Color? selectedItemColor,
this.unselectedItemColor,
this.selectedIconTheme,
this.unselectedIconTheme,
this.selectedFontSize = 14.0,
this.unselectedFontSize = 12.0,
this.selectedLabelStyle,
this.unselectedLabelStyle,
this.showSelectedLabels,
this.showUnselectedLabels,
this.mouseCursor,
})
一般的な属性は以下の通りです。プロジェクトページ構造の構築
まず、4つの業務ページを新たに作って、それぞれdynamic.dart、message.dart、category.dartとmine.dartと、それぞれ動態、メッセージ、分類閲覧と個人センターの4つのページに対応します。この四つのページは簡単です。ページの真ん中に「島上コード農」という四つの文字が順次表示されます。コードは似ています。dynamicを例にします。
import 'package:flutter/material.dart';
class DynamicPage extends StatelessWidget {
const DynamicPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text(' '),
),
);
}
}
注意するのはここのScaffoldはAppBarがないです。これはトップページにすでにありますので、AppBarがあると二つが現れます。第二に、四つの業務ページを管理するためのトップページを新設し、ap.dartと名づけました。app.dartはBottom NavigationBarを使用して四つの業務ページを管理します。
import 'package:flutter/material.dart';
import 'dynamic.dart';
import 'message.dart';
import 'category.dart';
import 'mine.dart';
class AppHomePage extends StatefulWidget {
AppHomePage({Key key}) : super(key: key);
@override
_AppHomePageState createState() => _AppHomePageState();
}
class _AppHomePageState extends State<AppHomePage> {
int _index = 0;
List<Widget> _homeWidgets = [
DynamicPage(),
MessagePage(),
CategoryPage(),
MinePage(),
];
void _onBottomNagigationBarTapped(index) {
setState(() {
_index = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(' '),
),
body: IndexedStack(
index: _index,
children: _homeWidgets,
),
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
currentIndex: _index,
onTap: _onBottomNagigationBarTapped,
items: [
_getBottomNavItem(
' ', 'images/dynamic.png', 'images/dynamic-hover.png', 0),
_getBottomNavItem(
' ', 'images/message.png', 'images/message-hover.png', 1),
_getBottomNavItem(
' ', 'images/category.png', 'images/category-hover.png', 2),
_getBottomNavItem(
' ', 'images/mine.png', 'images/mine-hover.png', 3),
],
),
);
}
BottomNavigationBarItem _getBottomNavItem(
String title, String normalIcon, String pressedIcon, int index) {
return BottomNavigationBarItem(
icon: _index == index
? Image.asset(
pressedIcon,
width: 32,
height: 28,
)
: Image.asset(
normalIcon,
width: 32,
height: 28,
),
label: title,
);
}
}
ここで重要なところは二つあります。一つはIndexedStockを使っています。これは管理ページで階層を表示する容器です。index属性を使用して、現在のコンテナの中のページが一番上にあると確定します。容器の中のページはchildren属性で設定されています。Widget配列が必要です。したがって、論理とは、Bottom NavigationBarのアイコンがクリックされると、クリックイベントに対応してonTap属性が指定する方法で、現在のクリックインデックス値をコールバック関数に伝達するので、この方法でIndexedStockのページレベルの切り替えを制御することができます。最後に、状態変数(u)を使用しました。indexは、Indexedstatckが現在表示しているページのインデックス値を記憶しています。その後、Bottom NavigationBarのアイコンをクリックしてイベントが発生したら、リセット関数でset Stateを使って状態変数を更新します。indexは現在のインターフェースを更新します。
入り口を簡略化する
main.dartは入り口のファイルで、最も基本的な配置とグローバル初期化の配置をすべきで、業務コードがあるべきではないので、main方法からトップページをロードすればいいです。このようにしてメール・dartファイルを簡潔にすることができます。これも開発の際に注意すべき点であり、関連コードを剥離し、関連コードを集約する、いわゆる「高凝集、低結合」の原則である。
import 'package:flutter/material.dart';
import 'app.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'App ',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AppHomePage(),
);
}
}
コード多重化コードを書く時は多重化に注意して、ここでBottom NavigationBar元素を構築します。get Bottom NavItemは、コードの多重性と維持性を向上させ、Futterのコンポーネント構築のbuild方法に過剰な要素と入れ子が発生し、コードの可読性に影響を与えることを回避することができる。
以上はFutterが一般的なページフレームを構築するための詳細な内容です。Futterに関するページフレームを構築するための資料は他の関連記事に注目してください。