From 7a6eea64e110d14da3fa730a38567e062666a845 Mon Sep 17 00:00:00 2001 From: juan Date: Fri, 23 May 2025 16:15:26 -0400 Subject: [PATCH] cleaning and adjusting for package --- lib/api_service.dart | 246 +------------------------------------------ lib/augment.dart | 7 -- lib/contact.dart | 4 +- lib/email.dart | 2 +- lib/home_page.dart | 63 ++++++----- 5 files changed, 40 insertions(+), 282 deletions(-) diff --git a/lib/api_service.dart b/lib/api_service.dart index b0b92ea..4769377 100644 --- a/lib/api_service.dart +++ b/lib/api_service.dart @@ -4,19 +4,12 @@ import 'dart:async'; import 'dart:typed_data'; -import 'package:pointer_interceptor/pointer_interceptor.dart'; -import 'collapsableEmails.dart'; + import 'structs.dart'; -import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; -import 'dart:ui_web' as ui; -import 'augment.dart'; -// import 'dart:html' as html; -// import 'dart:js' as js; -import 'package:web/web.dart' as web; -import 'dart:js_interop' as js; + class ApiService { static String ip = ""; @@ -422,237 +415,4 @@ class ApiService { // return []; // } -} - -class EmailView extends StatefulWidget { - final List emailContent; - final String from; - final String name; - final String to; - final String subject; - final String date; - final String id; - final List messages; - - const EmailView({ - Key? key, - required this.emailContent, - required this.from, - required this.name, - required this.to, - required this.subject, - required this.date, - required this.id, - required this.messages, - }) : super(key: key); - @override - _EmailViewState createState() => _EmailViewState(); -} - -class _EmailViewState extends State { - //html css rendering thing - late Key iframeKey; - late String currentContent; - late String viewTypeId; //make this a list too??? - Future>>? _markerPositionsFuture; - // TextEditingController _jumpController = TextEditingController(); - final hardcodedMarkers = [ - {'id': 'marker1', 'x': 50, 'y': 100}, - {'id': 'marker2', 'x': 150, 'y': 200}, - {'id': 'marker3', 'x': 250, 'y': 300}, - ]; - - @override - void initState() { - super.initState(); - print("thread id? ${widget.id}"); - List currentContent = widget - .emailContent; //html of the email/ actually entire thread, gives me little space to play in between - // i wonder if the other attributes change? because if so i have to add like some zooms in and out of the emails, as in collapse - // _registerViewFactory(currentContent); - } - - // void _registerViewFactory(List currentContent) { // i think this doesnt work anymore - // setState(() { //update to do item per item - // // each item to have itsviewtype ID - // // is this necessarey here?? - - // //could just move to collapsable - - // viewTypeId = 'iframe-${DateTime.now().millisecondsSinceEpoch}'; - // final emailHTML = web.document.createElement('div') as web.HTMLDivElement - // ..id = viewTypeId - // ..innerHTML = currentContent[0].toJS; // temporarily index because it has to do all of them - // emailHTML.style - // ..width = '100%' - // ..height = '100%' - // ..overflow = 'auto' - // ..scrollBehavior = 'smooth'; - - // ui.platformViewRegistry.registerViewFactory( - // viewTypeId, - // (int viewId) => emailHTML, - // ); - // }); - // } - - void _scrollToNumber(String spanId) { - AugmentClasses.handleJump(spanId); - } - - // TODO: void _invisibility(String ) //to make purple numbers not visible - - @override - Widget build(BuildContext context) { - // print("thread id ${widget.id}"); - ApiService.currThreadID = widget.id; - return Scaffold( - appBar: AppBar( - title: Text(widget.name), - ), - body: Stack( - children: [ - Column( - children: [ - EmailToolbar( - onJumpToSpan: _scrollToNumber, - onButtonPressed: () => {}, - // AugmentClasses.handleJump(viewTypeId, '1'); - // print("button got pressed?"); - - // _registerViewFactory(r""" - //

Welcome to My Website

- //

This is a simple HTML page.

- //

What is HTML?

- //

HTML (HyperText Markup Language) is the most basic building~ block of the Web. It defines the meaning and structure of web content. Other technologies besides HTML are generally used to describe a web page's appearance/presentation (CSS) or functionality/behavior (JavaScript).

- //

Here's a simple list:

- //
    - //
  • HTML elements are the building blocks of HTML pages
  • - //
  • HTML uses tags like <tag> to organize and format content
  • - //
  • CSS is used with HTML to style pages
  • - //
- //

Copyright © 2023

