Две минуты, чтобы быстро освоить структуру проекта Flutter, ресурсы, зависимости и локализацию.

Android
Две минуты, чтобы быстро освоить структуру проекта Flutter, ресурсы, зависимости и локализацию.

Запущен курс «Flutter от новичка до продвинутого — приложение Actual Combat Ctrip», предназначенный для всех, открывающий новую позицию для разработки Flutter и охватывающий все основные технологии Flutter за один раз. Нажмите, чтобы получить! ! !

В этой статье мы познакомим васFlutter的项目文件结构是怎样子的?,在哪里归档图片资源以及如何处理不同分辨率?,如何归档strings资源,以及如何处理不同语言?也就是我们通常说的国际化,так же как如何添加Flutter项目所需的依赖?

Сначала давайте учитьсяFlutter的项目文件结构是怎样子的?

Какова файловая структура проекта?

Общий проект пухового состава файловой структуры похож на это:

┬
└ projectname
  ┬
  ├ android      - Android部分的工程文件
  ├ build        - 项目的构建输出目录
  ├ ios          - iOS部分的工程文件
  ├ lib          - 项目中的Dart源文件
    ┬
    └ src        - 包含其他源文件
    └ main.dart  - 自动生成的项目入口文件,类似RN的index.js文件
  ├ test         - 测试相关文件
  └ pubspec.yaml - 项目依赖配置文件类似于RN的 package.json 

Конечно, вы можете внести коррективы по мере необходимости.

Где архивировать изображения и как работать с разными разрешениями?

  • Хотя Android по-разному относится к ресурсам и активам, все они обрабатываются во Flutter как активы, и все они существуют на Android.res / drawable- *Активы в папке помещаются в папку активов Flutter.

assets

my-assets/data.json

Запомнитьpubspec.yamlassets:

assets:
 - my-assets/data.json

Тогда в коде мы можем пройтиAssetBundleчтобы получить к нему доступ:

import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;

Future<String> loadAsset() async {
  return await rootBundle.loadString('my-assets/data.json');
}

Полную часть приведенного выше фрагмента кода можно найти по адресуИсходный код курсаНайти в.

Для изображений Flutter, как и iOS, следует простому формату, основанному на плотности пикселей. Ресурсы изображения могут быть 1,0x 2,0x 3,0x или любым другим кратным. этоdevicePixelRatioПредставляет отношение физических пикселей к одному логическому пикселю.

Соответствие между изображениями разной плотности пикселей в Android и соотношением пикселей во Flutter

ldpi	0.75x
mdpi	1.0x
hdpi	1.5x
xhdpi	2.0x
xxhdpi	3.0x
xxxhdpi	4.0x

Полную часть приведенного выше фрагмента кода можно найти по адресуИсходный код курсаНайти в.

Ресурсы можно поместить в любую папку свойств — во Flutter нет предопределенной файловой структуры. мы должныpubspec.yamlОбъявите расположение ресурсов в файле, и Flutter их распознает.

Например, чтобы указать имя, называемоеmy_icon.pngизображения в проект Flutter, вы можете поместить его в папку с изображениями. Поместите изображения (1.0x) в папку с изображениями, а изображения других разрешений поместите в соответствующие подпапки с соответствующим коэффициентом масштабирования, например:

images/my_icon.png       // Base: 1.0x image
images/2.0x/my_icon.png  // 2.0x image
images/3.0x/my_icon.png  // 3.0x image

Далее вы можетеpubspec.yamlРесурс изображения объявляется в файле следующим образом:

assets:
 - images/my_icon.png

Теперь мы можем помочьAssetImage

return AssetImage("images/a_dot_burr.jpeg");

Полную часть приведенного выше фрагмента кода можно найти по адресуИсходный код курсаНайти в.

ImageВиджет использует напрямую:

@override
Widget build(BuildContext context) {
  return Image.asset("images/my_image.png");
}

Для получения дополнительной информации см.Добавьте активы и изображения во Flutter.

Как архивировать строки ресурсов, а как иметь дело с разными языками?

В отличие от iOS, у которой естьLocalizable.stringsфайл, Flutter в настоящее время не имеет специальной системы строковых ресурсов. В настоящее время рекомендуется хранить строковый ресурс как статическое поле в классе. Например:

class Strings {
  static String welcomeMessage = "Welcome To Flutter";
}

Затем получите доступ к нему следующим образом:

Text(Strings.welcomeMessage)

