Flutter toString() 在调试和发布模式下似乎有所不同

问题描述 投票:0回答:1

这是从 Flutter 3.10.5 迁移到 3.24.5 后发生的。

我在一个类上有一个方法,它使用一个字符串,其中包含要使用的

FontWeight
的信息。基本上是这样的:

final fontWightText = `w400`;
final fontWeight = FontWeight.values.firstWhere(
        (element) => element
            .toString()
            .endsWith(fontWeightText),
      ),

问题是,在发布模式下运行应用程序时,会引发

Bad state: No element
错误。如果我在调试中运行,它工作得很好。 我注意到,如果我在调试时打印
FontWeight.values.first
,我会得到
FontWeight.w100
,而在发布时我会得到
Instance of 'FontWeight'

我正在尝试为此找到解决方法,但我也想知道它是否可能发生在我的应用程序的其他地方,因为它只有在我运行这个新版本的 Flutter 时才会发生。

flutter debugging release tostring
1个回答
0
投票

您好,欢迎来到 StackOverflow! 正如评论中指出的,

toString
FontWeight
实现仅返回常量值,因此问题可能出在您的配置中的某个地方。也许您需要更新 flutter、清除缓存或类似的操作:我首先添加一些
print
行,这样您就可以尝试调试发布模式下发生的情况。

我写下了一个可以在 DartPad 中运行的 MRE,这样你就可以看到最新版本的 flutter 正在按预期运行:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    final fontWeightText = 'w400';
    final fontWeight = FontWeight.values.firstWhere(
      (element) {
        print(element.hashCode() +' vs '+fontWeightText);
        return element.toString().endsWith(fontWeightText);
      },
    );
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: Column(
            children: [
              Text('Hello, World!'),
              Text(
                'Hello, World!',
                style: TextStyle(fontWeight: fontWeight),
              )
            ],
          ),
        ),
      ),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.