如何在Flutter中限制特定页面中的粗体文本和文本大小

How to restrict bold text and text size in specific page in Flutter

我遵循此堆栈溢出 来限制整个应用程序的粗体文本 globally。现在,当我尝试实现此功能以限制 bold 文本以及限制特定屏幕上的大文本 size 时,只有一个限制有效。意味着如果我先限制 bold 文本然后限制大文本 size 然后限制 bold 文本不起作用,如果我先限制大文本 size 并限制 bold text second then restrict bold text works 如何解决这个问题?以下是到目前为止我尝试过的示例飞镖代码。

main.dart

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

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

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text(''),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          const Center(child: Text('Text')),
          const SizedBox(
            height: 50.0,
          ),
          Center(
            child: TextButton(
                onPressed: () {
                  Navigator.of(context).push(MaterialPageRoute(
                      builder: (context) => const NextPage()));
                },
                child: const Text('Move')),
          )
        ],
      ),
    );
  }
}

class NextPage extends StatefulWidget {
  const NextPage({Key? key}) : super(key: key);

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

class _NextPageState extends State<NextPage> {
  @override
  Widget build(BuildContext context) {
    return MediaQuery(
      data: MediaQueryData.fromWindow(WidgetsBinding.instance!.window)
          .copyWith(boldText: false), // Restrict bold text
      child: MediaQuery(
        data: MediaQuery.of(context).copyWith(textScaleFactor: 1.5), // Restrict bigger text size
        child: Scaffold(
          appBar: AppBar(
            title: const Text(''),
          ),
          body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: const [
              Center(child: Text('Text')),
            ],
          ),
        ),
      ),
    );
  }
}

您有两种选择来实现您的目标。

1 - 只使用一个 MediaQuery 并将所有设置放在其中:.copyWith(boldText: false, textScaleFactor: 1.5)

2 - 将你内心的 MediaQuery 包裹在 Builder.