import 'dart:ui'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import '../../utils/ui_utils.dart'; import 'package:flutter_boost/flutter_boost.dart'; void popPage(BuildContext context) { if (Navigator.canPop(context)) { Navigator.of(context).pop(); } else { //uiMethodChannel.invokeMethod("popPage", ""); print("popPage"); BoostNavigator.instance.pop(""); } } class TopNavBar extends StatelessWidget { final String title; GestureTapCallback? back; GestureTapCallback? leftWidgetClick; String? rightText; String? leftText; Widget? leftWidget; Icon? rightIcon; Image? rightImage; GestureTapCallback? rightClick; final Color textColor; final Color backGround; final Image backIcon; TopNavBar( {required this.title, this.back, this.rightText, this.rightIcon, this.leftWidget, this.leftWidgetClick, this.rightImage, this.leftText = "", this.rightClick, this.textColor = const Color(0xFF333333), this.backGround = Colors.white, this.backIcon = const Image( image: AssetImage( "assets/imgs/common/icon_back.png", ), height: 19)}); @override Widget build(BuildContext context) { return Flex(direction: Axis.vertical, children: [ Container( height: MediaQuery.of(context).viewPadding.top, color: backGround, ), Container( color: backGround, height: 48, child: Stack( alignment: Alignment.centerLeft, children: [ Positioned( child: Container( alignment: Alignment.center, child: Flex( direction: Axis.horizontal, mainAxisAlignment: MainAxisAlignment.center, children: [ Container( width: 50, ), Expanded( child: Center( child: Text( title, maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 18, color: textColor), ))), Container( width: 50, ) ], ))), ((rightText != null && rightText!.isNotEmpty) || rightIcon != null || rightImage != null) ? Positioned( right: 0, top: 0, bottom: 0, child: InkWell( onTap: () { rightClick!(); }, child: Container( alignment: Alignment.center, padding: const EdgeInsets.only(right: 10), child: rightIcon ?? (rightImage ?? Text( rightText!, style: TextStyle( fontSize: 15, color: textColor), )), ))) : Container(), InkWell( onTap: () { if (back != null) { back!(); } else { popPage(context); } }, child: Container( padding: const EdgeInsets.only(left: 10), height: 48, child: Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ Icon( Icons.arrow_back_ios, color: textColor, ), leftText!.isNotEmpty ? Text( leftText!, style: const TextStyle(fontSize: 16), ) : Container(), leftWidget == null ? Container() : InkWell( onTap: () { if (leftWidgetClick == null) { return; } leftWidgetClick!(); }, child: leftWidget!, ) ]), )) ], ), ) ]); } }