当前位置: 首页 > 知识库问答 >
问题:

放大和缩小flutter中的字体问题

韩宏朗
2023-03-14

E/flutter(11441):#2_QuranShowState._ShowTaFseer..(封装:Alqranalkareem/Module/Quran/Show.Dart:881:32)

E/Flutter(11441):#3_SliderState._HandleChanged(包:Flutter/SRC/Material/Slider.Dart:453:14)

E/flutter(11441):#4_renderslider._startinteraction(包:flutter/src/material/slider.dart:982:7)

E/flutter(11441):#7GestureRecognizer.InvokeCallback(包:flutter/src/gestures/recognizer.dart:182:24)

E/flutter(11441):#8tapgesturerecognizer.handletapdown(包:flutter/src/gestures/tap.dart:463:11)

E/flutter(11441):#9 baseTapGestureRecognizer._checkdown(包:flutter/src/gestures/tap.dart:256:5)

E/flutter(11441):#10BaseTapGestureRecognizer.DidexceedDeadline(包:flutter/src/gestures/tap.dart:227:5)

E/flutter(11441):#11
PrimaryPointerGestureRecognizer.DidexceedDeadlineWithEvent(包:flutter/src/gestures/recognizer.dart:496:5)

E/flutter(11441):#12
PrimaryPointerGestureRecognizer.AddAllowedPointer。(包:Flutter/SRC/Gestures/Recognizer.Dart:449:40)

E/flutter(11441):#13_rootrun(dart:async/zone.dart:1122:38)

E/flutter(11441):#14_CustomZone.Run(Dart:Async/Zone.Dart:1023:19)

E/flutter(11441):#15_CustomZone.RunGuarded(Dart:Async/Zone.Dart:925:7)

E/flutter(11441):#18_CustomZone.Run(Dart:Async/Zone.Dart:1023:19)

E/flutter(11441):#19_CustomZone.bindCallback。(Dart:Async/Zone.Dart:949:23)

E/flutter(11441):#20 timer._createTimer。(DART:Async-patch/timer_patch.DART:23:15)

设置帮助器

import 'dart:convert';
import 'dart:ui';
import 'package:quiver/strings.dart';
import 'package:shared_preferences/shared_preferences.dart';


class SettingsHelpers {
  static SettingsHelpers _instance;

  static SettingsHelpers get instance {
    if (_instance == null) {
      _instance = SettingsHelpers();
    }
    return _instance;
  }

  SharedPreferences prefs;

  Future fontSizeArabic(double fontSize) async {
    await prefs.setString('fontSizeArabic', fontSize.toString());
  }

  static const double minFontSizeArabic = 22;

  double get getFontSizeArabic {
    String fontSizeString = prefs.getString('fontSizeArabic');
    return double.tryParse(fontSizeString ?? minFontSizeArabic.toString());
  }

  Future setLocale(Locale locale) async {
    var map = {
      'languageCode': locale.languageCode,
    };
    var json = jsonEncode(map);
    await prefs.setString('locale', json);
  }

  Locale getLocale() {
    var json = prefs.getString('locale');
    if (isBlank(json)) {
      return Locale('en');
    }
    var mapJson = jsonDecode(json);
    var locale = Locale(mapJson["languageCode"]);
    return locale;
  }

  Future init() async {
    prefs = await SharedPreferences.getInstance();
  }
}

ShowTaFseer(_S)

