Flutter Fixes etc
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,85 +1,12 @@
|
|||||||
library font_awesome_flutter;
|
library font_awesome_flutter;
|
||||||
|
|
||||||
import 'package:flutter/widgets.dart';
|
// NOTE:
|
||||||
|
// This file previously declared IconDataBrands / IconDataSolid / IconDataRegular
|
||||||
/// [IconData] for a font awesome brand icon from a code point
|
// / IconDataLight / IconDataThin / IconDataDuotone as subclasses of [IconData].
|
||||||
///
|
// Newer Flutter SDKs mark [IconData] as a `final class`, which can no longer be
|
||||||
/// Code points can be obtained from fontawesome.com
|
// extended outside its own library, so those subclasses no longer compile.
|
||||||
class IconDataBrands extends IconData {
|
//
|
||||||
const IconDataBrands(int codePoint)
|
// The generated icon constants in `font_awesome_flutter.dart` now construct
|
||||||
: super(
|
// plain `const IconData(..., fontFamily: '<FontAwesome...>', fontPackage:
|
||||||
codePoint,
|
// 'font_awesome_flutter')` directly, so these helper subclasses are no longer
|
||||||
fontFamily: 'FontAwesomeBrands',
|
// needed. Using const [IconData] literals also keeps icon tree-shaking working.
|
||||||
fontPackage: 'font_awesome_flutter',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// [IconData] for a font awesome solid icon from a code point
|
|
||||||
///
|
|
||||||
/// Code points can be obtained from fontawesome.com
|
|
||||||
class IconDataSolid extends IconData {
|
|
||||||
const IconDataSolid(int codePoint)
|
|
||||||
: super(
|
|
||||||
codePoint,
|
|
||||||
fontFamily: 'FontAwesomeSolid',
|
|
||||||
fontPackage: 'font_awesome_flutter',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// [IconData] for a font awesome regular icon from a code point
|
|
||||||
///
|
|
||||||
/// Code points can be obtained from fontawesome.com
|
|
||||||
class IconDataRegular extends IconData {
|
|
||||||
const IconDataRegular(int codePoint)
|
|
||||||
: super(
|
|
||||||
codePoint,
|
|
||||||
fontFamily: 'FontAwesomeRegular',
|
|
||||||
fontPackage: 'font_awesome_flutter',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// [IconData] for a font awesome light icon from a code point. Only works if
|
|
||||||
/// light icons (font awesome pro) have been installed.
|
|
||||||
///
|
|
||||||
/// Code points can be obtained from fontawesome.com
|
|
||||||
class IconDataLight extends IconData {
|
|
||||||
const IconDataLight(int codePoint)
|
|
||||||
: super(
|
|
||||||
codePoint,
|
|
||||||
fontFamily: 'FontAwesomeLight',
|
|
||||||
fontPackage: 'font_awesome_flutter',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// [IconData] for a font awesome duotone icon from a code point. Only works if
|
|
||||||
/// duotone icons (font awesome pro) have been installed.
|
|
||||||
///
|
|
||||||
/// Code points can be obtained from fontawesome.com. Each duotone icon consists
|
|
||||||
/// of a primary [codePoint] and a [secondary].
|
|
||||||
class IconDataDuotone extends IconData {
|
|
||||||
/// Secondary glyph of the duotone icon
|
|
||||||
///
|
|
||||||
/// Due to tree-shaking restraints [secondary] cannot be the codepoint itself,
|
|
||||||
/// but has to be an [IconData] object.
|
|
||||||
final IconData? secondary;
|
|
||||||
|
|
||||||
const IconDataDuotone(int codePoint, {this.secondary})
|
|
||||||
: super(
|
|
||||||
codePoint,
|
|
||||||
fontFamily: 'FontAwesomeDuotone',
|
|
||||||
fontPackage: 'font_awesome_flutter',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// [IconData] for a font awesome thin icon from a code point. Only works if
|
|
||||||
/// thin icons (font awesome pro, v6+) have been installed.
|
|
||||||
///
|
|
||||||
/// Code points can be obtained from fontawesome.com
|
|
||||||
class IconDataThin extends IconData {
|
|
||||||
const IconDataThin(int codePoint)
|
|
||||||
: super(
|
|
||||||
codePoint,
|
|
||||||
fontFamily: 'FontAwesomeThin',
|
|
||||||
fontPackage: 'font_awesome_flutter',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ class _SCNNavLayoutState extends State<SCNNavLayout> {
|
|||||||
selectedIndex: _selectedIndex,
|
selectedIndex: _selectedIndex,
|
||||||
onTabSelected: _onItemTapped,
|
onTabSelected: _onItemTapped,
|
||||||
color: Theme.of(context).disabledColor,
|
color: Theme.of(context).disabledColor,
|
||||||
selectedColor: Theme.of(context).primaryColorDark,
|
selectedColor: Theme.of(context).colorScheme.primary,
|
||||||
notchedShape: const AutomaticNotchedShape(
|
notchedShape: const AutomaticNotchedShape(
|
||||||
RoundedRectangleBorder(
|
RoundedRectangleBorder(
|
||||||
borderRadius: BorderRadius.only(
|
borderRadius: BorderRadius.only(
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class SCNScaffold extends StatelessWidget {
|
|||||||
showShare: showShare,
|
showShare: showShare,
|
||||||
onShare: onShare ?? () {},
|
onShare: onShare ?? () {},
|
||||||
),
|
),
|
||||||
body: child,
|
body: SafeArea(child: child),
|
||||||
floatingActionButton: floatingActionButton,
|
floatingActionButton: floatingActionButton,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,65 +69,74 @@ class _ChannelListItemState extends State<ChannelListItem> {
|
|||||||
margin: EdgeInsets.fromLTRB(0, 4, 0, 4),
|
margin: EdgeInsets.fromLTRB(0, 4, 0, 4),
|
||||||
shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(0)),
|
shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(0)),
|
||||||
color: Theme.of(context).cardTheme.color,
|
color: Theme.of(context).cardTheme.color,
|
||||||
child: InkWell(
|
child: IntrinsicHeight(
|
||||||
onTap: () {
|
child: Row(
|
||||||
if (widget.mode == ChannelListItemMode.Messages) {
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
Navi.push(context, () => ChannelMessageViewPage(channel: widget.channel));
|
children: [
|
||||||
} else {
|
Expanded(
|
||||||
Navi.push(context, () => ChannelViewPage(channelID: widget.channel.channelID, preloadedData: (widget.channel, widget.subscription), needsReload: widget.onChannelListReloadTrigger));
|
child: InkWell(
|
||||||
}
|
|
||||||
},
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.all(8),
|
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
_buildIcon(context),
|
|
||||||
SizedBox(width: 8),
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: Text(
|
|
||||||
widget.channel.displayName,
|
|
||||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
(widget.channel.timestampLastSent == null) ? '' : dateFormat.format(DateTime.parse(widget.channel.timestampLastSent!).toLocal()),
|
|
||||||
style: const TextStyle(fontSize: 14),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(height: 4),
|
|
||||||
Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
Expanded(child: (widget.mode == ChannelListItemMode.Messages) ? Text(_preformatTitle(lastMessage), style: TextStyle(color: Theme.of(context).textTheme.bodyLarge?.color?.withAlpha(160))) : _buildSubscriptionStateText(context)),
|
|
||||||
(widget.mode == ChannelListItemMode.Messages) ? Text(widget.channel.messagesSent.toString(), style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)) : Text("", style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(width: 4),
|
|
||||||
GestureDetector(
|
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (widget.mode == ChannelListItemMode.Messages) {
|
if (widget.mode == ChannelListItemMode.Messages) {
|
||||||
Navi.push(context, () => ChannelViewPage(channelID: widget.channel.channelID, preloadedData: (widget.channel, widget.subscription), needsReload: widget.onChannelListReloadTrigger));
|
|
||||||
} else {
|
|
||||||
Navi.push(context, () => ChannelMessageViewPage(channel: widget.channel));
|
Navi.push(context, () => ChannelMessageViewPage(channel: widget.channel));
|
||||||
|
} else {
|
||||||
|
Navi.push(context, () => ChannelViewPage(channelID: widget.channel.channelID, preloadedData: (widget.channel, widget.subscription), needsReload: widget.onChannelListReloadTrigger));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8),
|
padding: const EdgeInsets.all(8),
|
||||||
child: (widget.mode == ChannelListItemMode.Messages) ? Icon(FontAwesomeIcons.solidSquareInfo, color: Theme.of(context).colorScheme.onPrimaryContainer.withAlpha(128), size: 24) : Icon(FontAwesomeIcons.solidEnvelopes, color: Theme.of(context).colorScheme.onPrimaryContainer.withAlpha(128), size: 24),
|
child: Row(
|
||||||
|
children: [
|
||||||
|
_buildIcon(context),
|
||||||
|
SizedBox(width: 8),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
widget.channel.displayName,
|
||||||
|
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
(widget.channel.timestampLastSent == null) ? '' : dateFormat.format(DateTime.parse(widget.channel.timestampLastSent!).toLocal()),
|
||||||
|
style: const TextStyle(fontSize: 14),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 4),
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Expanded(child: (widget.mode == ChannelListItemMode.Messages) ? Text(_preformatTitle(lastMessage), style: TextStyle(color: Theme.of(context).textTheme.bodyLarge?.color?.withAlpha(160))) : _buildSubscriptionStateText(context)),
|
||||||
|
(widget.mode == ChannelListItemMode.Messages) ? Text(widget.channel.messagesSent.toString(), style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)) : Text("", style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
),
|
GestureDetector(
|
||||||
|
behavior: HitTestBehavior.opaque,
|
||||||
|
onTap: () {
|
||||||
|
if (widget.mode == ChannelListItemMode.Messages) {
|
||||||
|
Navi.push(context, () => ChannelViewPage(channelID: widget.channel.channelID, preloadedData: (widget.channel, widget.subscription), needsReload: widget.onChannelListReloadTrigger));
|
||||||
|
} else {
|
||||||
|
Navi.push(context, () => ChannelMessageViewPage(channel: widget.channel));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 12, right: 16),
|
||||||
|
child: Center(widthFactor: 1.0, child: (widget.mode == ChannelListItemMode.Messages) ? Icon(FontAwesomeIcons.solidSquareInfo, color: Theme.of(context).colorScheme.onPrimaryContainer.withAlpha(128), size: 24) : Icon(FontAwesomeIcons.solidEnvelopes, color: Theme.of(context).colorScheme.onPrimaryContainer.withAlpha(128), size: 24)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -31,62 +31,71 @@ class KeyTokenListItem extends StatelessWidget {
|
|||||||
margin: EdgeInsets.fromLTRB(0, 4, 0, 4),
|
margin: EdgeInsets.fromLTRB(0, 4, 0, 4),
|
||||||
shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(0)),
|
shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(0)),
|
||||||
color: Theme.of(context).cardTheme.color,
|
color: Theme.of(context).cardTheme.color,
|
||||||
child: InkWell(
|
child: IntrinsicHeight(
|
||||||
onTap: () {
|
child: Row(
|
||||||
Navi.push(context, () => KeyTokenViewPage(keytokenID: item.keytokenID, preloadedData: item, needsReload: needsReload));
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
},
|
children: [
|
||||||
child: Padding(
|
Expanded(
|
||||||
padding: const EdgeInsets.all(8),
|
child: InkWell(
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
Icon(FontAwesomeIcons.solidGearCode, color: Theme.of(context).colorScheme.outline, size: 32),
|
|
||||||
SizedBox(width: 16),
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: Text(
|
|
||||||
item.name,
|
|
||||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
(item.timestampLastUsed == null) ? '' : dateFormat.format(DateTime.parse(item.timestampLastUsed!).toLocal()),
|
|
||||||
style: const TextStyle(fontSize: 14),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(height: 4),
|
|
||||||
Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: Text(
|
|
||||||
"Permissions: " + _formatPermissions(item.permissions, item.allChannels, item.channels),
|
|
||||||
style: TextStyle(color: Theme.of(context).textTheme.bodyLarge?.color?.withAlpha(160)),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Text(item.messagesSent.toString(), style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(width: 4),
|
|
||||||
GestureDetector(
|
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navi.push(context, () => FilteredMessageViewPage(title: item.name, alertText: 'All message sent with the key \'${item.name}\'', filter: MessageFilter(usedKeys: [item.keytokenID])));
|
Navi.push(context, () => KeyTokenViewPage(keytokenID: item.keytokenID, preloadedData: item, needsReload: needsReload));
|
||||||
},
|
},
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8),
|
padding: const EdgeInsets.all(8),
|
||||||
child: Icon(FontAwesomeIcons.solidEnvelopes, color: Theme.of(context).colorScheme.onPrimaryContainer.withAlpha(128), size: 24),
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(FontAwesomeIcons.solidGearCode, color: Theme.of(context).colorScheme.outline, size: 32),
|
||||||
|
SizedBox(width: 16),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
item.name,
|
||||||
|
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
(item.timestampLastUsed == null) ? '' : dateFormat.format(DateTime.parse(item.timestampLastUsed!).toLocal()),
|
||||||
|
style: const TextStyle(fontSize: 14),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 4),
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
"Permissions: " + _formatPermissions(item.permissions, item.allChannels, item.channels),
|
||||||
|
style: TextStyle(color: Theme.of(context).textTheme.bodyLarge?.color?.withAlpha(160)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(item.messagesSent.toString(), style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
),
|
GestureDetector(
|
||||||
|
behavior: HitTestBehavior.opaque,
|
||||||
|
onTap: () {
|
||||||
|
Navi.push(context, () => FilteredMessageViewPage(title: item.name, alertText: 'All message sent with the key \'${item.name}\'', filter: MessageFilter(usedKeys: [item.keytokenID])));
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 12, right: 16),
|
||||||
|
child: Center(widthFactor: 1.0, child: Icon(FontAwesomeIcons.solidEnvelopes, color: Theme.of(context).colorScheme.onPrimaryContainer.withAlpha(128), size: 24)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -28,58 +28,67 @@ class SenderListItem extends StatelessWidget {
|
|||||||
margin: EdgeInsets.fromLTRB(0, 4, 0, 4),
|
margin: EdgeInsets.fromLTRB(0, 4, 0, 4),
|
||||||
shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(0)),
|
shape: BeveledRectangleBorder(borderRadius: BorderRadius.circular(0)),
|
||||||
color: Theme.of(context).cardTheme.color,
|
color: Theme.of(context).cardTheme.color,
|
||||||
child: InkWell(
|
child: IntrinsicHeight(
|
||||||
onTap: () {
|
child: Row(
|
||||||
Navi.push(context, () => FilteredMessageViewPage(title: item.name, alertText: 'All message sent from \'${item.name}\'', filter: MessageFilter(senderNames: [item.name])));
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
},
|
children: [
|
||||||
child: Padding(
|
Expanded(
|
||||||
padding: const EdgeInsets.all(8),
|
child: InkWell(
|
||||||
child: Row(
|
|
||||||
children: [
|
|
||||||
Icon(FontAwesomeIcons.solidSignature, color: Theme.of(context).colorScheme.outline, size: 32),
|
|
||||||
SizedBox(width: 16),
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: Text(
|
|
||||||
item.name,
|
|
||||||
style: const TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
SizedBox(height: 4),
|
|
||||||
Row(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.end,
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: Text(
|
|
||||||
dateFormat.format(DateTime.parse(item.lastTimestamp).toLocal()),
|
|
||||||
style: TextStyle(color: Theme.of(context).textTheme.bodyLarge?.color?.withAlpha(160)),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Text(item.count.toString(), style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
SizedBox(width: 4),
|
|
||||||
GestureDetector(
|
|
||||||
onTap: () {
|
onTap: () {
|
||||||
Navi.push(context, () => FilteredMessageViewPage(title: item.name, alertText: 'All message sent from \'${item.name}\'', filter: MessageFilter(senderNames: [item.name])));
|
Navi.push(context, () => FilteredMessageViewPage(title: item.name, alertText: 'All message sent from \'${item.name}\'', filter: MessageFilter(senderNames: [item.name])));
|
||||||
},
|
},
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.all(8),
|
padding: const EdgeInsets.all(8),
|
||||||
child: Icon(FontAwesomeIcons.solidEnvelopes, color: Theme.of(context).colorScheme.onPrimaryContainer.withAlpha(128), size: 24),
|
child: Row(
|
||||||
|
children: [
|
||||||
|
Icon(FontAwesomeIcons.solidSignature, color: Theme.of(context).colorScheme.outline, size: 32),
|
||||||
|
SizedBox(width: 16),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
item.name,
|
||||||
|
style: const TextStyle(fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(height: 4),
|
||||||
|
Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
dateFormat.format(DateTime.parse(item.lastTimestamp).toLocal()),
|
||||||
|
style: TextStyle(color: Theme.of(context).textTheme.bodyLarge?.color?.withAlpha(160)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(item.count.toString(), style: const TextStyle(fontSize: 14, fontWeight: FontWeight.bold)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
),
|
||||||
),
|
GestureDetector(
|
||||||
|
behavior: HitTestBehavior.opaque,
|
||||||
|
onTap: () {
|
||||||
|
Navi.push(context, () => FilteredMessageViewPage(title: item.name, alertText: 'All message sent from \'${item.name}\'', filter: MessageFilter(senderNames: [item.name])));
|
||||||
|
},
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 12, right: 16),
|
||||||
|
child: Center(widthFactor: 1.0, child: Icon(FontAwesomeIcons.solidEnvelopes, color: Theme.of(context).colorScheme.onPrimaryContainer.withAlpha(128), size: 24)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ name: simplecloudnotifier
|
|||||||
description: "Receive push messages"
|
description: "Receive push messages"
|
||||||
publish_to: 'none'
|
publish_to: 'none'
|
||||||
|
|
||||||
version: 2.2.2+544
|
version: 2.2.8+553
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.9.0 <4.0.0'
|
sdk: '>=3.9.0 <4.0.0'
|
||||||
|
|||||||
Reference in New Issue
Block a user