asjqkkkk / markdown_widget

📖Rendering markdown by flutter!Welcome for pr and issue.
MIT License
321 stars 93 forks source link

如果是代码的话不显示代码块,同时按照按照demo上的复制按钮也不展示 #140

Closed fei1025 closed 10 months ago

fei1025 commented 10 months ago

开发目标: 桌面端应用

flutter 版本 image

markdown版本:

markdown_widget: ^2.2.0

如果是代码的话不显示代码块 image 如果复制的时候,代码区域选择不上 image

用法代码:

List<Widget> getmd(BuildContext  context,String data){
  var appState = context.watch<MyAppState>(); // 使用 context.watch 监听 MyAppsState 的变化
  bool isDarkMode = appState.isDarkMode;
  final config =
  isDarkMode ? MarkdownConfig.darkConfig : MarkdownConfig.defaultConfig;
  codeWrapper(child, text) => CodeWrapperWidget(child: child, text: text);
  final config1 = config.copy(configs: [
    isDarkMode? PreConfig.darkConfig.copy(wrapper: codeWrapper): PreConfig().copy(wrapper: codeWrapper)
  ]);

  return MarkdownGenerator().buildWidgets(data,config: config1
  );
} 

使用的代码:


class ChatRightInfo extends StatefulWidget {
  const ChatRightInfo({super.key});

  @override
  _ChatRightInfo createState() => _ChatRightInfo();
}

class _ChatRightInfo extends State<ChatRightInfo> {
  @override
  Widget build(BuildContext context) {
    var appState = context.watch<MyAppState>();
    List msessage = [];
    bool isDarkMode=appState.isDarkMode;

    msessage.add({"user":"me","conter":"##这是一个标题"});
    msessage.add({"user":"me","conter":"#### 这是一个普通内容"});
    msessage.add({"user":"you","conter":  ""
        "这是一个普通内容"
        "``` "
        "class MarkdownHelper {Map<String, Widget> getTitleWidget(m.Node node) "
        "=> title.getTitleWidget(node);Widget getPWidget(m.Element node) => p.getPWidget(node);"
        "Widget getPreWidget(m.Node node) => pre.getPreWidget(node); }"
        " ```"});

    return Scaffold(
      body: SelectionArea(
          child: ListView.builder(
              itemCount: msessage.length,
              itemBuilder: (context, index) {
                return ListTile(
                  leading:msessage[index]["user"]=="me" ?null :const CircleAvatar(child: Text("gpt")),
                    trailing:msessage[index]["user"]=="me" ?const CircleAvatar(child: Text("you")):null ,
                    title: Container(
                        constraints: BoxConstraints(
                          maxWidth: MediaQuery.of(context).size.width *
                              0.6, // 限制宽度
                        ),
                        alignment: msessage[index]["user"] == "me"
                            ? Alignment.centerRight
                            : Alignment.centerLeft,
                        child: msessage[index]["user"]=="me"?
                          Container(
                              decoration: BoxDecoration(
                                color:isDarkMode?null:Colors.blue[100],
                                borderRadius: BorderRadius.circular(5),
                              ),
                            child: Text(msessage[index]["conter"])  ,
                          ):
                          Column(
                            children: [
                              Container(
                                decoration: BoxDecoration(
                                  color:isDarkMode?null:Colors.grey[200],
                                  borderRadius: BorderRadius.circular(5),
                              ),
                                margin: const EdgeInsets.only(right: 100,) ,
                                child: Column(
                                    children: getmd(context,msessage[index]["conter"])),
                              ),
                              Container(
                                  margin: const EdgeInsets.only(right: 100,) ,

                                  child:Row(
                                    mainAxisAlignment: MainAxisAlignment.end,
                                    children: [IconButton(onPressed: (){
                                      Clipboard.setData(ClipboardData(text: msessage[index]["conter"]));
                                      ScaffoldMessenger.of(context).showSnackBar(SnackBar(
                                        content: Text('复制成功'),
                                      ));

                                    }, icon: Icon(Icons.copy,size: 18,))],)
                              )

                            ],

                          ),

                    ));
              }),
      ),
    );
  }
}
fei1025 commented 10 months ago

额,问题解决,代码格式必须换行才行 image

但是为啥文字居中展示了

image

fei1025 commented 10 months ago

问题解决,布局问题