Во второй части нашей FlutterIn5Series мы собираемся создавать виджеты за 5 простых шагов. В частности, мы собираемся создать информационную панель в AppBar вместе с простой нижней навигационной панелью, как показано на изображении ниже:

Поскольку мы уже создали список карт в прошлом, в этом посте предполагается, что у читателей уже есть код, необходимый для отображения списка карт. Если нет, ознакомьтесь с нашим постом, который поможет вам его создать:



Предпосылки:

  1. Код списка флаттер-карт из урок 1.
  2. typicons_flutter: ^0.2.1 dependency будет добавлен в pubspec.yaml. Мы собираемся использовать этот пакет для рендеринга значков, отображаемых на панели навигации внизу.

5 шагов по созданию панели инструментов Flutter ™ App Bar

›› Шаг 1. Создание базовой панели приложений

На этом этапе мы собираемся создать панель приложений и нижнюю панель навигации как два виджета.

Преимущества использования их в качестве виджетов:

  1. Возможность повторного использования
  2. Легко читаемый код

Сначала создайте пакет / папку с именем «widgets» в папке «lib». Создайте два файла с дротиками под виджетами -

  1. custom_app_bar.dart
  2. custom_bottom_bar.dart

Откройте custom_app_bar.dart и создайте виджет без сохранения состояния под названием «CustomAppBar» и импортируйте необходимые пакеты. Добавьте в виджет примесь, чтобы использовать класс PreferredStateWidget. Мы делаем это, потому что мы будем вызывать этот виджет в атрибуте appBar Scaffold.

Добавьте эту строку вне метода сборки виджета. Используя это, мы можем установить высоту нашего CustomAppBar.

@override
 // TODO: implement preferredSize
Size get preferredSize => Size.fromHeight(100.0);

Поскольку мы стремимся создать повторно используемую панель приложений, мы позволяем параметризовать несколько основных вещей, таких как t itle, ведущий значок и ab oolean value для отображения или скрыть приборную панель. Это дает нам возможность повторно использовать один и тот же AppBar, передав некоторые значения.

Затем мы объявляем три переменные подходящего типа и добавляем их в качестве параметров в CustomAppBar конструктор.

Ниже приведен код, включающий все вышеперечисленное:

Примечание. Мы объявили значения по умолчанию для title и bottomBar в конструкторе. Если мы передадим другое значение при вызове этого виджета, новое значение переопределит старое значение.

import ‘package:flutter/cupertino.dart’;
import ‘package:flutter/material.dart’;
class CustomAppBar extends StatelessWidget with PreferredSizeWidget {
 String title;
 IconData icon;
 bool bottomBar;
 
 //constructor
 CustomAppBar(
 {this.title = ‘Crypto Currency Dashboard’,
 this.icon = Icons.menu,
 this.bottomBar = true});
 
 @override
 Widget build(BuildContext context) {
 return AppBar(
 backgroundColor: Colors.white,
 elevation: 5,
 leading: IconButton(icon: Icon(icon)),
 actions: <Widget>[
 IconButton(
 icon: Icon(
 Icons.settings,
 color: Colors.black,
 ),
 ),
 ],
 );
 }
 
 @override
 // TODO: implement preferredSize
 Size get preferredSize => Size.fromHeight(100.0);
 }

›› Шаг 2. Добавьте заголовок и значки в нашу панель приложений.

На этом этапе мы добавим заголовок, ведущий значки и значки действий.

Добавьте приведенный ниже код в класс AppBar -

title: Text(
 title,
 style: TextStyle(color: Colors.black),
 ),
 leading: IconButton(
 icon: Icon(icon),
 color: Colors.black,
 ),
 actions: <Widget>[
 IconButton(
 icon: Icon(
 Icons.settings,
 color: Colors.black,
 ),
 ),
 ],

›› Шаг 3. Добавьте контент в AppBar

На этом этапе мы добавляем содержимое панели мониторинга, создавая строку с FlatButtons в качестве дочерних элементов.

Почему именно FlatButtons?

Преимущество использования FlatButtons заключается в том, что нам не нужно явно добавлять для него границу. Мы можем просто добавить цвет фона и добавить текст в дочерний элемент. Я пока не добавлял цвет фона. При желании они могут добавить этот код в FlatButton:

onPressed: (){},
 color: Color(0xFFE7EAED),

Без использования onPressed кнопка будет отключена. Следовательно, любой добавленный цвет не будет отображаться на кнопке.

Дополнительным преимуществом использования FlatButton является то, что в сценарии, когда необходимо создавать отдельные экраны, отображающие подробные данные о каждом виджете, мы просто добавляем код навигации в метод onPressed.

Затем мы добавляем приведенный ниже код в раздел dashboard.dart:

