В этой статье мы познакомим вас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.yaml
assets
:
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_localizations
localizationsDelegates
а также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 вызывает аппаратное обеспечение, сторонние сервисы, взаимодействие с платформой и уведомления.
- Структура трепетания проекта, ресурсы, зависимость и локализация