Widget _showTafseer(int pageNum) {
        TafseerRepository tafseerRepository = new TafseerRepository();
        return FutureBuilder<List<Ayat>>(
          future: tafseerRepository.getPageTafseer(pageNum),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              List<Ayat> ayat = snapshot.data;
              return Padding(
                padding: EdgeInsets.symmetric(horizontal: 16.0),
                child: Column(
                  children: <Widget>[
                    Container(
                      color: Theme.of(context).primaryColorLight,
                      child: Row(
                        children: <Widget>[
                          Slider(
                            min: SettingsHelpers.minFontSizeArabic,
                            max: maxFontSizeArabic,
                            value: fontSizeArabic,
                            activeColor: Theme.of(context).hoverColor,
                            inactiveColor: Theme.of(context).primaryColorDark,
                            onChanged: (double value) async {
                              await SettingsHelpers.instance
                                  .fontSizeArabic(value);
                              setState(
                                    () {
                                  fontSizeArabic = value;
                                },
                              );
                              _myEventBus.eventBus.fire(
                                FontSizeEvent()
                                  ..arabicFontSize = value
                              );
                            },
                          ),
                          Container(
                            decoration: BoxDecoration(
                                color: Theme.of(context).hoverColor,
                              borderRadius: BorderRadius.only(
                                topLeft: Radius.circular(5.0),
                                topRight: Radius.circular(5.0),
                                bottomLeft: Radius.circular(5.0),
                                bottomRight: Radius.circular(5.0),
                              )
                            ),
                            alignment: Alignment.center,
                            child: Padding(
                              padding: const EdgeInsets.all(4.0),
                              child: Text('${fontSizeArabic.toInt()}',
                                  style: TextStyle(
                                      fontSize: 20,
                                      color: Theme.of(context).primaryColorLight)),
                            ),
                          ),
                        ],
                      ),
                    ),
                    Container(
    //              width: 300.0,
                      height: 500.0,
                      child: ListView.builder(
                          itemCount: ayat.length,
                          itemBuilder: (context, position) {
                            Ayat aya = ayat[position];
                            List<String> tafseer = aya.tafsser.split("))");
                            return Column(
                              crossAxisAlignment: CrossAxisAlignment.stretch,
                              children: <Widget>[
                                Container(
                                  decoration: BoxDecoration(
                                      color: Theme.of(context).backgroundColor,
                                      borderRadius: BorderRadius.only(
                                      topRight: Radius.circular(8.0),
                                      topLeft: Radius.circular(8.0)
                                    )
                                  ),
                                  child: Padding(
                                    padding: const EdgeInsets.all(4.0),
                                    child: Text(
                                      "﴿${tafseer.first}﴾",
                                      textAlign: TextAlign.center,
                                      style: TextStyle(
                                        fontFamily: "Uthmanic",
                                        fontWeight: FontWeight.w500,
                                        fontSize: fontSizeArabic
                                      ),
                                    ),
                                  ),
                                ),
                                Padding(
                                  padding: const EdgeInsets.only(top: 16.0, bottom: 8.0),
                                  child: Text(
                                    "${tafseer.last.trim()}",
                                    textAlign: TextAlign.justify,
                                    style: TextStyle(
                                      color: Theme.of(context).hoverColor,
                                      fontFamily: 'naskh',
                                      fontWeight: FontWeight.w100,
                                      fontSize: fontSizeArabic
                                    ),
                                  ),
                                ),
                                Divider()
                              ],
                            );
                          }),
                    ),
                  ],
                ),
              );
            } else {
              return Center(
                child: CircularProgressIndicator(),
              );
            }
          },
        );
      }

共有1个答案

公孙阳羽
2023-03-14

我认为问题是prefs没有正确初始化。请尝试使您的初始化变得更简单,如下所示

我使用了工厂设计模式。请参阅本文了解更多信息。

注意,我使用了一个简单的浮动按钮来触发动作,而不是滑块

class SettingsHelpers {

  SharedPreferences prefs;

  static final SettingsHelpers _instance = SettingsHelpers._internal();
  SettingsHelpers._internal(){
    _init();
  }

  factory SettingsHelpers() => _instance;

  void _init() async {
    prefs = await SharedPreferences.getInstance();
  }

  void fontSizeArabic(double fontSize) async {
   prefs.setString('fontSizeArabic', fontSize.toString());
  }

  static const double minFontSizeArabic = 22;

  double get getFontSizeArabic {
    String fontSizeString = prefs.getString('fontSizeArabic');
    return double.tryParse(fontSizeString ?? minFontSizeArabic.toString());
  }

