Flutter에서 중국어 글꼴로 바뀔 때 설정

16069 단어 Fluttertech
※ 2021년 1월 버전
Flutter에 중국어 글꼴을 표시하는 문제가 발생했을 때 일본어 글꼴로 설정하려면 MaterialApp의 다음 속성을 설정하십시오.
  • locale
  • localizationsDelegates
  • supportedLocales
  • 우선pubspec.yaml fluterlocalization을 추가합니다.
    dependencies:
      flutter:
        sdk: flutter
      flutter_localizations: # 追加
        sdk: flutter         # 追加
    
    pub get 통과
    import 'package:flutter_localizations/flutter_localizations.dart';
    
    MaterialApps로 설정됩니다.
    const locale = Locale("ja", "JP");
    return MaterialApp(
      theme: yourTheme,
      locale: locale,
      localizationsDelegates: const [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: const [
        locale,
      ],
      home: const _YourHomePAge(),
    );
    
    이하 2019년에 쓴 TypographyTextStylefontFamilylocale의 설정은 하지 않아도 일본어로 바뀐다.
    ※ 이후 기술은 2019년 당시 것으로 동작하지 않을 수 있습니다
    Flutter에 중국어 글씨체를 표시하는 문제TextStyle가 발생하면 설정fontFamilylocale로 피할 수 있다.
    Text(
      style: TextStyle(
        fontFamily: "Hiragino Sans",
        locale: Locale("ja", "JP"),
      ),
    );
    
    ※ 최신 Flutter가 개선되었기 때문에 초기 설정에서는 문제가 없을 수 있습니다.문제가 생기면 아래 코드를 참고하세요.
    모든TextStyle로 설정하면 회전이 번거롭기 때문에 MaterialApptheme로 설정하세요.
    final themeData = ThemeData(
      typography: kTypography, // fontFamily と locale が設定してあるものを指定する
      ...
    );
    
    return MaterialApp(
      theme: themeData,
      locale: kLocale,
      supportedLocales: [kLocale],
      home: child,
      ...
    );
    
    상기kTypography는 다음과 같은 느낌으로 초기화했다.
    import 'package:flutter/foundation.dart' show defaultTargetPlatform;
    import 'package:flutter/material.dart';
    
    // 日本オンリーの場合は固定で
    const Locale kLocale = const Locale("ja", "JP");
    
    // AndroidとiOSでフォントが違う
    const String kFontFamilyAndroid = null;
    const String kFontFamilyCupertino = "Hiragino Sans";
    
    final bool _android = defaultTargetPlatform == TargetPlatform.android;
    
    final String _kFontFamily = _android ? kFontFamilyAndroid : kFontFamilyCupertino;
    
    final TextTheme _whiteTextTheme = _android ? Typography.whiteMountainView : Typography.whiteCupertino;
    final TextTheme _blackTextTheme = _android ? Typography.blackMountainView : Typography.blackCupertino;
    
    // Flutter標準のTextThemeをベースにして
    // fontFamilyとlocaleを設定したTextStyleとTextThemeで作る
    final Typography kTypography = Typography(
      platform: defaultTargetPlatform,
      white: _textTheme(_whiteTextTheme),
      black: _textTheme(_blackTextTheme),
      englishLike: _textTheme(Typography.englishLike2014),
      dense: _textTheme(Typography.dense2014),
      tall: _textTheme(Typography.tall2014),
    );
    
    TextStyle _textStyle(TextStyle base) {
      return base.copyWith(
        fontFamily: _kFontFamily,
        locale: kLocale,
        textBaseline: TextBaseline.ideographic,
      );
    }
    
    TextTheme _textTheme(TextTheme base) {
      return base.copyWith(
        display4: _textStyle(base.display4),
        display3: _textStyle(base.display3),
        display2: _textStyle(base.display2),
        display1: _textStyle(base.display1),
        headline: _textStyle(base.headline),
        title: _textStyle(base.title),
        subhead: _textStyle(base.subhead),
        body2: _textStyle(base.body2),
        body1: _textStyle(base.body1),
        caption: _textStyle(base.caption),
        button: _textStyle(base.button),
        overline: _textStyle(base.overline),
      );
    }
    
    
    이 문장은 Qiita의 문장을 도출했다

    좋은 웹페이지 즐겨찾기