Compare commits
No commits in common. "a157596a2eccfe30b33450a5ade64d004c9cda4c" and "53b3cac4ca1291814037d54ab93acd22e2dc6b39" have entirely different histories.
a157596a2e
...
53b3cac4ca
@ -104,6 +104,7 @@ abstract class AppRouter {
|
||||
reply: arguments?.reply,
|
||||
repost: arguments?.repost,
|
||||
realm: arguments?.realm,
|
||||
postListController: arguments?.postListController,
|
||||
mode: int.tryParse(state.uri.queryParameters['mode'] ?? '0') ?? 0,
|
||||
),
|
||||
transitionsBuilder:
|
||||
|
@ -300,7 +300,6 @@ class _AccountProfilePageState extends State<AccountProfilePage> {
|
||||
PostWarpedListWidget(
|
||||
isPinned: false,
|
||||
controller: _postController.pagingController,
|
||||
onUpdate: () => _postController.reloadAllOver(),
|
||||
),
|
||||
]),
|
||||
),
|
||||
|
@ -76,8 +76,6 @@ class _DraftBoxScreenState extends State<DraftBoxScreen> {
|
||||
itemBuilder: (context, item, index) {
|
||||
return PostOwnedListEntry(
|
||||
item: item,
|
||||
backgroundColor:
|
||||
Theme.of(context).colorScheme.surfaceContainerLow,
|
||||
onTap: () async {
|
||||
showModalBottomSheet(
|
||||
useRootNavigator: true,
|
||||
@ -87,13 +85,7 @@ class _DraftBoxScreenState extends State<DraftBoxScreen> {
|
||||
noReact: true,
|
||||
),
|
||||
).then((value) {
|
||||
if (value is Future) {
|
||||
value.then((_) {
|
||||
_pagingController.refresh();
|
||||
});
|
||||
} else if (value != null) {
|
||||
_pagingController.refresh();
|
||||
}
|
||||
if (value != null) _pagingController.refresh();
|
||||
});
|
||||
},
|
||||
).paddingOnly(left: 12, right: 12, bottom: 4);
|
||||
|
@ -77,10 +77,7 @@ class _FeedSearchScreenState extends State<FeedSearchScreen> {
|
||||
onRefresh: () => Future.sync(() => _pagingController.refresh()),
|
||||
child: CustomScrollView(
|
||||
slivers: [
|
||||
PostWarpedListWidget(
|
||||
controller: _pagingController,
|
||||
onUpdate: () => _pagingController.refresh(),
|
||||
),
|
||||
PostWarpedListWidget(controller: _pagingController),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
@ -4,6 +4,7 @@ import 'package:solian/controllers/post_list_controller.dart';
|
||||
import 'package:solian/providers/auth.dart';
|
||||
import 'package:solian/router.dart';
|
||||
import 'package:solian/screens/account/notification.dart';
|
||||
import 'package:solian/screens/posts/post_editor.dart';
|
||||
import 'package:solian/theme.dart';
|
||||
import 'package:solian/widgets/app_bar_title.dart';
|
||||
import 'package:solian/widgets/current_state_action.dart';
|
||||
@ -46,20 +47,15 @@ class _HomeScreenState extends State<HomeScreen>
|
||||
child: Scaffold(
|
||||
floatingActionButton: FloatingActionButton(
|
||||
child: const Icon(Icons.add),
|
||||
onPressed: () async {
|
||||
final value = await showModalBottomSheet(
|
||||
onPressed: () {
|
||||
showModalBottomSheet(
|
||||
useRootNavigator: true,
|
||||
isScrollControlled: true,
|
||||
context: context,
|
||||
builder: (context) => const PostCreatePopup(),
|
||||
builder: (context) => PostCreatePopup(
|
||||
controller: _postController,
|
||||
),
|
||||
);
|
||||
if (value is Future) {
|
||||
value.then((_) {
|
||||
_postController.reloadAllOver();
|
||||
});
|
||||
} else if (value != null) {
|
||||
_postController.reloadAllOver();
|
||||
}
|
||||
},
|
||||
),
|
||||
body: NestedScrollView(
|
||||
@ -104,7 +100,6 @@ class _HomeScreenState extends State<HomeScreen>
|
||||
child: CustomScrollView(slivers: [
|
||||
PostWarpedListWidget(
|
||||
controller: _postController.pagingController,
|
||||
onUpdate: () => _postController.reloadAllOver(),
|
||||
),
|
||||
]),
|
||||
),
|
||||
@ -126,10 +121,12 @@ class _HomeScreenState extends State<HomeScreen>
|
||||
|
||||
class PostCreatePopup extends StatelessWidget {
|
||||
final bool hideDraftBox;
|
||||
final PostListController controller;
|
||||
|
||||
const PostCreatePopup({
|
||||
super.key,
|
||||
this.hideDraftBox = false,
|
||||
required this.controller,
|
||||
});
|
||||
|
||||
@override
|
||||
@ -145,14 +142,13 @@ class PostCreatePopup extends StatelessWidget {
|
||||
icon: const Icon(Icons.post_add),
|
||||
label: 'postEditorModeStory'.tr,
|
||||
onTap: () {
|
||||
Navigator.pop(
|
||||
context,
|
||||
Navigator.pop(context);
|
||||
AppRouter.instance.pushNamed(
|
||||
'postEditor',
|
||||
extra: PostPublishArguments(postListController: controller),
|
||||
queryParameters: {
|
||||
'mode': 0.toString(),
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
@ -160,14 +156,13 @@ class PostCreatePopup extends StatelessWidget {
|
||||
icon: const Icon(Icons.description),
|
||||
label: 'postEditorModeArticle'.tr,
|
||||
onTap: () {
|
||||
Navigator.pop(
|
||||
context,
|
||||
Navigator.pop(context);
|
||||
AppRouter.instance.pushNamed(
|
||||
'postEditor',
|
||||
extra: PostPublishArguments(postListController: controller),
|
||||
queryParameters: {
|
||||
'mode': 1.toString(),
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
@ -175,10 +170,8 @@ class PostCreatePopup extends StatelessWidget {
|
||||
icon: const Icon(Icons.drafts),
|
||||
label: 'draftBoxOpen'.tr,
|
||||
onTap: () {
|
||||
Navigator.pop(
|
||||
context,
|
||||
AppRouter.instance.pushNamed('draftBox'),
|
||||
);
|
||||
Navigator.pop(context);
|
||||
AppRouter.instance.pushNamed('draftBox');
|
||||
},
|
||||
),
|
||||
];
|
||||
|
@ -61,7 +61,6 @@ class _PostDetailScreenState extends State<PostDetailScreen> {
|
||||
item: item!,
|
||||
isClickable: true,
|
||||
isFullDate: true,
|
||||
isFullContent: true,
|
||||
isShowReply: false,
|
||||
isContentSelectable: true,
|
||||
),
|
||||
|
@ -5,6 +5,7 @@ import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:markdown_toolbar/markdown_toolbar.dart';
|
||||
import 'package:solian/controllers/post_editor_controller.dart';
|
||||
import 'package:solian/controllers/post_list_controller.dart';
|
||||
import 'package:solian/exts.dart';
|
||||
import 'package:solian/models/post.dart';
|
||||
import 'package:solian/models/realm.dart';
|
||||
@ -22,12 +23,14 @@ class PostPublishArguments {
|
||||
final Post? reply;
|
||||
final Post? repost;
|
||||
final Realm? realm;
|
||||
final PostListController? postListController;
|
||||
|
||||
PostPublishArguments({
|
||||
this.edit,
|
||||
this.reply,
|
||||
this.repost,
|
||||
this.realm,
|
||||
this.postListController,
|
||||
});
|
||||
}
|
||||
|
||||
@ -36,6 +39,7 @@ class PostPublishScreen extends StatefulWidget {
|
||||
final Post? reply;
|
||||
final Post? repost;
|
||||
final Realm? realm;
|
||||
final PostListController? postListController;
|
||||
final int mode;
|
||||
|
||||
const PostPublishScreen({
|
||||
@ -44,6 +48,7 @@ class PostPublishScreen extends StatefulWidget {
|
||||
this.reply,
|
||||
this.repost,
|
||||
this.realm,
|
||||
this.postListController,
|
||||
required this.mode,
|
||||
});
|
||||
|
||||
@ -90,6 +95,9 @@ class _PostPublishScreenState extends State<PostPublishScreen> {
|
||||
context.showErrorDialog(resp.bodyString);
|
||||
} else {
|
||||
_editorController.localClear();
|
||||
if (widget.postListController != null) {
|
||||
widget.postListController!.reloadAllOver();
|
||||
}
|
||||
AppRouter.instance.pop(resp.body);
|
||||
}
|
||||
|
||||
|
@ -361,5 +361,4 @@ const i18nEnglish = {
|
||||
'stickerUploaderName': 'Name',
|
||||
'stickerUploaderNameHint':
|
||||
'A human-friendly name given to the user in the sticker selection interface.',
|
||||
'readMore': 'Read more',
|
||||
};
|
||||
|
@ -329,5 +329,4 @@ const i18nSimplifiedChinese = {
|
||||
'stickerUploaderAliasHint': '将会在输入时使用和贴图包前缀组成占位符。',
|
||||
'stickerUploaderName': '贴图名称',
|
||||
'stickerUploaderNameHint': '在贴图选择界面提供给用户的人类友好名称。',
|
||||
'readMore': '阅读更多',
|
||||
};
|
||||
|
@ -1,5 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:solian/exts.dart';
|
||||
import 'package:solian/models/account.dart';
|
||||
import 'package:solian/providers/account_status.dart';
|
||||
import 'package:solian/router.dart';
|
||||
@ -17,38 +18,23 @@ class AccountProfilePopup extends StatefulWidget {
|
||||
|
||||
class _AccountProfilePopupState extends State<AccountProfilePopup> {
|
||||
bool _isBusy = true;
|
||||
dynamic _hasError;
|
||||
|
||||
Account? _userinfo;
|
||||
|
||||
void _getUserinfo() async {
|
||||
setState(() => _isBusy = true);
|
||||
|
||||
try {
|
||||
final client = ServiceFinder.configureClient('auth');
|
||||
final resp = await client.get('/users/${widget.name}');
|
||||
if (resp.statusCode == 200) {
|
||||
setState(() {
|
||||
_userinfo = Account.fromJson(resp.body);
|
||||
_isBusy = false;
|
||||
});
|
||||
setState(() => _isBusy = false);
|
||||
} else {
|
||||
setState(() {
|
||||
_hasError = resp.bodyString;
|
||||
_isBusy = false;
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
setState(() {
|
||||
_hasError = e;
|
||||
_isBusy = false;
|
||||
});
|
||||
context.showErrorDialog(resp.bodyString);
|
||||
Navigator.pop(context);
|
||||
}
|
||||
}
|
||||
|
||||
Color get _unFocusColor =>
|
||||
Theme.of(context).colorScheme.onSurface.withOpacity(0.75);
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@ -57,35 +43,13 @@ class _AccountProfilePopupState extends State<AccountProfilePopup> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (_isBusy) {
|
||||
if (_isBusy || _userinfo == null) {
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height * 0.75,
|
||||
child: const Center(child: CircularProgressIndicator()),
|
||||
);
|
||||
}
|
||||
|
||||
if (_hasError != null) {
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height * 0.75,
|
||||
width: double.infinity,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
const Icon(Icons.cancel, size: 24),
|
||||
const SizedBox(height: 12),
|
||||
Text(
|
||||
_hasError.toString(),
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
fontSize: 13,
|
||||
color: _unFocusColor,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height * 0.75,
|
||||
child: Column(
|
||||
|
@ -97,13 +97,13 @@ class _PostActionState extends State<PostAction> {
|
||||
leading: const FaIcon(FontAwesomeIcons.reply, size: 20),
|
||||
title: Text('reply'.tr),
|
||||
onTap: () async {
|
||||
Navigator.pop(
|
||||
context,
|
||||
AppRouter.instance.pushNamed(
|
||||
final value = await AppRouter.instance.pushNamed(
|
||||
'postEditor',
|
||||
extra: PostPublishArguments(reply: widget.item),
|
||||
),
|
||||
);
|
||||
if (value != null) {
|
||||
Navigator.pop(context, true);
|
||||
}
|
||||
},
|
||||
),
|
||||
if (!widget.noReact)
|
||||
@ -112,13 +112,13 @@ class _PostActionState extends State<PostAction> {
|
||||
leading: const FaIcon(FontAwesomeIcons.retweet, size: 20),
|
||||
title: Text('repost'.tr),
|
||||
onTap: () async {
|
||||
Navigator.pop(
|
||||
context,
|
||||
AppRouter.instance.pushNamed(
|
||||
final value = await AppRouter.instance.pushNamed(
|
||||
'postEditor',
|
||||
extra: PostPublishArguments(repost: widget.item),
|
||||
),
|
||||
);
|
||||
if (value != null) {
|
||||
Navigator.pop(context, true);
|
||||
}
|
||||
},
|
||||
),
|
||||
if (_canModifyContent && !widget.noReact)
|
||||
@ -146,13 +146,13 @@ class _PostActionState extends State<PostAction> {
|
||||
leading: const Icon(Icons.edit),
|
||||
title: Text('edit'.tr),
|
||||
onTap: () async {
|
||||
Navigator.pop(
|
||||
context,
|
||||
AppRouter.instance.pushNamed(
|
||||
final value = await AppRouter.instance.pushNamed(
|
||||
'postEditor',
|
||||
extra: PostPublishArguments(edit: widget.item),
|
||||
),
|
||||
);
|
||||
if (value != null) {
|
||||
Navigator.pop(context, true);
|
||||
}
|
||||
},
|
||||
),
|
||||
if (_canModifyContent)
|
||||
|
@ -1,6 +1,5 @@
|
||||
import 'package:animations/animations.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:get/get_utils/get_utils.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
@ -24,7 +23,6 @@ class PostItem extends StatefulWidget {
|
||||
final bool isShowReply;
|
||||
final bool isShowEmbed;
|
||||
final bool isFullDate;
|
||||
final bool isFullContent;
|
||||
final bool isContentSelectable;
|
||||
final String? attachmentParent;
|
||||
final Color? backgroundColor;
|
||||
@ -38,7 +36,6 @@ class PostItem extends StatefulWidget {
|
||||
this.isShowReply = true,
|
||||
this.isShowEmbed = true,
|
||||
this.isFullDate = false,
|
||||
this.isFullContent = false,
|
||||
this.isContentSelectable = false,
|
||||
this.attachmentParent,
|
||||
this.backgroundColor,
|
||||
@ -167,7 +164,6 @@ class _PostItemState extends State<PostItem> {
|
||||
|
||||
Widget _buildReply(BuildContext context) {
|
||||
return OpenContainer(
|
||||
tappable: widget.isClickable,
|
||||
closedBuilder: (_, openContainer) => Column(
|
||||
children: [
|
||||
Row(
|
||||
@ -206,15 +202,13 @@ class _PostItemState extends State<PostItem> {
|
||||
),
|
||||
closedElevation: 0,
|
||||
openElevation: 0,
|
||||
closedColor:
|
||||
widget.backgroundColor ?? Theme.of(context).colorScheme.surface,
|
||||
closedColor: widget.backgroundColor ?? Theme.of(context).colorScheme.surface,
|
||||
openColor: Theme.of(context).colorScheme.surface,
|
||||
);
|
||||
}
|
||||
|
||||
Widget _buildRepost(BuildContext context) {
|
||||
return OpenContainer(
|
||||
tappable: widget.isClickable,
|
||||
closedBuilder: (_, openContainer) => Column(
|
||||
children: [
|
||||
Row(
|
||||
@ -253,14 +247,11 @@ class _PostItemState extends State<PostItem> {
|
||||
),
|
||||
closedElevation: 0,
|
||||
openElevation: 0,
|
||||
closedColor:
|
||||
widget.backgroundColor ?? Theme.of(context).colorScheme.surface,
|
||||
closedColor: widget.backgroundColor ?? Theme.of(context).colorScheme.surface,
|
||||
openColor: Theme.of(context).colorScheme.surface,
|
||||
);
|
||||
}
|
||||
|
||||
double _contentHeight = 0;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final List<int> attachments = item.body['attachments'] is List
|
||||
@ -304,7 +295,6 @@ class _PostItemState extends State<PostItem> {
|
||||
}
|
||||
|
||||
return OpenContainer(
|
||||
tappable: widget.isClickable,
|
||||
closedBuilder: (_, openContainer) => Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
@ -332,31 +322,11 @@ class _PostItemState extends State<PostItem> {
|
||||
_buildHeader(),
|
||||
SizedContainer(
|
||||
maxWidth: 640,
|
||||
maxHeight: widget.isFullContent ? double.infinity : 320,
|
||||
child: _MeasureSize(
|
||||
onChange: (size) {
|
||||
_contentHeight = size.height;
|
||||
},
|
||||
child: MarkdownTextContent(
|
||||
content: item.body['content'],
|
||||
isSelectable: widget.isContentSelectable,
|
||||
).paddingOnly(left: 12, right: 8),
|
||||
),
|
||||
),
|
||||
if (_contentHeight >= 320 &&
|
||||
widget.isClickable &&
|
||||
!widget.isFullContent)
|
||||
InkWell(
|
||||
child: Text(
|
||||
'readMore'.tr,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.primary,
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
openContainer();
|
||||
},
|
||||
).paddingOnly(left: 12, top: 4),
|
||||
if (widget.item.replyTo != null && widget.isShowEmbed)
|
||||
_buildReply(context).paddingOnly(top: 4),
|
||||
if (widget.item.repostTo != null && widget.isShowEmbed)
|
||||
@ -407,52 +377,8 @@ class _PostItemState extends State<PostItem> {
|
||||
),
|
||||
closedElevation: 0,
|
||||
openElevation: 0,
|
||||
closedColor:
|
||||
widget.backgroundColor ?? Theme.of(context).colorScheme.surface,
|
||||
closedColor: widget.backgroundColor ?? Theme.of(context).colorScheme.surface,
|
||||
openColor: Theme.of(context).colorScheme.surface,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
typedef _OnWidgetSizeChange = void Function(Size size);
|
||||
|
||||
class _MeasureSizeRenderObject extends RenderProxyBox {
|
||||
Size? oldSize;
|
||||
_OnWidgetSizeChange onChange;
|
||||
|
||||
_MeasureSizeRenderObject(this.onChange);
|
||||
|
||||
@override
|
||||
void performLayout() {
|
||||
super.performLayout();
|
||||
|
||||
Size newSize = child!.size;
|
||||
if (oldSize == newSize) return;
|
||||
|
||||
oldSize = newSize;
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
onChange(newSize);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
class _MeasureSize extends SingleChildRenderObjectWidget {
|
||||
final _OnWidgetSizeChange onChange;
|
||||
|
||||
const _MeasureSize({
|
||||
super.key,
|
||||
required this.onChange,
|
||||
required Widget super.child,
|
||||
});
|
||||
|
||||
@override
|
||||
RenderObject createRenderObject(BuildContext context) {
|
||||
return _MeasureSizeRenderObject(onChange);
|
||||
}
|
||||
|
||||
@override
|
||||
void updateRenderObject(
|
||||
BuildContext context, covariant _MeasureSizeRenderObject renderObject) {
|
||||
renderObject.onChange = onChange;
|
||||
}
|
||||
}
|
||||
|
@ -85,13 +85,7 @@ class PostListEntryWidget extends StatelessWidget {
|
||||
context: context,
|
||||
builder: (context) => PostAction(item: item),
|
||||
).then((value) {
|
||||
if (value is Future) {
|
||||
value.then((_) {
|
||||
onUpdate();
|
||||
});
|
||||
} else if (value != null) {
|
||||
onUpdate();
|
||||
}
|
||||
if (value != null) onUpdate();
|
||||
});
|
||||
},
|
||||
);
|
||||
|
@ -6,19 +6,18 @@ import 'package:solian/widgets/posts/post_item.dart';
|
||||
class PostOwnedListEntry extends StatelessWidget {
|
||||
final Post item;
|
||||
final Function onTap;
|
||||
final Color? backgroundColor;
|
||||
|
||||
const PostOwnedListEntry({
|
||||
super.key,
|
||||
required this.item,
|
||||
required this.onTap,
|
||||
this.backgroundColor,
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Card(
|
||||
child: GestureDetector(
|
||||
child: InkWell(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(8)),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
@ -29,7 +28,6 @@ class PostOwnedListEntry extends StatelessWidget {
|
||||
isClickable: false,
|
||||
isShowReply: false,
|
||||
isReactable: false,
|
||||
backgroundColor: backgroundColor,
|
||||
).paddingSymmetric(vertical: 8),
|
||||
],
|
||||
),
|
||||
|
@ -9,7 +9,6 @@ class PostWarpedListWidget extends StatelessWidget {
|
||||
final bool isNestedClickable;
|
||||
final bool isPinned;
|
||||
final PagingController<int, Post> controller;
|
||||
final Function? onUpdate;
|
||||
|
||||
const PostWarpedListWidget({
|
||||
super.key,
|
||||
@ -18,7 +17,6 @@ class PostWarpedListWidget extends StatelessWidget {
|
||||
this.isClickable = true,
|
||||
this.isNestedClickable = true,
|
||||
this.isPinned = true,
|
||||
this.onUpdate,
|
||||
});
|
||||
|
||||
@override
|
||||
@ -37,7 +35,9 @@ class PostWarpedListWidget extends StatelessWidget {
|
||||
isNestedClickable: isNestedClickable,
|
||||
isClickable: isClickable,
|
||||
item: item,
|
||||
onUpdate: onUpdate ?? () {},
|
||||
onUpdate: () {
|
||||
controller.refresh();
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
|
@ -3,13 +3,11 @@ import 'package:flutter/material.dart';
|
||||
class SizedContainer extends StatelessWidget {
|
||||
final Widget child;
|
||||
final double maxWidth;
|
||||
final double maxHeight;
|
||||
|
||||
const SizedContainer({
|
||||
super.key,
|
||||
required this.child,
|
||||
this.maxWidth = 720,
|
||||
this.maxHeight = double.infinity,
|
||||
});
|
||||
|
||||
@override
|
||||
@ -17,7 +15,7 @@ class SizedContainer extends StatelessWidget {
|
||||
return Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: Container(
|
||||
constraints: BoxConstraints(maxWidth: maxWidth, maxHeight: maxHeight),
|
||||
constraints: BoxConstraints(maxWidth: maxWidth),
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
|
16
pubspec.lock
16
pubspec.lock
@ -385,14 +385,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
field_suggestion:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: field_suggestion
|
||||
sha256: "596362ed67a661a18e01e4f51b8b92424f333baf37cebd48cc647a4c82c858d5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.2.5"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -744,14 +736,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.2"
|
||||
highlightable:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: highlightable
|
||||
sha256: "526793e148c91977b694d75d99cd34401ea3b65efd223e7b539c76916af86ffd"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.5"
|
||||
http:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
@ -66,7 +66,6 @@ dependencies:
|
||||
animations: ^2.0.11
|
||||
avatar_stack: ^1.2.0
|
||||
async: ^2.11.0
|
||||
field_suggestion: ^0.2.5
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
Loading…
x
Reference in New Issue
Block a user