import 'package:flutter/material.dart'; import 'package:kmpdfkit_demo/widgets/contains.dart'; import 'package:kmpdfkit_demo/widgets/events.dart'; import '../../models/annot_attribute_bean.dart'; /// attr_link_widget.dart /// /// Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved. /// /// THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW /// AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT. /// UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES. /// This notice may not be removed from this file. typedef AttrLinkCallback = Function(LinkType linkType, String linkUrl, int linkPage, String linkEmail); typedef AttrLinkCancelCreateCallback = Function(bool cancelCreateLink); class AttrLinkWidget extends StatefulWidget { final AttrLinkCallback callback; final AttrLinkCancelCreateCallback cancelCreateCallback; final AnnotAttributeBean attributeBean; const AttrLinkWidget({Key? key,required this.attributeBean, required this.callback, required this.cancelCreateCallback}) : super(key: key); @override State createState() => _AttrLinkWidgetState(); } class _AttrLinkWidgetState extends State { final TextEditingController _webTextController = TextEditingController(text: 'http://'); final TextEditingController _pageTextController = TextEditingController(); final TextEditingController _emailTextController = TextEditingController(); late LinkType selectType; bool linkDataIsValid = true; int pageCount = 1; @override void initState() { super.initState(); initLinkData(); getDocumentPageCount().then((value) { setState(() { pageCount = value; }); }); } @override Widget build(BuildContext context) { return AlertDialog( title: const Text('New Link'), content: Column( mainAxisSize: MainAxisSize.min, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _linkTypeWidget(LinkType.website, Icons.language, 'URL'), _linkTypeWidget(LinkType.page, Icons.description_outlined, 'Page'), _linkTypeWidget(LinkType.email, Icons.email_outlined, 'Email') ], ), if (selectType == LinkType.website) ...{ TextField( controller: _webTextController, keyboardType: TextInputType.url, onChanged: (value){ checkDataIsValid(); }, ) } else if (selectType == LinkType.page) ...{ TextField( controller: _pageTextController, keyboardType: TextInputType.number, decoration: InputDecoration(hintText: '1-$pageCount',hintStyle: const TextStyle(fontSize: 12)), onChanged: (value){ checkDataIsValid(); }, ) } else ...{ TextField( controller: _emailTextController, keyboardType: TextInputType.emailAddress, decoration: const InputDecoration(hintText: 'support@17pdf.com',hintStyle: TextStyle(fontSize: 12)), onChanged: (value){ checkDataIsValid(); }, ) } ], ), actions: [ TextButton( onPressed: () { widget.cancelCreateCallback(true); Navigator.pop(context); }, child: const Text('Cancel', style: TextStyle(color: Colors.grey),)), TextButton(onPressed: linkDataIsValid ? () { widget.callback(selectType, _webTextController.text, _pageTextController.text.isNotEmpty ? int.parse(_pageTextController.text) : 0, _emailTextController.text); Navigator.pop(context); } : null, child: Text('Done',style: TextStyle(color: linkDataIsValid ? Colors.blue : Colors.grey),)) ], ); } void checkDataIsValid() { setState(() { switch(selectType){ case LinkType.website: linkDataIsValid = _webTextController.text.isNotEmpty; break; case LinkType.page : linkDataIsValid = _pageTextController.text.isNotEmpty; break; case LinkType.email: linkDataIsValid = _emailTextController.text.isNotEmpty; break; } }); } Widget _linkTypeWidget(LinkType linkType, IconData icon, String title) { return InkWell( child: Column( children: [ Icon(icon, color: selectType == linkType ? Colors.blue : Colors.grey), Text( title, style: TextStyle( color: selectType == linkType ? Colors.blue : Colors.grey), ) ], ), onTap: (){ setState(() { selectType = linkType; }); checkDataIsValid(); }, ); } void initLinkData(){ selectType = widget.attributeBean.linkType; switch(selectType){ case LinkType.website: _webTextController.text = widget.attributeBean.linkWeb.isEmpty ? "http://" : widget.attributeBean.linkWeb; break; case LinkType.email: _emailTextController.text = widget.attributeBean.linkEmail; break; case LinkType.page: _pageTextController.text = widget.attributeBean.linkPage.toString(); break; } } }