Как обмениваться контентом в Flutter
Development | Комментировать запись
Плагин share в Flutter позволяет нам предоставлять пользователям возможность обмениваться контентом с помощью диалоговых окон платформы.
В этой статье мы создадим простое тестовое приложение Flutter и настроим возможность делиться записями с другими пользователями.
Требования
Для выполнения этого урока нужно:
- Скачать и установить Flutter.
- Загрузить и установить Android Studio или Visual Studio Code.
- Также рекомендуется установить плагины для вашего редактора кода:
Это руководство было протестировано на версиях Flutter v2.0.6, Android SDK v31.0.2 и Android Studio v4.1.
1: Создание проекта Flutter
Итак, у вас есть настроенная среда Flutter, теперь вы можете запустить следующую команду, чтобы создать новое приложение:
flutter create flutter_share_example
Перейдите в каталог нашего нового проекта:
cd flutter create flutter_share_example<^>
Команда flutter create создаст простое демонстрационное приложение, которое будет отображать количество нажатий кнопки.
2: Добавление плагина share
Откройте файл pubspec.yaml в редакторе кода и добавьте в него плагин:
dependencies: flutter: sdk: flutter share: 2.0.1
Затем сохраните изменения в файле.
3: Скаффолд проекта
Затем можно обновить наш файл main.dart, чтобы он содержал домашнюю страницу из файла home_page.dart:
import 'package:flutter/material.dart'; import 'home_page.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(), ); } }
Создайте файл home_page.dart и откройте его в редакторе кода, а затем добавьте в файл следующие строки:
import 'package:flutter/material.dart'; class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('My favourite Alligators'), ), body: Container(), ); } }
MyHomePage будет ссылаться на StatefulWidget, который содержит AppBar и пустой Container.
Сохраните все изменения в своих файлах.
4: Создание класса
Затем нам понадобится класс (условно назовем его Alligator), содержащий name и description. Мы будем использовать его для создания списка (в этом руководстве для примера мы создадим список с данными об аллигаторах).
Создайте новый файл alligator_model.dart и откройте его в редакторе кода. Добавьте следующие строки:
import 'package:flutter/foundation.dart'; class Alligator { String name; String description; Alligator({@required this.name, @required this.description}); }
Затем внутри MyHomePage можно создать List <Alligator> и отобразить его на экране:
import 'package:flutter/material.dart'; import 'alligator_model.dart'; class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { List<Alligator> alligators = [ Alligator( name: 'Crunchy', description: 'A fierce Alligator with many teeth.', ), Alligator( name: 'Munchy', description: 'Has a big belly, eats a lot.', ), Alligator( name: 'Grunchy', description: 'Scaly Alligator that looks menacing.', ), ]; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('My favourite Alligators'), ), body: Column( children: alligators .map((Alligator alligator) => Card( child: Column( children: <Widget>[ ListTile( title: Text(alligator.name), subtitle: Text(alligator.description), ), ], ), )) .toList() ), ); } }
5: Настройка функции общего доступа
Теперь нужно сделать так, чтобы всякий раз, когда пользователь нажимает на ListTile, мы подключались к функции onTap, вызывая функцию share. Для этого нужно изменить файл lib/home_page.dart следующим образом:
import 'package:flutter/material.dart'; import 'package:share/share.dart'; import 'alligator_model.dart'; class MyHomePage extends StatefulWidget { MyHomePage({Key key}) : super(key: key); @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { List<Alligator> alligators = [ Alligator( name: 'Crunchy', description: 'A fierce Alligator with many teeth.', ), Alligator( name: 'Munchy', description: 'Has a big belly, eats a lot.', ), Alligator( name: 'Grunchy', description: 'Scaly Alligator that looks menacing.', ), ]; share(BuildContext context, Alligator alligator) { final RenderBox box = context.findRenderObject(); Share.share("${alligator.name} - ${alligator.description}", subject: alligator.description, sharePositionOrigin: box.localToGlobal(Offset.zero) & box.size); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('My favourite Alligators'), ), body: Column( children: alligators .map((Alligator alligator) => Card( child: Column( children: <Widget>[ ListTile( title: Text(alligator.name), subtitle: Text(alligator.description), onTap: () => share(context, alligator), ), ], ), )) .toList() ), ); } }
Этот код импортирует функцию share, определит метод share и вызовет его с помощью onTap.
Примечание: Чтобы убедиться, что мы передаем sharePositionOrigin для устройств iPad, нужно использовать context.findRenderObject().
Скомпилируйте свой код и запустите его в эмуляторе.
Основная часть приложения в этом примере – функция Share, с помощью которой мы можем предоставить текст (text) и по желанию тему (subject). Эти данные передаются в наше приложение для обмена сообщениями.
Заключение
В этой статье вы создали простое приложение Flutter, которое содержит список данных, а затем настроили возможность делиться этими данными с другими пользователями.
Читайте также: Как ускорить разработку на Flutter
Tags: Flutter