mirror of
https://github.com/foss42/apidash.git
synced 2025-08-06 13:51:20 +08:00
add multi_trigger_autocomplete_plus
This commit is contained in:
47
packages/multi_trigger_autocomplete_plus/example/.gitignore
vendored
Normal file
47
packages/multi_trigger_autocomplete_plus/example/.gitignore
vendored
Normal file
@ -0,0 +1,47 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
migrate_working_dir/
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
*.ipr
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# The .vscode folder contains launch configuration and tasks you configure in
|
||||
# VS Code which you may wish to be included in version control, so this line
|
||||
# is commented out by default.
|
||||
#.vscode/
|
||||
|
||||
# Flutter/Dart/Pub related
|
||||
**/doc/api/
|
||||
**/ios/Flutter/.last_build_id
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
/build/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# Symbolication related
|
||||
app.*.symbols
|
||||
|
||||
# Obfuscation related
|
||||
app.*.map.json
|
||||
|
||||
# Android Studio will place build artifacts here
|
||||
/android/app/debug
|
||||
/android/app/profile
|
||||
/android/app/release
|
16
packages/multi_trigger_autocomplete_plus/example/README.md
Normal file
16
packages/multi_trigger_autocomplete_plus/example/README.md
Normal file
@ -0,0 +1,16 @@
|
||||
# example
|
||||
|
||||
A new Flutter project.
|
||||
|
||||
## Getting Started
|
||||
|
||||
This project is a starting point for a Flutter application.
|
||||
|
||||
A few resources to get you started if this is your first Flutter project:
|
||||
|
||||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
||||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
|
||||
|
||||
For help getting started with Flutter development, view the
|
||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
||||
samples, guidance on mobile development, and a full API reference.
|
@ -0,0 +1,29 @@
|
||||
# This file configures the analyzer, which statically analyzes Dart code to
|
||||
# check for errors, warnings, and lints.
|
||||
#
|
||||
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
|
||||
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
|
||||
# invoked from the command line by running `flutter analyze`.
|
||||
|
||||
# The following line activates a set of recommended lints for Flutter apps,
|
||||
# packages, and plugins designed to encourage good coding practices.
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
linter:
|
||||
# The lint rules applied to this project can be customized in the
|
||||
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
|
||||
# included above or to enable additional rules. A list of all available lints
|
||||
# and their documentation is published at
|
||||
# https://dart-lang.github.io/linter/lints/index.html.
|
||||
#
|
||||
# Instead of disabling a lint rule for the entire project in the
|
||||
# section below, it can also be suppressed for a single line of code
|
||||
# or a specific dart file by using the `// ignore: name_of_lint` and
|
||||
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
|
||||
# producing the lint.
|
||||
rules:
|
||||
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
||||
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
|
||||
|
||||
# Additional information about this file can be found at
|
||||
# https://dart.dev/guides/language/analysis-options
|
133
packages/multi_trigger_autocomplete_plus/example/lib/main.dart
Normal file
133
packages/multi_trigger_autocomplete_plus/example/lib/main.dart
Normal file
@ -0,0 +1,133 @@
|
||||
import 'package:example/src/chat_message_list.dart';
|
||||
import 'package:example/src/chat_message_text_field.dart';
|
||||
import 'package:example/src/data.dart';
|
||||
import 'package:example/src/options/options.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
import 'package:multi_trigger_autocomplete_plus/multi_trigger_autocomplete.dart';
|
||||
|
||||
void main() => runApp(const MyApp());
|
||||
|
||||
class MyApp extends StatelessWidget {
|
||||
const MyApp({Key? key}) : super(key: key);
|
||||
|
||||
// This widget is the root of your application.
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Portal(
|
||||
child: MaterialApp(
|
||||
title: 'Flutter Demo',
|
||||
theme: ThemeData(
|
||||
platform: TargetPlatform.iOS,
|
||||
textTheme: GoogleFonts.robotoMonoTextTheme(
|
||||
Theme.of(context).textTheme,
|
||||
),
|
||||
),
|
||||
home: const MyHomePage(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class MyHomePage extends StatefulWidget {
|
||||
const MyHomePage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<MyHomePage> createState() => _MyHomePageState();
|
||||
}
|
||||
|
||||
class _MyHomePageState extends State<MyHomePage> {
|
||||
final messages = [...sampleGroupConversation];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 60,
|
||||
backgroundColor: const Color(0xFF5B61B9),
|
||||
title: const Text(
|
||||
'Multi Trigger Autocomplete',
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
centerTitle: true,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.only(
|
||||
bottomLeft: Radius.circular(24),
|
||||
bottomRight: Radius.circular(24),
|
||||
),
|
||||
),
|
||||
),
|
||||
body: Column(
|
||||
children: [
|
||||
Expanded(child: ChatMessageList(messages: messages)),
|
||||
MultiTriggerAutocomplete(
|
||||
optionsAlignment: OptionsAlignment.topStart,
|
||||
autocompleteTriggers: [
|
||||
AutocompleteTrigger(
|
||||
trigger: '@',
|
||||
optionsViewBuilder: (context, autocompleteQuery, controller) {
|
||||
return MentionAutocompleteOptions(
|
||||
query: autocompleteQuery.query,
|
||||
onMentionUserTap: (user) {
|
||||
final autocomplete = MultiTriggerAutocomplete.of(context);
|
||||
return autocomplete.acceptAutocompleteOption(user.id);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
AutocompleteTrigger(
|
||||
trigger: '#',
|
||||
optionsViewBuilder: (context, autocompleteQuery, controller) {
|
||||
return HashtagAutocompleteOptions(
|
||||
query: autocompleteQuery.query,
|
||||
onHashtagTap: (hashtag) {
|
||||
final autocomplete = MultiTriggerAutocomplete.of(context);
|
||||
return autocomplete
|
||||
.acceptAutocompleteOption(hashtag.name);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
AutocompleteTrigger(
|
||||
trigger: ':',
|
||||
optionsViewBuilder: (context, autocompleteQuery, controller) {
|
||||
return EmojiAutocompleteOptions(
|
||||
query: autocompleteQuery.query,
|
||||
onEmojiTap: (emoji) {
|
||||
final autocomplete = MultiTriggerAutocomplete.of(context);
|
||||
return autocomplete.acceptAutocompleteOption(
|
||||
emoji.char,
|
||||
// Passing false as we don't want the trigger [:] to
|
||||
// get prefixed to the option in case of emoji.
|
||||
keepTrigger: false,
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
fieldViewBuilder: (context, controller, focusNode) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(8.0),
|
||||
child: ChatMessageTextField(
|
||||
focusNode: focusNode,
|
||||
controller: controller,
|
||||
onSend: (message) {
|
||||
controller.clear();
|
||||
setState(() {
|
||||
messages.add(message);
|
||||
});
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
import 'package:example/src/models.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_parsed_text/flutter_parsed_text.dart';
|
||||
import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
class ChatMessageList extends StatelessWidget {
|
||||
const ChatMessageList({
|
||||
Key? key,
|
||||
required this.messages,
|
||||
}) : super(key: key);
|
||||
|
||||
final List<ChatMessage> messages;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final messages = this.messages.reversed.toList();
|
||||
return ListView.separated(
|
||||
reverse: true,
|
||||
itemCount: messages.length,
|
||||
padding: const EdgeInsets.all(8),
|
||||
separatorBuilder: (context, index) => const SizedBox(height: 8),
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
final message = messages[index];
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(16),
|
||||
decoration: const BoxDecoration(
|
||||
color: Color(0xFFE9EAF4),
|
||||
borderRadius: BorderRadius.only(
|
||||
topRight: Radius.circular(32.0),
|
||||
topLeft: Radius.circular(32.0),
|
||||
bottomLeft: Radius.circular(32.0),
|
||||
),
|
||||
),
|
||||
child: ParsedText(
|
||||
text: message.text,
|
||||
style: GoogleFonts.robotoMono(
|
||||
fontWeight: FontWeight.w500,
|
||||
color: const Color(0xFF79708F),
|
||||
),
|
||||
parse: <MatchText>[
|
||||
MatchText(
|
||||
pattern: r"@[A-Za-z0-9_.-]*",
|
||||
style: const TextStyle(color: Colors.green),
|
||||
),
|
||||
MatchText(
|
||||
pattern: r"\B#+([\w]+)\b",
|
||||
style: const TextStyle(color: Colors.blue),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
CircleAvatar(
|
||||
backgroundImage: NetworkImage(message.sender.avatar),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
import 'package:example/src/models.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'dart:math' show Random;
|
||||
|
||||
import 'package:example/src/data.dart';
|
||||
|
||||
class ChatMessageTextField extends StatelessWidget {
|
||||
const ChatMessageTextField({
|
||||
Key? key,
|
||||
required this.focusNode,
|
||||
required this.controller,
|
||||
required this.onSend,
|
||||
}) : super(key: key);
|
||||
|
||||
final FocusNode focusNode;
|
||||
final TextEditingController controller;
|
||||
final ValueSetter<ChatMessage> onSend;
|
||||
|
||||
final _sender = const [sahil, avni, gaurav];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
padding: const EdgeInsets.fromLTRB(16, 4, 4, 4),
|
||||
decoration: const BoxDecoration(
|
||||
color: Color(0xFFF7F7F8),
|
||||
borderRadius: BorderRadius.all(Radius.circular(40.0)),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: TextField(
|
||||
focusNode: focusNode,
|
||||
controller: controller,
|
||||
decoration: const InputDecoration.collapsed(
|
||||
hintText: "Type your message...",
|
||||
),
|
||||
),
|
||||
),
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
final message = ChatMessage(
|
||||
text: controller.text,
|
||||
createdAt: DateTime.now(),
|
||||
sender: _sender[Random().nextInt(_sender.length)],
|
||||
);
|
||||
onSend(message);
|
||||
},
|
||||
padding: const EdgeInsets.all(4),
|
||||
icon: Container(
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: Color(0xFF5B61B9),
|
||||
),
|
||||
alignment: Alignment.center,
|
||||
child: const Icon(
|
||||
Icons.send_rounded,
|
||||
color: Colors.white,
|
||||
size: 24,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,243 @@
|
||||
import 'package:example/src/models.dart';
|
||||
|
||||
const sahil = User(
|
||||
id: 'xsahil03x',
|
||||
name: 'Sahil Kumar',
|
||||
avatar: 'https://bit.ly/3yEVRrD',
|
||||
);
|
||||
|
||||
const avni = User(
|
||||
id: 'avu.saxena',
|
||||
name: 'Avni Saxena',
|
||||
avatar: 'https://bit.ly/3PbPBii',
|
||||
);
|
||||
|
||||
const trapti = User(
|
||||
id: 'trapti2711',
|
||||
name: 'Trapti Gupta',
|
||||
avatar: 'https://bit.ly/3aDHtba',
|
||||
);
|
||||
|
||||
const gaurav = User(
|
||||
id: 'itsmegb98',
|
||||
name: 'Gaurav Bhadouriya',
|
||||
avatar: 'https://bit.ly/3PmNdES',
|
||||
);
|
||||
|
||||
const amit = User(
|
||||
id: 'amitk_15',
|
||||
name: 'Amit Kumar',
|
||||
avatar: 'https://bit.ly/3P9GPB8',
|
||||
);
|
||||
|
||||
const ayush = User(
|
||||
id: 'ayushpgupta',
|
||||
name: 'Ayush Gupta',
|
||||
avatar: 'https://bit.ly/3Rw61Dv',
|
||||
);
|
||||
|
||||
const shubham = User(
|
||||
id: 'someshubham',
|
||||
name: 'Shubham Jain',
|
||||
avatar: 'https://bit.ly/3Rs3uud',
|
||||
);
|
||||
|
||||
const kUsers = <User>[
|
||||
sahil,
|
||||
avni,
|
||||
gaurav,
|
||||
trapti,
|
||||
amit,
|
||||
ayush,
|
||||
shubham,
|
||||
];
|
||||
|
||||
const kHashtags = <Hashtag>[
|
||||
Hashtag(
|
||||
name: 'dart',
|
||||
weight: 1,
|
||||
description:
|
||||
'Dart is a language for building fast, scalable and maintainable applications.',
|
||||
image: 'https://dwglogo.com/wp-content/uploads/2018/03/Dart_logo.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'flutter',
|
||||
weight: 2,
|
||||
description:
|
||||
'Flutter is a framework for building native Android and iOS applications for Google\'s mobile platforms.',
|
||||
image:
|
||||
'https://storage.googleapis.com/cms-storage-bucket/0dbfcc7a59cd1cf16282.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'firebase',
|
||||
weight: 3,
|
||||
description:
|
||||
'Firebase is a cloud platform for building mobile and web apps.',
|
||||
image:
|
||||
'https://firebase.google.com/static/downloads/brand-guidelines/PNG/logo-logomark.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'google',
|
||||
weight: 4,
|
||||
description:
|
||||
'Google is a company that builds products and services for the world\'s users.',
|
||||
image: 'https://dwglogo.com/wp-content/uploads/2016/06/G-icon-1068x735.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'apple',
|
||||
weight: 5,
|
||||
description:
|
||||
'Apple is a company that builds products and services for the world\'s users.',
|
||||
image:
|
||||
'https://dwglogo.com/wp-content/uploads/2016/02/Apple_logo-1068x601.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'microsoft',
|
||||
weight: 6,
|
||||
description:
|
||||
'Microsoft is a company that builds products and services for the world\'s users.',
|
||||
image:
|
||||
'https://upload.wikimedia.org/wikipedia/commons/thumb/4/44/Microsoft_logo.svg/2048px-Microsoft_logo.svg.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'facebook',
|
||||
weight: 7,
|
||||
description:
|
||||
'Facebook is a company that builds products and services for the world\'s users.',
|
||||
image: 'https://www.facebook.com/images/fb_icon_325x325.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'twitter',
|
||||
weight: 8,
|
||||
description:
|
||||
'Twitter is a company that builds products and services for the world\'s users.',
|
||||
image:
|
||||
'https://dwglogo.com/wp-content/uploads/2019/02/Twitter_logo-1024x705.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'instagram',
|
||||
weight: 9,
|
||||
description:
|
||||
'Instagram is a company that builds products and services for the world\'s users.',
|
||||
image:
|
||||
'https://w7.pngwing.com/pngs/648/943/png-transparent-instagram-logo-logo-instagram-computer-icons-camera-instagram-logo-text-trademark-magenta.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'snapchat',
|
||||
weight: 10,
|
||||
description:
|
||||
'Snapchat is a company that builds products and services for the world\'s users.',
|
||||
image:
|
||||
'https://dwglogo.com/wp-content/uploads/2016/06/dotted_logo_of_snapchat-1068x601.png',
|
||||
),
|
||||
Hashtag(
|
||||
name: 'youtube',
|
||||
weight: 11,
|
||||
description:
|
||||
'YouTube is a company that builds products and services for the world\'s users.',
|
||||
image:
|
||||
'https://dwglogo.com/wp-content/uploads/2020/05/1200px-YouTube_logo-1024x729.png',
|
||||
),
|
||||
];
|
||||
|
||||
const kEmojis = <Emoji>[
|
||||
Emoji(
|
||||
char: '😀',
|
||||
shortName: ':grinning:',
|
||||
unicode: '1f600',
|
||||
),
|
||||
Emoji(
|
||||
char: '😂',
|
||||
shortName: ':joy:',
|
||||
unicode: '1f602',
|
||||
),
|
||||
Emoji(
|
||||
char: '😃',
|
||||
shortName: ':smiley:',
|
||||
unicode: '1f603',
|
||||
),
|
||||
Emoji(
|
||||
char: '😄',
|
||||
shortName: ':smile:',
|
||||
unicode: '1f604',
|
||||
),
|
||||
Emoji(
|
||||
char: '😅',
|
||||
shortName: ':sweat_smile:',
|
||||
unicode: '1f605',
|
||||
),
|
||||
Emoji(
|
||||
char: '😆',
|
||||
shortName: ':laughing:',
|
||||
unicode: '1f606',
|
||||
),
|
||||
Emoji(
|
||||
char: '😇',
|
||||
shortName: ':wink:',
|
||||
unicode: '1f609',
|
||||
),
|
||||
Emoji(
|
||||
char: '😈',
|
||||
shortName: ':smirk:',
|
||||
unicode: '1f60f',
|
||||
),
|
||||
Emoji(
|
||||
char: '😉',
|
||||
shortName: ':wink2:',
|
||||
unicode: '1f609',
|
||||
),
|
||||
Emoji(
|
||||
char: '😊',
|
||||
shortName: ':blush:',
|
||||
unicode: '1f60a',
|
||||
),
|
||||
Emoji(
|
||||
char: '😋',
|
||||
shortName: ':yum:',
|
||||
unicode: '1f60b',
|
||||
),
|
||||
Emoji(
|
||||
char: '😌',
|
||||
shortName: ':relieved:',
|
||||
unicode: '1f60c',
|
||||
),
|
||||
Emoji(
|
||||
char: '😍',
|
||||
shortName: ':heart_eyes:',
|
||||
unicode: '1f60d',
|
||||
),
|
||||
];
|
||||
|
||||
final sampleGroupConversation = [
|
||||
ChatMessage(
|
||||
text: 'Hey there! What\'s up?',
|
||||
createdAt: DateTime.now().subtract(const Duration(seconds: 1)),
|
||||
sender: sahil,
|
||||
),
|
||||
ChatMessage(
|
||||
text: 'Nothing. Just chilling and watching YouTube. What about you?',
|
||||
createdAt: DateTime.now().subtract(const Duration(seconds: 2)),
|
||||
sender: avni,
|
||||
),
|
||||
ChatMessage(
|
||||
text: 'Yeah I know. I\'m in the same position 😂',
|
||||
createdAt: DateTime.now().subtract(const Duration(seconds: 3)),
|
||||
sender: sahil,
|
||||
),
|
||||
ChatMessage(
|
||||
text: 'I\'m just trying to get some sleep',
|
||||
createdAt: DateTime.now().subtract(const Duration(seconds: 4)),
|
||||
sender: gaurav,
|
||||
),
|
||||
ChatMessage(
|
||||
text:
|
||||
'Same here! Been watching YouTube for the past 5 hours despite of having so much to do! 😅',
|
||||
createdAt: DateTime.now().subtract(const Duration(seconds: 5)),
|
||||
sender: trapti,
|
||||
),
|
||||
ChatMessage(
|
||||
text: 'It\'s hard to be productive',
|
||||
createdAt: DateTime.now().subtract(const Duration(seconds: 6)),
|
||||
sender: avni,
|
||||
),
|
||||
];
|
@ -0,0 +1,49 @@
|
||||
class Emoji {
|
||||
const Emoji({
|
||||
required this.char,
|
||||
required this.shortName,
|
||||
required this.unicode,
|
||||
});
|
||||
|
||||
final String char;
|
||||
final String shortName;
|
||||
final String unicode;
|
||||
}
|
||||
|
||||
class Hashtag {
|
||||
const Hashtag({
|
||||
required this.name,
|
||||
required this.weight,
|
||||
required this.description,
|
||||
required this.image,
|
||||
});
|
||||
|
||||
final String name;
|
||||
final int weight;
|
||||
final String description;
|
||||
final String image;
|
||||
}
|
||||
|
||||
class User {
|
||||
const User({
|
||||
required this.id,
|
||||
required this.name,
|
||||
required this.avatar,
|
||||
});
|
||||
|
||||
final String id;
|
||||
final String name;
|
||||
final String avatar;
|
||||
}
|
||||
|
||||
class ChatMessage {
|
||||
const ChatMessage({
|
||||
required this.text,
|
||||
required this.createdAt,
|
||||
required this.sender,
|
||||
});
|
||||
|
||||
final String text;
|
||||
final DateTime createdAt;
|
||||
final User sender;
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
import 'package:example/src/data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:example/src/models.dart';
|
||||
|
||||
class EmojiAutocompleteOptions extends StatelessWidget {
|
||||
const EmojiAutocompleteOptions({
|
||||
Key? key,
|
||||
required this.query,
|
||||
required this.onEmojiTap,
|
||||
}) : super(key: key);
|
||||
|
||||
final String query;
|
||||
final ValueSetter<Emoji> onEmojiTap;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final emojis = kEmojis.where((it) {
|
||||
final normalizedOption = it.shortName.toLowerCase();
|
||||
final normalizedQuery = query.toLowerCase();
|
||||
return normalizedOption.contains(normalizedQuery);
|
||||
});
|
||||
|
||||
if (emojis.isEmpty) return const SizedBox.shrink();
|
||||
|
||||
return Card(
|
||||
margin: const EdgeInsets.all(8),
|
||||
elevation: 2,
|
||||
// color: _streamChatTheme.colorTheme.barsBg,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
clipBehavior: Clip.hardEdge,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
color: const Color(0xFFF7F7F8),
|
||||
child: ListTile(
|
||||
dense: true,
|
||||
horizontalTitleGap: 0,
|
||||
title: Text("Emoji's matching '$query'"),
|
||||
),
|
||||
),
|
||||
const Divider(height: 0),
|
||||
LimitedBox(
|
||||
maxHeight: MediaQuery.of(context).size.height * 0.3,
|
||||
child: ListView.separated(
|
||||
padding: EdgeInsets.zero,
|
||||
shrinkWrap: true,
|
||||
itemCount: emojis.length,
|
||||
separatorBuilder: (_, __) => const Divider(height: 0),
|
||||
itemBuilder: (context, i) {
|
||||
final emoji = emojis.elementAt(i);
|
||||
return ListTile(
|
||||
dense: true,
|
||||
leading: Text(
|
||||
emoji.char,
|
||||
style: const TextStyle(fontSize: 24),
|
||||
),
|
||||
title: Text(emoji.shortName),
|
||||
onTap: () => onEmojiTap(emoji),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
import 'package:example/src/data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:example/src/models.dart';
|
||||
|
||||
class HashtagAutocompleteOptions extends StatelessWidget {
|
||||
const HashtagAutocompleteOptions({
|
||||
Key? key,
|
||||
required this.query,
|
||||
required this.onHashtagTap,
|
||||
}) : super(key: key);
|
||||
|
||||
final String query;
|
||||
final ValueSetter<Hashtag> onHashtagTap;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final hashtags = kHashtags.where((it) {
|
||||
final normalizedOption = it.name.toLowerCase();
|
||||
final normalizedQuery = query.toLowerCase();
|
||||
return normalizedOption.contains(normalizedQuery);
|
||||
});
|
||||
|
||||
if (hashtags.isEmpty) return const SizedBox.shrink();
|
||||
|
||||
return Card(
|
||||
margin: const EdgeInsets.all(8),
|
||||
elevation: 2,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
clipBehavior: Clip.hardEdge,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
color: const Color(0xFFE9EAF4),
|
||||
child: ListTile(
|
||||
dense: true,
|
||||
horizontalTitleGap: 0,
|
||||
title: Text("Hashtags matching '$query'"),
|
||||
),
|
||||
),
|
||||
const Divider(height: 0),
|
||||
LimitedBox(
|
||||
maxHeight: MediaQuery.of(context).size.height * 0.3,
|
||||
child: ListView.separated(
|
||||
padding: EdgeInsets.zero,
|
||||
shrinkWrap: true,
|
||||
itemCount: hashtags.length,
|
||||
separatorBuilder: (_, __) => const Divider(height: 0),
|
||||
itemBuilder: (context, i) {
|
||||
final hashtag = hashtags.elementAt(i);
|
||||
return ListTile(
|
||||
dense: true,
|
||||
leading: CircleAvatar(
|
||||
backgroundColor: const Color(0xFFF7F7F8),
|
||||
backgroundImage: NetworkImage(
|
||||
hashtag.image,
|
||||
scale: 0.5,
|
||||
),
|
||||
),
|
||||
title: Text('#${hashtag.name}'),
|
||||
subtitle: Text(
|
||||
hashtag.description,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
onTap: () => onHashtagTap(hashtag),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
import 'package:example/src/data.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:example/src/models.dart';
|
||||
|
||||
class MentionAutocompleteOptions extends StatelessWidget {
|
||||
const MentionAutocompleteOptions({
|
||||
Key? key,
|
||||
required this.query,
|
||||
required this.onMentionUserTap,
|
||||
}) : super(key: key);
|
||||
|
||||
final String query;
|
||||
final ValueSetter<User> onMentionUserTap;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final users = kUsers.where((it) {
|
||||
final normalizedId = it.id.toLowerCase();
|
||||
final normalizedName = it.name.toLowerCase();
|
||||
final normalizedQuery = query.toLowerCase();
|
||||
return normalizedId.contains(normalizedQuery) ||
|
||||
normalizedName.contains(normalizedQuery);
|
||||
});
|
||||
|
||||
if (users.isEmpty) return const SizedBox.shrink();
|
||||
|
||||
return Card(
|
||||
margin: const EdgeInsets.all(8),
|
||||
elevation: 2,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
clipBehavior: Clip.hardEdge,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
color: const Color(0xFFF7F7F8),
|
||||
child: ListTile(
|
||||
dense: true,
|
||||
horizontalTitleGap: 0,
|
||||
title: Text("Users matching '$query'"),
|
||||
),
|
||||
),
|
||||
LimitedBox(
|
||||
maxHeight: MediaQuery.of(context).size.height * 0.3,
|
||||
child: ListView.separated(
|
||||
padding: EdgeInsets.zero,
|
||||
shrinkWrap: true,
|
||||
itemCount: users.length,
|
||||
separatorBuilder: (_, __) => const Divider(height: 0),
|
||||
itemBuilder: (context, i) {
|
||||
final user = users.elementAt(i);
|
||||
return ListTile(
|
||||
dense: true,
|
||||
leading: CircleAvatar(
|
||||
backgroundImage: NetworkImage(user.avatar),
|
||||
),
|
||||
title: Text(user.name),
|
||||
subtitle: Text('@${user.id}'),
|
||||
onTap: () => onMentionUserTap(user),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
export 'emoji_autocomplete_options.dart';
|
||||
export 'hashtag_autocomplete_options.dart';
|
||||
export 'mention_autocomplete_options.dart';
|
364
packages/multi_trigger_autocomplete_plus/example/pubspec.lock
Normal file
364
packages/multi_trigger_autocomplete_plus/example/pubspec.lock
Normal file
@ -0,0 +1,364 @@
|
||||
# Generated by pub
|
||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||
packages:
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.12.0"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: boolean_selector
|
||||
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.4.0"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.2"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.19.1"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: crypto
|
||||
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.6"
|
||||
cupertino_icons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: cupertino_icons
|
||||
sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.8"
|
||||
fake_async:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fake_async
|
||||
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.2"
|
||||
ffi:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: ffi
|
||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.3"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_lints:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_lints
|
||||
sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.3"
|
||||
flutter_parsed_text:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_parsed_text
|
||||
sha256: "529cf5793b7acdf16ee0f97b158d0d4ba0bf06e7121ef180abe1a5b59e32c1e2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
flutter_portal:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_portal
|
||||
sha256: "4601b3dc24f385b3761721bd852a3f6c09cddd4e943dd184ed58ee1f43006257"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.4"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
google_fonts:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: google_fonts
|
||||
sha256: e20ff62b158b96f392bfc8afe29dee1503c94fbea2cbe8186fd59b756b8ae982
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.1.0"
|
||||
http:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http
|
||||
sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
http_parser:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http_parser
|
||||
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.2"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "10.0.8"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_flutter_testing
|
||||
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.9"
|
||||
leak_tracker_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_testing
|
||||
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
lints:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: lints
|
||||
sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.17"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.11.1"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.16.0"
|
||||
multi_trigger_autocomplete_plus:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: ".."
|
||||
relative: true
|
||||
source: path
|
||||
version: "1.0.2"
|
||||
path:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.9.1"
|
||||
path_provider:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider
|
||||
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
path_provider_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_android
|
||||
sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.15"
|
||||
path_provider_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_foundation
|
||||
sha256: "4843174df4d288f5e29185bd6e72a6fbdf5a4a4602717eed565497429f179942"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.1"
|
||||
path_provider_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_linux
|
||||
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
path_provider_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_platform_interface
|
||||
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
path_provider_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_windows
|
||||
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.0"
|
||||
platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: platform
|
||||
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.6"
|
||||
plugin_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: plugin_platform_interface
|
||||
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.8"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
source_span:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.1"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.12.1"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.4.1"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.2"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.4"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: typed_data
|
||||
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.4.0"
|
||||
vector_math:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "14.3.1"
|
||||
web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
xdg_directories:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: xdg_directories
|
||||
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
sdks:
|
||||
dart: ">=3.7.0-0 <4.0.0"
|
||||
flutter: ">=3.24.0"
|
@ -0,0 +1,91 @@
|
||||
name: example
|
||||
description: A new Flutter project.
|
||||
|
||||
# The following line prevents the package from being accidentally published to
|
||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||
publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||
|
||||
# The following defines the version and build number for your application.
|
||||
# A version number is three numbers separated by dots, like 1.2.43
|
||||
# followed by an optional build number separated by a +.
|
||||
# Both the version and the builder number may be overridden in flutter
|
||||
# build by specifying --build-name and --build-number, respectively.
|
||||
# In Android, build-name is used as versionName while build-number used as versionCode.
|
||||
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
|
||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||
# Read more about iOS versioning at
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
version: 1.0.0+1
|
||||
|
||||
environment:
|
||||
sdk: ">=2.18.0 <4.0.0"
|
||||
|
||||
# Dependencies specify other packages that your package needs in order to work.
|
||||
# To automatically upgrade your package dependencies to the latest versions
|
||||
# consider running `flutter pub upgrade --major-versions`. Alternatively,
|
||||
# dependencies can be manually updated by changing the version numbers below to
|
||||
# the latest version available on pub.dev. To see which dependencies have newer
|
||||
# versions available, run `flutter pub outdated`.
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
|
||||
# The following adds the Cupertino Icons font to your application.
|
||||
# Use with the CupertinoIcons class for iOS style icons.
|
||||
cupertino_icons: ^1.0.5
|
||||
flutter_parsed_text: ^2.2.1
|
||||
google_fonts: ^5.0.0
|
||||
multi_trigger_autocomplete_plus:
|
||||
path: ../
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
|
||||
# The "flutter_lints" package below contains a set of recommended lints to
|
||||
# encourage good coding practices. The lint set provided by the package is
|
||||
# activated in the `analysis_options.yaml` file located at the root of your
|
||||
# package. See that file for information about deactivating specific lint
|
||||
# rules and activating additional ones.
|
||||
flutter_lints: ^2.0.0
|
||||
|
||||
# For information on the generic Dart part of this file, see the
|
||||
# following page: https://dart.dev/tools/pub/pubspec
|
||||
|
||||
# The following section is specific to Flutter packages.
|
||||
flutter:
|
||||
# The following line ensures that the Material Icons font is
|
||||
# included with your application, so that you can use the icons in
|
||||
# the material Icons class.
|
||||
uses-material-design: true
|
||||
|
||||
# To add assets to your application, add an assets section, like this:
|
||||
# assets:
|
||||
# - images/a_dot_burr.jpeg
|
||||
# - images/a_dot_ham.jpeg
|
||||
|
||||
# An image asset can refer to one or more resolution-specific "variants", see
|
||||
# https://flutter.dev/assets-and-images/#resolution-aware
|
||||
|
||||
# For details regarding adding assets from package dependencies, see
|
||||
# https://flutter.dev/assets-and-images/#from-packages
|
||||
|
||||
# To add custom fonts to your application, add a fonts section here,
|
||||
# in this "flutter" section. Each entry in this list should have a
|
||||
# "family" key with the font family name, and a "fonts" key with a
|
||||
# list giving the asset and other descriptors for the font. For
|
||||
# example:
|
||||
# fonts:
|
||||
# - family: Schyler
|
||||
# fonts:
|
||||
# - asset: fonts/Schyler-Regular.ttf
|
||||
# - asset: fonts/Schyler-Italic.ttf
|
||||
# style: italic
|
||||
# - family: Trajan Pro
|
||||
# fonts:
|
||||
# - asset: fonts/TrajanPro.ttf
|
||||
# - asset: fonts/TrajanPro_Bold.ttf
|
||||
# weight: 700
|
||||
#
|
||||
# For details regarding fonts from package dependencies,
|
||||
# see https://flutter.dev/custom-fonts/#from-packages
|
@ -0,0 +1,4 @@
|
||||
# melos_managed_dependency_overrides: multi_trigger_autocomplete_plus
|
||||
dependency_overrides:
|
||||
multi_trigger_autocomplete_plus:
|
||||
path: ..
|
Reference in New Issue
Block a user