Полную часть приведенного выше фрагмента кода можно найти по адресуИсходный код курсаНайти в.

По умолчанию Flutter поддерживает только строки американского английского. Если вы хотите поддерживать другие языки, пожалуйста, импортируйтеflutter_localizationsМешок.你可能也要引入intlПакет I10n для поддержки других механизмов, таких как формат даты/времени.

dependencies:
  # ...
  flutter_localizations:
    sdk: flutter
  intl: "^0.15.6"

Полную часть приведенного выше фрагмента кода можно найти по адресуИсходный код курсаНайти в.

нужно использоватьflutter_localizationslocalizationsDelegatesа такжеsupportedLocales.

import 'package:flutter_localizations/flutter_localizations.dart';

MaterialApp(
 localizationsDelegates: [
   // Add app-specific localization delegate[s] here
   GlobalMaterialLocalizations.delegate,
   GlobalWidgetsLocalizations.delegate,
 ],
 supportedLocales: [
    const Locale('en', 'US'), // English
    const Locale('he', 'IL'), // Hebrew
    // ... other locales the app supports
  ],
  // ...
)

Полную часть приведенного выше фрагмента кода можно найти по адресуИсходный код курсаНайти в.

Эти агенты включают локализованную фактическую стоимость иsupportedLocalesОпределяет, какие регионы поддерживает приложение. В приведенном выше примере используетсяMaterialApp, поэтому он имеет обаGlobalWidgetsLocalizationsДля основных виджетов естьMaterialWidgetsLocalizationsиспользуется дляMaterialЛокализация виджетов. если вы используетеWidgetsApp, последний включать не нужно. Обратите внимание, что хотя эти два прокси-сервера включают значения «по умолчанию», если вы хотите, чтобы ваше приложение было локализовано, вам все равно необходимо предоставить один или несколько прокси-серверов в качестве локализованной копии вашего приложения.

При инициализации,WidgetsAppилиMaterialAppсоздаст для вас прокси, используя указанный вами проксиLocalizationsвиджет.LocalizationsВиджет может получить доступ к местоположению устройства в любое время из текущего контекста или использоватьWindow.locale.

Для доступа к файлам локализации используйтеLocalizations.of()метод для доступа к определенному классу локализации, который предоставляет прокси. Для перевода используйтеintl_translationУдалите пакет на переведенную копиюarbв файле. Внесите их в свое приложение и используйте с межд.

Дополнительные сведения об интернационализации и локализации во Flutter см.internationalization guide, в котором есть пример кода, не использующий пакет intl.

Обратите внимание, что до Flutter 1.0 beta 2 ресурсы, определенные во Flutter, не могут быть доступны на собственной стороне. Изначально определенные ресурсы также недоступны во Flutter, поскольку они находятся в отдельных папках.

Как добавить зависимости, необходимые для проекта Flutter?

  • В Android вы можете добавлять зависимости в файлы Gradle;
  • В iOS зависимые обычно добавляются в подфайл;
  • В Rn, обычно управляемое Package.json проектные зависимости;

Flutter использует систему сборки Dart и менеджер пакетов Pub для обработки зависимостей. Эти инструменты делегируют сборку собственных приложений-оболочек Android и iOS соответствующей системе сборки.

dependencies:
  flutter:
    sdk: flutter
  google_sign_in: ^3.0.3

Во Flutter, хотя в папке Android в проекте Flutter есть файлы Gradle,Но эти файлы используются только при добавлении зависимостей, зависящих от платформы.. В противном случае следует использоватьpubspec.yamlдля объявления внешних зависимостей для Flutter.

IOS также такой же, если в папке iOS есть подфайл в папке iOS, используйте его только при добавлении платформ iOS. В противном случае следует использоватьpubspec.yamlдля объявления внешних зависимостей для Flutter.

Рекомендуемый веб-сайт для поиска плагинов Flutter:Pub site.

Ссылаться на

Продолжение следует

  • Начало работы с расчетами
  • Темы Flutter и обработка текстов
  • Что такое декларативный пользовательский интерфейс во Flutter
  • Flutter макеты и списки
  • Обнаружение жестов флаттера и обработка сенсорных событий
  • Управление состоянием флаттера d
  • Потоки Flutter и асинхронный пользовательский интерфейс
  • Ввод формы FLUTTER и форматированный текст
  • Flutter вызывает аппаратное обеспечение, сторонние сервисы, взаимодействие с платформой и уведомления.
  • Структура трепетания проекта, ресурсы, зависимость и локализация