// import 'package:discover_module/constants.dart'; // import 'package:discover_module/custom_widget/text.dart'; // import 'package:discover_module/ui_screen/engagementtab.dart'; // import 'package:discover_module/ui_screen/interactionform/model/save_interaction.dart'; // import 'package:discover_module/ui_screen/k2api_integrated_ui/activityk2_tab.dart'; // import 'package:discover_module/ui_screen/k2api_integrated_ui/locationk2_tab.dart'; // import 'package:discover_module/ui_screen/newformlist.dart'; import 'package:discover_module/contacts_module/constants.dart'; import 'package:discover_module/contacts_module/custom_widget/text.dart'; import 'package:discover_module/contacts_module/ui_screen/engagementtab.dart'; import 'package:discover_module/contacts_module/ui_screen/interactionform/model/save_interaction.dart'; import 'package:discover_module/contacts_module/ui_screen/k2api_integrated_ui/activityk2_tab.dart'; import 'package:discover_module/contacts_module/ui_screen/k2api_integrated_ui/locationk2_tab.dart'; import 'package:discover_module/contacts_module/ui_screen/newformlist.dart'; import 'package:flutter/material.dart'; import 'package:flutter_profile_picture/flutter_profile_picture.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:url_launcher/url_launcher.dart'; class NewProfile1 extends StatefulWidget { const NewProfile1({Key? key, required this.text}) : super(key: key); final Map text; @override State createState() => _NewProfileState(); } class _NewProfileState extends State with TickerProviderStateMixin { List viewformData = []; bool _isExpanded = false; var item; TextEditingController firstNameController = TextEditingController(); final ScrollController _scrollController = ScrollController(); late final TabController _tabController; @override void initState() { super.initState(); print("pooja123"); //init(); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { _tabController = TabController(length: 3, vsync: this); }); } @override void dispose() { _tabController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return DefaultTabController( length: 3, child: SafeArea( child: headerview(context), ), ); // }); } Widget headerview(BuildContext context) { return SafeArea( child: Scaffold( backgroundColor: Constants.bgcolor, body: Stack( children: [ Container( // color: Colors.blue, child: Column( children: [ getAppBarUI(), Expanded( child: NestedScrollView( controller: _scrollController, headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [ SliverList( delegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return Column( children: [ buildCardView( context, ) ], ); }, childCount: 1), ), SliverPersistentHeader( pinned: true, floating: true, delegate: ContestTabHeader( Container( //color: Constants.bgcolor2, decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.bottomCenter, end: Alignment.topCenter, colors: [ Constants.tabbgColor, Constants.k2color, ]), ), child: TabBar( indicatorColor: Colors.white, labelColor: Colors .white, // Color of the selected tab text unselectedLabelColor: Colors.black, // unselectedLabelColor: // Color.fromARGB(255, 163, 159, 159), tabs: [ // Tab(text: "Sentiment"), Tab( child: Text1( title: "Details", txtfont: 15.0, ), ), Tab( child: Text1( title: "Activities", txtfont: 15.0, ), ), Tab( child: Text1( title: "Engagements", txtfont: 15.0, ), ), ], ), ), ), ) ]; }, body: TabBarView( //controller: _tabController, children: [ // LocationTab(text: widget.text["id"]), LocationK2Tab(text: widget.text["id"]), // Activities(text: widget.text["id"]), ActivitiesK2(text: widget.text["id"]), EngagementTab(text: widget.text["id"]), ], ), ), ) ], ), ), ], ), floatingActionButton: Visibility( visible: true, child: FloatingActionButton( onPressed: () async { Navigator.push( context, MaterialPageRoute(builder: (context) => FormList())); }, foregroundColor: Colors.white, backgroundColor: const Color.fromARGB(255, 0, 71, 132), child: new Icon(Icons.add), ), ), ), ); } buildCardView(BuildContext context) { MediaQuery.of(context).size.height * 0.35; return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Stack( clipBehavior: Clip.none, alignment: Alignment.center, children: [ Container( width: MediaQuery.of(context).size.width, // Adjust width as needed height: 110, // Adjust height as needed decoration: BoxDecoration(color: Constants.k2color), child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ Text1( title: widget.text!["name"], txtcolor: Colors.white, fontweight: FontWeight.normal, txtfont: 20.0), Text1( title: widget.text!["speciality"], txtcolor: Colors.white, fontweight: FontWeight.normal, txtfont: 14.0), ], ), ), Positioned( bottom: -45, child: Container( child: widget.text["img_path"] == "" ? ProfilePicture( name: widget.text!["name"], radius: 48, fontsize: 21, ) : ClipOval( child: SizedBox.fromSize( size: Size.fromRadius(48), child: CachedNetworkImage( imageUrl: widget.text!["img_path"], imageBuilder: (context, imageProvider) => Container( decoration: BoxDecoration( image: DecorationImage( image: imageProvider, fit: BoxFit.fill, ), ), ), ), ), ), ), ) ], ), SizedBox( height: 55.0, ), _ProfileInfoRow(text: widget.text["id"]), locandpnoinfo(), const SizedBox( height: 5.0, ), Align( alignment: Alignment.centerLeft, child: Padding( padding: const EdgeInsets.only(left: 8.0), child: Text1( title: "Profile Summary", txtcolor: Colors.black, fontweight: FontWeight.normal, txtfont: 18.0), ), ), const SizedBox( height: 5.0, ), Align( alignment: Alignment.centerLeft, child: Padding( padding: const EdgeInsets.only(left: 15.0), child: Text1( title: widget.text!["summarry"], txtcolor: Colors.black, fontweight: FontWeight.normal, txtfont: 14.0), ), ), SizedBox( height: 10.0, ), ListTileTheme( dense: true, child: Padding( padding: const EdgeInsets.only(left: 8.0, right: 8.0), child: Card( margin: EdgeInsets.all(1.0), // elevation: 5, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(0.0), ), color: Constants.k2color11, child: ExpansionTile( // collapsedBackgroundColor: Color(0xFF2b9af3), onExpansionChanged: (bool expanded) { setState(() { _isExpanded = expanded; }); }, backgroundColor: Constants.k2color11, trailing: Icon( _isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down, color: Colors.black), title: Row( mainAxisAlignment: MainAxisAlignment.start, // mainAxisSize: MainAxisSize.min, children: [ Text1( title: "Notes", txtcolor: Colors.black, fontweight: FontWeight.normal, txtfont: 17.0), const SizedBox( width: 8.0, ), Text1( title: "(0)", txtcolor: Colors.black, fontweight: FontWeight.normal, txtfont: 17.0), ], ), children: [ Padding( padding: const EdgeInsets.all(8.0), child: TextField( decoration: InputDecoration( border: OutlineInputBorder( borderRadius: BorderRadius.circular(8.0), ), hintText: 'Write your note here', contentPadding: EdgeInsets.all(16.0), ), maxLines: null, // Allows the TextField to expand vertically ), ), Padding( padding: const EdgeInsets.all(8.0), child: OutlinedButton( onPressed: () { // Navigator.push( // context, // MaterialPageRoute( // builder: (_) => PublicationsData())); }, child: Text( 'Save', style: TextStyle(color: Constants.k2color), ), style: OutlinedButton.styleFrom( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), ), ), ]), ), ), ), // adds spacing between the text and image SizedBox( height: 10.0, ), ], // ), ); } void bottomshet(affiliation_data) { // print("Aff_index_data: ${affiliation_data}"); showModalBottomSheet( // isScrollControlled: // true, context: context, useRootNavigator: true, isScrollControlled: false, enableDrag: true, useSafeArea: true, constraints: const BoxConstraints( maxWidth: double.infinity, ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.vertical( top: Radius.circular(0), ), ), clipBehavior: Clip.antiAliasWithSaveLayer, // sheetAnimationStyle: _animationStyle, builder: (BuildContext context) { return // makeDismissible( // child: DraggableScrollableSheet( expand: false, builder: (BuildContext context, ScrollController scrollController) { return Container( width: MediaQuery.of(context).size.width, //color: Colors.white, color: Color.fromARGB(255, 246, 248, 252), child: Column( children: [ Expanded( child: ListView.builder( controller: scrollController, itemCount: 1, itemBuilder: (BuildContext context, int index) { return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox( height: 18.0, ), Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: Padding( padding: const EdgeInsets.all(18.0), child: Text( affiliation_data['org_name'], softWrap: true, maxLines: 4, style: TextStyle( fontSize: 18.0, color: Colors.grey[700]), ), ), ), ], ), const SizedBox( height: 18.0, ), Divider(), const SizedBox( height: 8.0, ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Padding( padding: EdgeInsets.only(left: 18.0), child: Text( "Department", style: TextStyle(fontSize: 13.0), ), ), Padding( padding: const EdgeInsets.only(left: 18.0), child: Text( affiliation_data['dept'], style: TextStyle( fontSize: 14.0, color: Colors.grey[700]), ), ) ], ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Padding( padding: EdgeInsets.only(left: 18.0, top: 18.0), child: Text( "Role", style: TextStyle(fontSize: 13.0), ), ), Padding( padding: const EdgeInsets.only(left: 18.0), child: Text( affiliation_data['role'], style: TextStyle( fontSize: 14.0, color: Colors.grey[700]), ), ) ], ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only( left: 18.0, top: 18.0), child: Text( "Time Frame".toString(), style: TextStyle(fontSize: 13.0), ), ), Padding( padding: const EdgeInsets.only(left: 18.0), child: Text( affiliation_data['time_frame'], style: TextStyle( fontSize: 14.0, color: Colors.grey[700]), ), ) ], ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Padding( padding: EdgeInsets.only(left: 18.0, top: 18.0), child: Text( "Oraganization Type", style: TextStyle(fontSize: 13.0), ), ), Padding( padding: const EdgeInsets.only(left: 18.0), child: Text( affiliation_data['org_type'], style: TextStyle( fontSize: 14.0, color: Colors.grey[700]), ), ) ], ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Padding( padding: EdgeInsets.only(left: 18.0, top: 18.0), child: Text( "Eng Type", style: TextStyle(fontSize: 13.0), ), ), Padding( padding: const EdgeInsets.only(left: 18.0), child: Text( affiliation_data['emg_type'], style: TextStyle( fontSize: 14.0, color: Colors.grey[700]), ), ) ], ), ], ); }, ), ), ], ), ); }, ); //); }, ); } Widget getAppBarUI() { return Container( decoration: BoxDecoration( color: Constants.k2color, boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.2), offset: const Offset(0, 2), blurRadius: 8.0), ], ), child: Padding( padding: EdgeInsets.only(top: 2, left: 8, right: 8), child: Row( children: [ Container( alignment: Alignment.topLeft, // width: AppBar().preferredSize.height, // height: AppBar().preferredSize.height, child: Material( color: Colors.transparent, child: InkWell( borderRadius: const BorderRadius.all( Radius.circular(32.0), ), onTap: () { Navigator.pop(context); }, child: const Padding( padding: EdgeInsets.all(8.0), child: Row( children: [ Icon( Icons.arrow_back_ios_new, size: 18, color: Colors.white, ), SizedBox( width: 8, ), Text( "Contacts", style: TextStyle(fontSize: 14.0, color: Colors.white), ) ], ), ), ), ), ), const Expanded( child: Text( "", maxLines: 1, softWrap: true, style: TextStyle( fontWeight: FontWeight.w600, fontSize: 14, overflow: TextOverflow.ellipsis, ), ), ), ], ), ), ); } locandpnoinfo() { return Column( children: [ const SizedBox( height: 8.0, ), _buildClickableRow( icon: Icons.location_city_sharp, text: widget.text["addr"] ?? "Azienda Ospedaliera di Padova", ), const SizedBox( height: 8.0, ), _buildClickableRow( icon: Icons.location_pin, text: widget.text?["Country"] ?? "Via Giustiniani, 2, Padova, Veneto 35128, Italy", onTap: _openMapsByAddress, ), const SizedBox( height: 8.0, ), _buildClickableRow( icon: Icons.email, text: widget.text?["email"], onTap: () async { await emailSend(widget.text?["email"]); }, ), SizedBox( height: 8.0, ), _buildClickableRow( icon: Icons.phone, text: widget.text!["phone_no"].toString(), onTap: () async { await callinfo(widget.text?["phone_no"].toString()); }, ), ], ); } Future _openMapsByAddress() async { final address = 'Italy'; final Uri mapsUri = Uri( scheme: 'https', host: 'www.google.com', path: 'maps/search/', query: address, ); if (!await launchUrl(mapsUri)) { throw 'Could not launch $mapsUri'; } } Future emailSend(email) async { String? encodeQueryParameters(Map params) { return params.entries .map((MapEntry entry) => Uri.encodeComponent(entry.key) + '=' + Uri.encodeComponent(entry.value)) .join('&'); } final Uri emailLaunchUri = Uri( scheme: 'mailto', path: email, query: encodeQueryParameters({ 'subject': 'Example Subject', 'body': 'Hello, this is a sample body text.', }), ); if (await launchUrl(emailLaunchUri)) { launchUrl(emailLaunchUri); } else { throw 'Could not launch $emailLaunchUri'; } } Future callinfo(pno) async { final call = Uri.parse('tel:$pno'); if (await canLaunchUrl(call)) { launchUrl(call); } else { throw 'Could not launch $call'; } } } dispalytext(dispalydata) { return Text1( title: dispalydata, txtcolor: Colors.black, fontweight: FontWeight.normal, txtfont: 14.0); } getIcon(IconData icons) { return Icon( icons, color: Color.fromARGB(255, 0, 71, 132), ); } Widget _buildClickableRow({ required IconData icon, required String text, VoidCallback? onTap, }) { return Padding( padding: const EdgeInsets.only(left: 8.0), child: InkWell( onTap: onTap, child: Row( children: [ getIcon(icon), const SizedBox(width: 3.0), Expanded(child: dispalytext(text)), ], ), ), ); } class _ProfileInfoRow extends StatelessWidget { // _ProfileInfoRow({Key? key}) : super(key: key); final int text; _ProfileInfoRow({required this.text, Key? key}) : super(key: key); final List _items = const [ ProfileInfoItem("Publication(s)", 688), ProfileInfoItem("Event(s)", 111), ProfileInfoItem("Trial(s)", 10), ]; @override Widget build(BuildContext context) { return Container( height: 80, constraints: const BoxConstraints(maxWidth: 400), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: _items .map((item) => Expanded( child: Row( children: [ if (_items.indexOf(item) != 0) const VerticalDivider(), Expanded(child: _singleItem(context, item)), ], ))) .toList(), ), ); } Widget _singleItem(BuildContext context, item) => Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: const EdgeInsets.all(8.0), child: Text( item.value.toString(), style: const TextStyle( fontWeight: FontWeight.bold, fontSize: 14, ), ), ), Text( item.title, // style: const TextStyle( // fontWeight: FontWeight.normal, // fontSize: 18, // ), // style: Theme.of(context).textTheme.caption, ) ], ); } class ProfileInfoItem { final String title; final int value; const ProfileInfoItem(this.title, this.value); } class ContestTabHeader extends SliverPersistentHeaderDelegate { ContestTabHeader( this.searchUI, ); final Widget searchUI; @override Widget build( BuildContext context, double shrinkOffset, bool overlapsContent) { return Container(color: Colors.white, child: searchUI); } @override double get maxExtent => 52.0; @override double get minExtent => 52.0; @override bool shouldRebuild(SliverPersistentHeaderDelegate oldDelegate) { return true; } }