Message ListView
This commit is contained in:
parent
2c236e47ab
commit
0d1ae10217
|
@ -320,6 +320,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"Shield Transparent Balance When Sending"),
|
||||
"shieldingInProgress":
|
||||
MessageLookupByLibrary.simpleMessage("Shielding in progress..."),
|
||||
"showMessagesAsTable":
|
||||
MessageLookupByLibrary.simpleMessage("Show Messages as Table"),
|
||||
"sign": MessageLookupByLibrary.simpleMessage("Sign Transaction"),
|
||||
"signOffline": MessageLookupByLibrary.simpleMessage("Sign"),
|
||||
"simple": MessageLookupByLibrary.simpleMessage("Simple"),
|
||||
|
|
|
@ -317,6 +317,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
MessageLookupByLibrary.simpleMessage("Blindar Saldo Transparente"),
|
||||
"shieldingInProgress":
|
||||
MessageLookupByLibrary.simpleMessage("Blindaje en progreso…"),
|
||||
"showMessagesAsTable":
|
||||
MessageLookupByLibrary.simpleMessage("Show Messages as Table"),
|
||||
"sign": MessageLookupByLibrary.simpleMessage("Sign"),
|
||||
"signOffline": MessageLookupByLibrary.simpleMessage("Firmar"),
|
||||
"simple": MessageLookupByLibrary.simpleMessage("Sencillo"),
|
||||
|
|
|
@ -323,6 +323,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
|||
"Masquer le solde transparent"),
|
||||
"shieldingInProgress":
|
||||
MessageLookupByLibrary.simpleMessage("Masquage en cours..."),
|
||||
"showMessagesAsTable":
|
||||
MessageLookupByLibrary.simpleMessage("Show Messages as Table"),
|
||||
"sign": MessageLookupByLibrary.simpleMessage("Sign"),
|
||||
"signOffline": MessageLookupByLibrary.simpleMessage("Signer"),
|
||||
"simple": MessageLookupByLibrary.simpleMessage("Simple"),
|
||||
|
|
|
@ -2251,6 +2251,16 @@ class S {
|
|||
args: [],
|
||||
);
|
||||
}
|
||||
|
||||
/// `Show Messages as Table`
|
||||
String get showMessagesAsTable {
|
||||
return Intl.message(
|
||||
'Show Messages as Table',
|
||||
name: 'showMessagesAsTable',
|
||||
desc: '',
|
||||
args: [],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class AppLocalizationDelegate extends LocalizationsDelegate<S> {
|
||||
|
|
|
@ -218,5 +218,6 @@
|
|||
"recipient": "Recipient",
|
||||
"fromto": "From/To",
|
||||
"rescanning": "Rescanning...",
|
||||
"markAllAsRead": "Mark All as Read"
|
||||
"markAllAsRead": "Mark All as Read",
|
||||
"showMessagesAsTable": "Show Messages as Table"
|
||||
}
|
||||
|
|
|
@ -216,5 +216,6 @@
|
|||
"recipient": "Recipient",
|
||||
"fromto": "From/To",
|
||||
"rescanning": "Rescanning...",
|
||||
"markAllAsRead": "Mark All as Read"
|
||||
"markAllAsRead": "Mark All as Read",
|
||||
"showMessagesAsTable": "Show Messages as Table"
|
||||
}
|
||||
|
|
|
@ -216,5 +216,6 @@
|
|||
"recipient": "Recipient",
|
||||
"fromto": "From/To",
|
||||
"rescanning": "Rescanning...",
|
||||
"markAllAsRead": "Mark All as Read"
|
||||
"markAllAsRead": "Mark All as Read",
|
||||
"showMessagesAsTable": "Show Messages as Table"
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:warp_api/warp_api.dart';
|
|||
import 'db.dart';
|
||||
import 'generated/l10n.dart';
|
||||
import 'main.dart';
|
||||
import 'message_item.dart';
|
||||
import 'store.dart';
|
||||
|
||||
class MessagesTab extends StatefulWidget {
|
||||
|
@ -23,6 +24,10 @@ class MessagesState extends State<MessagesTab> with AutomaticKeepAliveClientMixi
|
|||
Widget build(BuildContext context) {
|
||||
super.build(context);
|
||||
final s = S.of(context);
|
||||
|
||||
if (!settings.messageTable)
|
||||
return MessageList();
|
||||
|
||||
final _source = MessagesDataSource(context);
|
||||
source = _source;
|
||||
return SingleChildScrollView(
|
||||
|
@ -116,6 +121,23 @@ class MessagesDataSource extends DataTableSource {
|
|||
}
|
||||
}
|
||||
|
||||
class MessageList extends StatefulWidget {
|
||||
@override
|
||||
MessageListState createState() => MessageListState();
|
||||
}
|
||||
|
||||
class MessageListState extends State<MessageList> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (active.messages.isEmpty) return Container();
|
||||
return Container(child: ListView.builder(
|
||||
itemCount: active.messages.length,
|
||||
itemBuilder: (context, index) {
|
||||
return MessageItem(active.messages[index], index);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
class MessagePage extends StatefulWidget {
|
||||
final index;
|
||||
MessagePage(this.index);
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
import 'package:ZYWallet/db.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'main.dart';
|
||||
|
||||
class MessageItem extends StatelessWidget {
|
||||
final ZMessage message;
|
||||
final int index;
|
||||
|
||||
MessageItem(this.message, this.index);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final theme = Theme.of(context);
|
||||
final textTheme = theme.textTheme;
|
||||
final s = message.incoming ? message.sender : message.recipient;
|
||||
final initial = (s == null || s.isEmpty) ? "?" : s[0];
|
||||
final width = MediaQuery.of(context).size.width;
|
||||
|
||||
final unreadStyle = (TextStyle? s) => message.read ? s : s?.copyWith(fontWeight: FontWeight.bold);
|
||||
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
_onSelect(context);
|
||||
},
|
||||
onLongPress: () {
|
||||
active.markAllMessagesAsRead();
|
||||
},
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(top: 3.0, bottom: 3.0, right: 0.0),
|
||||
padding: EdgeInsets.symmetric(horizontal: 5.0, vertical: 10.0),
|
||||
child: Row(children: [
|
||||
CircleAvatar(
|
||||
backgroundColor: initialToColor(initial),
|
||||
child: Text(
|
||||
initial,
|
||||
style: TextStyle(
|
||||
fontSize: 28,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
radius: 24.0,
|
||||
),
|
||||
SizedBox(
|
||||
width: 15.0,
|
||||
height: 30.0,
|
||||
),
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(message.fromto(), style: unreadStyle(textTheme.caption)),
|
||||
SizedBox(
|
||||
height: 5.0,
|
||||
),
|
||||
Container(
|
||||
width: width * 0.6,
|
||||
child: Text(
|
||||
message.subject,
|
||||
style: unreadStyle(textTheme.titleMedium), overflow: TextOverflow.ellipsis)),
|
||||
SizedBox(
|
||||
height: 4.0,
|
||||
),
|
||||
Container(
|
||||
width: width * 0.8,
|
||||
child: Text(
|
||||
message.body,
|
||||
softWrap: true, maxLines: 5, overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
])));
|
||||
}
|
||||
|
||||
_onSelect(BuildContext context) {
|
||||
Navigator.of(context).pushNamed('/message', arguments: index);
|
||||
}
|
||||
}
|
||||
|
||||
final colors = [
|
||||
const Color(0xFF1DE9B6),
|
||||
const Color(0xFFCDDC39),
|
||||
const Color(0xFFAA00FF),
|
||||
const Color(0xFF2196F3),
|
||||
const Color(0xFF689F38),
|
||||
const Color(0xFF388E3C),
|
||||
const Color(0xFFF57C00),
|
||||
const Color(0xFFFFA000),
|
||||
const Color(0xFFFBC02D),
|
||||
const Color(0xFFFFEA00),
|
||||
const Color(0xFFE64A19),
|
||||
const Color(0xFF5D4037),
|
||||
const Color(0xFF7E57C2),
|
||||
const Color(0xFF2196F3),
|
||||
const Color(0xFFAA00FF),
|
||||
const Color(0xFF2196F3),
|
||||
const Color(0xFF00B0FF),
|
||||
const Color(0xFF00E5FF),
|
||||
const Color(0xFFAA00FF),
|
||||
const Color(0xFF2196F3),
|
||||
const Color(0xFF64DD17),
|
||||
const Color(0xFFAEEA00),
|
||||
const Color(0xFFAA00FF),
|
||||
const Color(0xFFFFAB00),
|
||||
const Color(0xFFAA00FF),
|
||||
const Color(0xFF2196F3),
|
||||
];
|
||||
|
||||
final defaultColor = const Color(0xFF717171);
|
||||
|
||||
Color initialToColor(String s) {
|
||||
final i = s.toUpperCase().codeUnitAt(0);
|
||||
if (i >= 65 && i < 91) {
|
||||
return colors[i-65];
|
||||
}
|
||||
return defaultColor;
|
||||
}
|
|
@ -183,6 +183,11 @@ class SettingsState extends State<SettingsPage> with SingleTickerProviderStateMi
|
|||
title: Text(s.includeReplyTo),
|
||||
initialValue: settings.includeReplyTo,
|
||||
onSaved: _onIncludeReplyTo),
|
||||
if (!simpleMode) FormBuilderCheckbox(
|
||||
name: 'message_table',
|
||||
title: Text(s.showMessagesAsTable),
|
||||
initialValue: settings.messageTable,
|
||||
onSaved: _onMessageTable),
|
||||
if (!simpleMode) TextFormField(
|
||||
decoration: InputDecoration(
|
||||
labelText: 'Auto Shield Threshold'),
|
||||
|
@ -252,6 +257,10 @@ class SettingsState extends State<SettingsPage> with SingleTickerProviderStateMi
|
|||
settings.setIncludeReplyTo(v);
|
||||
}
|
||||
|
||||
_onMessageTable(v) {
|
||||
settings.setMessageTable(v);
|
||||
}
|
||||
|
||||
_onProtectSend(v) {
|
||||
settings.setProtectSend(v);
|
||||
}
|
||||
|
|
|
@ -135,6 +135,9 @@ abstract class _Settings with Store {
|
|||
@observable
|
||||
bool includeReplyTo = false;
|
||||
|
||||
@observable
|
||||
bool messageTable = false;
|
||||
|
||||
@observable
|
||||
bool protectSend = false;
|
||||
|
||||
|
@ -172,6 +175,7 @@ abstract class _Settings with Store {
|
|||
autoHide = prefs.getBool('auto_hide') ?? true;
|
||||
protectSend = prefs.getBool('protect_send') ?? false;
|
||||
includeReplyTo = prefs.getBool('include_reply_to') ?? false;
|
||||
messageTable = prefs.getBool('message_table') ?? false;
|
||||
|
||||
primaryColorValue = prefs.getInt('primary') ?? Colors.blue.value;
|
||||
primaryVariantColorValue =
|
||||
|
@ -407,6 +411,13 @@ abstract class _Settings with Store {
|
|||
prefs.setBool('include_reply_to', includeReplyTo);
|
||||
}
|
||||
|
||||
@action
|
||||
Future<void> setMessageTable(bool v) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
messageTable = v;
|
||||
prefs.setBool('message_table', messageTable);
|
||||
}
|
||||
|
||||
@action
|
||||
Future<void> setMemoSignature(String v) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
|
|
|
@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||
# Read more about iOS versioning at
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
version: 1.2.4+227
|
||||
version: 1.2.4+229
|
||||
|
||||
environment:
|
||||
sdk: ">=2.12.0 <3.0.0"
|
||||
|
|
Loading…
Reference in New Issue