Files
iiEsaywebUIapp/lib/shared/widgets/markdown/streaming_markdown_widget.dart
cogwheel0 7debb7a055 chore: update markdown dependency and refactor streaming handling
- Added `markdown` dependency version `^7.2.1` in `pubspec.yaml`.
- Updated `pubspec.lock` to reflect the direct dependency change.
- Refactored `streaming_helper.dart` to utilize `StreamingResponseController` for better stream management.
- Enhanced `ChatMessagesNotifier` to handle message streams with improved formatting and error handling.
- Updated `StreamingMarkdownWidget` to streamline markdown rendering and support new configurations.
2025-09-30 20:49:02 +05:30

61 lines
1.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_markdown_plus/flutter_markdown_plus.dart';
import 'markdown_config.dart';
class StreamingMarkdownWidget extends StatelessWidget {
const StreamingMarkdownWidget({
super.key,
required this.content,
required this.isStreaming,
this.onTapLink,
});
final String content;
final bool isStreaming;
final MarkdownTapLinkCallback? onTapLink;
@override
Widget build(BuildContext context) {
final markdownTheme = ConduitMarkdownConfig.resolve(context);
if (content.trim().isEmpty) {
return isStreaming ? const SizedBox.shrink() : const SizedBox.shrink();
}
return MarkdownBody(
data: content,
styleSheet: markdownTheme.styleSheet,
softLineBreak: true,
selectable: true,
builders: markdownTheme.builders,
inlineSyntaxes: markdownTheme.inlineSyntaxes,
imageBuilder: markdownTheme.imageBuilder,
onTapLink: onTapLink,
);
}
}
extension StreamingMarkdownExtension on String {
Widget toMarkdown({required BuildContext context, bool isStreaming = false}) {
return StreamingMarkdownWidget(content: this, isStreaming: isStreaming);
}
}
class MarkdownWithLoading extends StatelessWidget {
const MarkdownWithLoading({super.key, this.content, required this.isLoading});
final String? content;
final bool isLoading;
@override
Widget build(BuildContext context) {
final value = content ?? '';
if (isLoading && value.isEmpty) {
return const Center(child: CircularProgressIndicator());
}
return StreamingMarkdownWidget(content: value, isStreaming: isLoading);
}
}