- // """); - // print("change"); - // widget.emailContent = r" - - // - ), - Row( - // title of email - children: [ - Text( - widget.subject, - style: TextStyle(fontSize: 30), - ), - ], - ), - Row( - children: [ - Text( - 'from ${widget.name}', - style: TextStyle(fontSize: 18), - ), - Text( - '<${widget.from}>', - style: TextStyle(fontSize: 18), - ), - Spacer(), - Text( - '${widget.date}', - textAlign: TextAlign.right, - ) - ], - ), - // TODO: make a case where if one of these is the user's email it just says me :))))) - Row( - children: [ - Text( - 'to ${widget.to.toString()}', - style: TextStyle(fontSize: 15), - ) - ], - ), - Expanded( - child: CollapsableEmails( - //change here - thread: widget.messages, //this wont work in serializable - threadHTML: widget.emailContent, - threadIDs: widget.id, - ), - ), - // Expanded( - // child: HtmlElementView( - // key: UniqueKey(), - // viewType: viewTypeId, - // ), - // ), - ], - ), - - // Overlay widgets dynamically based on marker positions - // FutureBuilder>>( - // future: _markerPositionsFuture, - // builder: (context, snapshot) { - // print("FutureBuilder state: ${snapshot.connectionState}"); - // if (snapshot.connectionState == ConnectionState.waiting) { - // return Center(child: CircularProgressIndicator()); - // } - // if (snapshot.hasError) { - // print("Error in FutureBuilder: ${snapshot.error}"); - // return Center(child: Text('error loading markers')); - // } - // if (snapshot.hasData && snapshot.data != null) { - // final markers = snapshot.data!; - // return Stack( - // children: markers.map((marker) { - // return Positioned( - // left: marker['x'].toDouble(), - // top: marker['y'].toDouble(), - // child: GestureDetector( - // onTap: () { - // print('Tapped on ${marker['id']}'); - // }, - // child: Container( - // width: 50, - // height: 50, - // color: Colors.red, - // child: Center( - // child: Text( - // marker['id'], - // style: TextStyle(color: Colors.white), - // ), - // ), - // ), - // ), - // ); - // }).toList(), - // ); - // } - - // return SizedBox.shrink(); // No markers found - // }, - // ), - // Red widget overlay - // Positioned( - // left: 8, // Adjust based on your desired position - // top: 100 + 44 + 5, // Adjust based on your desired position - // child: IgnorePointer( - // ignoring: true, // Ensures the iframe remains interactive - // child: Container( - // color: Colors.red, - // width: 100, - // height: 50, - // child: Center( - // child: Text( - // 'Overlay', - // style: TextStyle(color: Colors.white), - // ), - // ), - // ), - // ), - // ), - ], - )); - } -} +} \ No newline at end of file diff --git a/lib/augment.dart b/lib/augment.dart index b957740..509b3b0 100644 --- a/lib/augment.dart +++ b/lib/augment.dart @@ -1,14 +1,7 @@ -// import 'dart:ffi'; - import 'package:crab_ui/api_service.dart'; import 'package:crab_ui/attachmentDownload.dart'; import 'package:crab_ui/structs.dart'; import 'package:flutter/material.dart'; -import 'package:pdfrx/pdfrx.dart'; -import 'package:pointer_interceptor/pointer_interceptor.dart'; -// import 'dart:html' as html; -// import 'dart:js' as js; -import 'package:web/web.dart' as web; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'attachmentWidget.dart'; diff --git a/lib/contact.dart b/lib/contact.dart index 73d60fd..32b4dae 100644 --- a/lib/contact.dart +++ b/lib/contact.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:http/http.dart' as http; -import 'package:flutter_html/flutter_html.dart'; +// import 'package:http/http.dart' as http; +// import 'package:flutter_html/flutter_html.dart'; class ContactsPage extends StatefulWidget { const ContactsPage({super.key}); diff --git a/lib/email.dart b/lib/email.dart index 5dbf1a6..ff4d600 100644 --- a/lib/email.dart +++ b/lib/email.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'api_service.dart'; import 'structs.dart'; +import 'emailView.dart'; class EmailListScreen extends StatelessWidget { final List emails; diff --git a/lib/home_page.dart b/lib/home_page.dart index b4878b0..903a8a4 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -2,7 +2,7 @@ import 'package:crab_ui/sonicEmailView.dart'; import 'folder_drawer.dart'; import 'structs.dart'; -import 'package:flutter/widgets.dart'; +// import 'package:flutter/widgets.dart'; import 'api_service.dart'; import 'package:flutter/material.dart'; import 'email.dart'; @@ -266,40 +266,45 @@ class _HomeScreenState extends State with TickerProviderStateMixin { child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Container( - width: 800, - height: 40, - child: TextField( - decoration: InputDecoration( - hintText: 'Search...', - border: OutlineInputBorder(), - prefixIcon: Icon(Icons.search), + Flexible( + child: ConstrainedBox( + constraints: BoxConstraints( + maxWidth: 800, + ), + child: SizedBox( + height: 40, + child: TextField( + decoration: InputDecoration( + hintText: 'Search...', + border: OutlineInputBorder(), + prefixIcon: Icon(Icons.search), + ), + onSubmitted: (value) { + if (value.isNotEmpty) { + _performSearch(value, _selectedOption); + } + //this is the input box i mentioned + // if (value == '') { + // setState(() { + // querySearches = false; + // }); + // } + // Future> results = apiService + // .sonicSearch('INBOX', 20, 0, value); + // // print(value); + // print(results); + // setState(() { + // querySearches = true; + // }); + }, + ), ), - onSubmitted: (value) { - if (value.isNotEmpty) { - _performSearch(value, _selectedOption); - } - //this is the input box i mentioned - // if (value == '') { - // setState(() { - // querySearches = false; - // }); - // } - // Future> results = apiService - // .sonicSearch('INBOX', 20, 0, value); - // // print(value); - // print(results); - // setState(() { - // querySearches = true; - // }); - }, ), ), SizedBox( - width: 16, + width: 8, ), Container( - width: 80, height: 40, child: ElevatedButton( onPressed: _showOptionsSearchDialog,