【问题标题】:Flutter - flutter_html package - customTextStyle isn't definedFlutter - flutter_html 包 - 未定义 customTextStyle
【发布时间】:2020-05-26 13:36:51
【问题描述】:

根据 flutter_html 包中的示例,我正在尝试添加 customTextStyle(字体的当前大小太小)。 每次我从示例中添加代码时,我都会得到一条红色波浪线(使用 Android Studio),告诉我它没有定义。然而它在示例中:

  customTextStyle: (dom.Node node, TextStyle baseStyle) {
    if (node is dom.Element) {
      switch (node.localName) {
        case "p":
          return baseStyle.merge(TextStyle(height: 2, fontSize: 20));
      }
    }
    return baseStyle;
  },

示例代码(注释)中提到: //Must have useRichText set to false for this to work.

这很好,但是如何将其设置为 false?我试图将它添加到相同代码中的各个位置,但它不起作用,它会告诉我它没有定义。我需要一些额外的包裹吗?这个不清楚。

感谢您对此提供的帮助。

这是一个 single_news_screen.dart 文件,我在其中使用了这个包。该文件的代码在这里:

import 'package:flutter/material.dart';
import 'package:date_format/date_format.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:thw_network/utilities/constants.dart';
import 'package:thw_network/screens/main_screen.dart';

class SingleNewsScreen extends StatefulWidget {

  SingleNewsScreen({ this.dataNews });

  final dataNews;

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

class _SingleNewsScreenState extends State<SingleNewsScreen> {

  dynamic news;

  @override
  void initState() {
    super.initState();
    news = widget.dataNews;
  }

  cardTitle(String title) {
    if(title.length > 120) {
      return title.substring(0,120) + '...';
    }
    return title;
  }
  cardDate(String date) {
    int year = int.parse(date.substring(0,4));
    int month = int.parse(date.substring(5,7));
    int day = int.parse(date.substring(8,10));
    return formatDate(DateTime(year, month, day), [d, ' ', M,', ', yyyy]);
  }

  @override
  Widget build(BuildContext context) {

    double contentHeight = MediaQuery.of(context).size.height - 338;

    return Scaffold(
      body: Container(
        decoration: BoxDecoration(
          color: Color(0xFFf5f5f5),
        ),
        constraints: BoxConstraints.expand(),
        child: SafeArea(
          child: Column(
            children: <Widget>[
              Container(
                height: 260.0,
                decoration: BoxDecoration(
                  image: DecorationImage(
                    image: NetworkImage(
                      news['jetpack_featured_media_url'],
                    ),
                    fit: BoxFit.cover,
                    colorFilter: ColorFilter.mode(
                        Colors.black.withOpacity(0.7),
                        BlendMode.darken
                    ),
                  ),
                  color: Color(0xFF1F1F98),
                  gradient: LinearGradient(
                      begin: Alignment.topCenter,
                      colors: [Colors.black, Colors.black],
                      stops: [0.0, 0.5]
                  ),
                ),
                child: Column(
                  children: <Widget>[
                    Row(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      mainAxisAlignment: MainAxisAlignment.spaceAround,
                      children: <Widget>[
                        Container(
                          width: MediaQuery.of(context).size.width * 0.85,
                          child: Column(
                            crossAxisAlignment: CrossAxisAlignment.start,
                            mainAxisAlignment: MainAxisAlignment.spaceBetween,
                            children: <Widget>[
                              Padding(
                                  padding: const EdgeInsets.only(top: 20, right:20, bottom: 10, left: 20),
                                  child: Text(
                                      'THE HIGHWIRE',
                                      style: kSingleOverlayAuthorTextStyle
                                  )
                              ), /* add child content here */
                              Padding(
                                padding: const EdgeInsets.only(top: 10, right:20, bottom: 10, left: 20),
                                child: Text(
                                    cardTitle(news['title']['rendered']),
                                    style: kSingleOverlayTitleTextStyle
                                )
                              ), /* add child content here */
                              Padding(
                                padding: const EdgeInsets.only(top: 10, right:20, bottom: 20, left: 20),
                                child: Text(
                                    cardDate(news['date']),
                                    style: kSingleOverlayDateTextStyle
                                )
                              ),
                            ],
                          )
                        ),
                        Container(
                          width: MediaQuery.of(context).size.width * 0.15,
                          child: Align(

                            alignment: Alignment.topRight,
                            child: Padding(
                              padding: EdgeInsets.all(10.0),
                              child: FloatingActionButton(
                                backgroundColor: Colors.white,
                                elevation: 0,
                                onPressed: () {
                                  Navigator.pop(context, MaterialPageRoute(builder: (context) {
                                    return MainScreen();
                                  }),);
                                },
                                child: Icon(
                                    Icons.close,
                                    size: 25.0,
                                    color: Colors.deepPurpleAccent
                                ),
                              ),
                            ),
                          ),
                        )
                      ],
                    ),
                  ],
                ),
              ),
              Container(
                height: contentHeight,
                child: SingleChildScrollView(
                  child: Html(
                    data: news['content']['rendered'],
                    padding: EdgeInsets.all(30.0),
                    onLinkTap: (url) async {
                      if (await canLaunch(url)) {
                        await launch(url);
                      } else {
                        throw 'Could not launch $url';
                      }
                    },
                  ),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

【问题讨论】:

    标签: flutter flutter-dependencies


    【解决方案1】:

    尝试在小部件顶部导入它

    import 'package:flutter_html/flutter_html.dart';
    import 'package:html/dom.dart' as dom;  // that is
    
    import 'package:url_launcher/url_launcher.dart';
    

    更多详情flutter-html

    【讨论】:

      【解决方案2】:

      据作者称,its a bug (see the end of the README)

      此包存在一个已知问题,即文本无法正确换行。

      我相信您需要在Html() 小部件中设置useRichText: true。可能就在data:"" 属性之后

      【讨论】:

      • 感谢您的回复。是的,这是一个错误,但我需要它附带的功能。我已经按照您的建议在数据之后直接添加了useRichText: true,但是,我收到一个错误,它没有定义。我想知道是否有整个应用程序的默认字体大小,我可以更改它会给我更大的字体大小,而无需像现在这样玩弄它。
      • 你导入包了吗?也许你应该用完整的源更新这个问题,以便我们获得这个文件的更多上下文
      • 你是对的。我已经用我使用这个包的代码更新了这个问题。谢谢!
      • 你有没有想过这个问题?
      • 不,我还没弄明白。我找到了一些代码来将默认主题字体大小设置为一定大小,但它对 HTML 代码没有任何影响。
      猜你喜欢
      • 2021-02-14
      • 2022-01-01
      • 2021-09-13
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2022-12-05
      • 2020-10-08
      • 2018-11-06
      相关资源
      最近更新 更多