  Future setLocale(Locale locale) async {
    var map = {
      'languageCode': locale.languageCode,
    };
    var json = jsonEncode(map);
    await prefs.setString('locale', json);
  }

  Locale getLocale() {
    var json = prefs.getString('locale');
    if (isBlank(json)) {
      return Locale('en');
    }
    var mapJson = jsonDecode(json);
    var locale = Locale(mapJson["languageCode"]);
    return locale;
  }

}

class SampleTest extends StatefulWidget {
  @override
  _SampleTestState createState() => _SampleTestState();
}

class _SampleTestState extends State<SampleTest> {
  double fontSizeArabic;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      floatingActionButton:
          FloatingActionButton(child: Icon(Icons.add), onPressed: _onPressed),
    );
  }

  void _onPressed() async {
    double value = 18.0;
    SettingsHelpers().fontSizeArabic(value);
  }
}
 类似资料:
  • 我需要检测字体缩放后文本组件的字体大小。假设我有一个字体大小为18px的文本组件 用户通过操作系统辅助功能设置设置了大字体。现在我的文本已经用更大的字体显示了(超过18px)。我知道我可以使用< code > allowFontScaling = { false } ,但我不想失去文本的可访问性。我看到React native有一个API来获取字体比例< code > pixel ratio .

  • 问题内容: 我有一个面板,其中正在移动一些2D对象。我已经根据需要重写了paintComponent()。现在,我希望能够放大和缩小该区域。放大时,将出现滚动条,通过滚动条可以滚动查看整个字段。在放大和缩小时,二维对象的大小应相应增加或减小。哪个Swing组件或什至是组件组合将有助于实现这一目标? 问题答案: 最简单的方法是修改面板并引入一个双倍来指示您的缩放级别。这双会指示你的规模,其中1是正常

  • 问题内容: 我不明白为什么我缩小屏幕时字体没有减小。 我将所有CSS都设置为百分比,以便所有内容都能响应。 相反,当我缩小屏幕时,字体不会改变大小,从而弄乱了设计。 我正在24英寸显示器上构建我的投资组合站点,然后在13英寸屏幕上对其进行检查以确保它可以缩放。 问题答案: 我认为您要寻找的是 视口百分比单位 。 尝试这个: 通过此调整,当您调整浏览器窗口的大小时,字体将按比例缩放。 从规格: 5.

  • 因此,我正在努力为我的HTML文档设计一个响应更快的设计,我想要排序的第一件事是根据容器的高度和宽度缩放字体大小。现在我有以下内容: 我研究了一下,在css中找到了“VW”这个单位,它允许字体根据容器进行缩放,但我注意到它只在我调整浏览器宽度时才起作用,这会得到如下结果: 如图所示,如果我调整浏览器的宽度,文本确实会缩放。但是,我意识到当我调整浏览器的高度时,它根本不会缩放。 我如何确保文本是基于

  • 问题内容: 我建立了一个网站,问题是Chrome的显示尺寸大于Firefox。我尝试了几种匹配字体大小的方法,以px为单位指定字体,以%设置正文为100%,然后将元素设置为。这些都不起作用。静止图像显示的铬要大1个像素。 这是我用于字体大小的代码: 在#geral包裹整个站点的地方,而CSS上没有其他font-size语句,可以在我发布的链接中查看源代码。 我想知道是否有一种方法可以解决此问题,或

  • 本文向大家介绍bmp 缩放代码(BMP位图任意放大 和缩小),包括了bmp 缩放代码(BMP位图任意放大 和缩小)的使用技巧和注意事项,需要的朋友参考一下 前几天碰上需要对bmp位图进行缩放的功能, 调用API函数,虽然能实现位图缩放,但是对有放大的效果好,缩小会造成失真,图像上有花点,让人难以接受 ,因为本人以前学易语言,易语言有一段代码,对bmp图像缩放效果非常 好, 昨天抽空,把它翻译成c+