Widget moneyValues() {
 return Row(
 mainAxisAlignment: MainAxisAlignment.spaceEvenly,
 children: <Widget>[
 FlatButton(
 child: RichText(
 text: TextSpan(
 text: ‘\$6091.12’,
 style:
 TextStyle(fontWeight: FontWeight.bold, color: Colors.black,),
 children: [
 TextSpan(
 text: ‘\nTotal Value’,
 style: TextStyle(
 color: Colors.grey, fontWeight: FontWeight.bold))
 ]),
 ),
 ),
 FlatButton(
 child: RichText(
 text: TextSpan(
 text: ‘+13.18’,
 style:
 TextStyle(fontWeight: FontWeight.bold, color: Colors.green),
 children: [
 TextSpan(
 text: ‘\n24 Hour’,
 style: TextStyle(
 color: Colors.grey, fontWeight: FontWeight.bold))
 ]),
 ),
 ),
 FlatButton(
 child: RichText(
 text: TextSpan(
 text: ‘+676.25%’,
 style:
 TextStyle(fontWeight: FontWeight.bold, color: Colors.green),
 children: [
 TextSpan(
 text: ‘\nTotal Gain’,
 style: TextStyle(
 color: Colors.grey, fontWeight: FontWeight.bold))
 ]),
 ),
 )
 ],
 );
 }

Теперь вызовите этот метод из AppBar. Добавьте приведенный ниже код в класс AppBar. Вот как это выглядит:

bottom: PreferredSize(
 child: Column(
 children: <Widget>[
 bottomBar == true
 ? moneyValues()
 : SizedBox(
 height: 20,
 )
 ],
 )),

«Bottom» используется для добавления содержимого в нижнюю часть панели приложений.

За этим следует вызов CustomAppBar из Scaffold в dashboard.dart, как показано ниже:

home: Scaffold(
 appBar: CustomAppBar(),
 body: Container( 
 …
 );
 …
 );

›› Шаг 4. Создание виджета нижней панели

Чтобы создать виджет BottomBar, мы сначала открываем custom_bottom_bar..dart и создаем statelessWidget с именем CustomBottomBar и импортируем необходимые пакеты, показанные в приглашениях.

Затем верните виджет BottomBar в «методе сборки виджета» и добавьте «row» в качестве его дочернего элемента. Давайте посмотрим, как выглядит код для этого:

import ‘package:flutter/cupertino.dart’;
 import ‘package:flutter/material.dart’;
 
 class BottomNavBar extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 return BottomAppBar(
 child: Row(
 mainAxisSize: MainAxisSize.max,
 mainAxisAlignment: MainAxisAlignment.spaceEvenly,
 children: <Widget>[
 
 ],
 ),
 color: Colors.white,
 );
 }
 }

›› Шаг 5. Добавьте IconButtons в дочерние элементы.

На этом последнем шаге мы собираемся использовать пакет «Typicons» для добавления значков под дочерними элементами. Импортируйте то же самое в этом классе.

Приведенный ниже код отображает четыре значка:

IconButton(
 iconSize: 30.0,
 color: Colors.pinkAccent, //set color to mock active page color
 padding: EdgeInsets.only(left: 28.0),
 icon: Icon(Icons.wb_sunny),
 onPressed: () {},
 ),
 IconButton(
 iconSize: 30.0,
 padding: EdgeInsets.only(left: 28.0),
 icon: Icon(Typicons.arrow_shuffle),
 onPressed: () {},
 ),
 IconButton(
 iconSize: 30.0,
 padding: EdgeInsets.only(left: 28.0),
 icon: Icon(Icons.explore),
 onPressed: () {},
 ),
 IconButton(
 iconSize: 30.0,
 padding: EdgeInsets.only(left: 28.0),
 icon: Icon(Icons.account_balance_wallet),
 onPressed: () {},
 ),

За этим следует вызов CustomBottomBar из виджета Scaffold в dashboard.dart.

Для этого добавьте строку ниже в разделе Scaffold:

bottomNavigationBar: CustomBottomBar(),

Вот как выглядит результат:

Теперь мы успешно создали многоразовый AppBar с базовой панелью мониторинга и BottomBar.

Давай, попробуй себя и обязательно рассчитай время!

DLT Labs является товарным знаком DLT Global, Inc. Flutterявляется товарным знаком Google LLC, и его использование здесь не означает одобрения или принадлежности.

Автор - Арун Кашьяп Карри, DLT Labs

Об авторе: Арун Кашьяп Карри является активным учеником и увлеченным веб-разработчиком и разработчиком мобильных приложений. Он работал над Angular, Node.js, Flutter, RPA, Chatbots и еще несколькими технологиями. В DLT Labs Арун работал над такими приложениями, как Element DB, DL Certify (Mobile) и We Agree.

использованная литература

Https://dribbble.com/shots/3978619-Mobile-Cryptocurrency-Wallet

Https://dart.dev/guides/language/effective-dart/style