mirror of
https://mirror.ghproxy.com/https://github.com/StarCitizenToolBox/app.git
synced 2024-12-23 06:33:43 +08:00
113 lines
3.1 KiB
Dart
113 lines
3.1 KiB
Dart
import 'package:extended_image/extended_image.dart';
|
|
import 'dart:ui' as ui;
|
|
|
|
import 'package:markdown_widget/config/all.dart';
|
|
import 'package:markdown_widget/widget/all.dart';
|
|
import 'package:url_launcher/url_launcher_string.dart';
|
|
|
|
import '../base/ui.dart';
|
|
|
|
Widget makeLoading(
|
|
BuildContext context, {
|
|
double? width,
|
|
}) {
|
|
width ??= 30;
|
|
return Center(
|
|
child: SizedBox(
|
|
width: width,
|
|
height: width,
|
|
// child: Lottie.asset("images/lottie/loading.zip", width: width),
|
|
child: const ProgressRing(),
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget makeSafeAre(BuildContext context, {bool withKeyboard = true}) {
|
|
return SafeArea(
|
|
child: Column(
|
|
children: [
|
|
const SizedBox(height: 4),
|
|
if (withKeyboard)
|
|
SizedBox(
|
|
height: MediaQuery.of(context).viewInsets.bottom,
|
|
),
|
|
],
|
|
));
|
|
}
|
|
|
|
makeSvgColor(Color color) {
|
|
return ui.ColorFilter.mode(color, ui.BlendMode.srcIn);
|
|
}
|
|
|
|
bool isPadUI(BuildContext context) {
|
|
final size = MediaQuery.of(context).size;
|
|
return size.width >= size.height;
|
|
}
|
|
|
|
fastPadding(
|
|
{required double? all,
|
|
required Widget child,
|
|
double left = 0.0,
|
|
double top = 0.0,
|
|
double right = 0.0,
|
|
double bottom = 0.0}) {
|
|
return Padding(
|
|
padding: all != null
|
|
? EdgeInsets.all(all)
|
|
: EdgeInsets.only(left: left, top: top, right: right, bottom: bottom),
|
|
child: child);
|
|
}
|
|
|
|
List<Widget> makeMarkdownView(String description, {String? attachmentsUrl}) {
|
|
return MarkdownGenerator().buildWidgets(description,
|
|
config: MarkdownConfig(configs: [
|
|
LinkConfig(onTap: (url) {
|
|
if (url.startsWith("/") && attachmentsUrl != null) {
|
|
url = "$attachmentsUrl/$url";
|
|
}
|
|
launchUrlString(url);
|
|
}),
|
|
ImgConfig(builder: (String url, Map<String, String> attributes) {
|
|
if (url.startsWith("/") && attachmentsUrl != null) {
|
|
url = "$attachmentsUrl/$url";
|
|
}
|
|
return ExtendedImage.network(
|
|
url,
|
|
loadStateChanged: (ExtendedImageState state) {
|
|
switch (state.extendedImageLoadState) {
|
|
case LoadState.loading:
|
|
return const Center(
|
|
child: Padding(
|
|
padding: EdgeInsets.all(8.0),
|
|
child: Column(
|
|
children: [
|
|
ProgressRing(),
|
|
SizedBox(
|
|
height: 12,
|
|
),
|
|
Text("加载图片...")
|
|
],
|
|
),
|
|
),
|
|
);
|
|
case LoadState.completed:
|
|
return ExtendedRawImage(
|
|
image: state.extendedImageInfo?.image,
|
|
);
|
|
case LoadState.failed:
|
|
return Text("Loading Image error $url");
|
|
}
|
|
},
|
|
);
|
|
})
|
|
]));
|
|
}
|
|
|
|
class NoScrollBehavior extends ScrollBehavior {
|
|
@override
|
|
Widget buildOverscrollIndicator(
|
|
BuildContext context, Widget child, ScrollableDetails details) {
|
|
return child;
|
|
}
|
|
}
|