flutter_mentions 1.0.11
flutter_mentions: ^1.0.11 copied to clipboard

Flutter Android iOS Linux macOS web Windows

A simple flutter input widget to add @ mentions functionality to your app.

example/lib/main.dart

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_mentions/flutter_mentions.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: (_, child) => Portal(child: child),
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  GlobalKey<FlutterMentionsState> key = GlobalKey<FlutterMentionsState>();
  bool _showList = false;
  var _users = [
    {
      'id': '61as61fsa',
      'display': 'fayeedP',
      'full_name': 'Fayeed Pawaskar',
      'photo':
          'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940'
    },
    {
      'id': '61asasgasgsag6a',
      'display': 'khaled',
      'full_name': 'DJ Khaled',
      'style': TextStyle(color: Colors.purple),
      'photo':
          'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940'
    },
    {
      'id': 'asfgasga41',
      'display': 'markT',
      'full_name': 'Mark Twain',
      'photo':
          'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940'
    },
    {
      'id': 'asfsaf451a',
      'display': '@~|[]{}#%^*+=|\$<>£€•.,?!',
      'full_name': 'Jhon Legend',
      'photo':
          'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940'
    },
  ];

  @override
  void initState() {
    print(key.currentState?.controller?.markupText);
    key.currentState?.controller?.addListener(() {
      print(key.currentState?.controller?.text);
    });

    Timer(Duration(seconds: 3), () {
      setState(() {
        _users = [
          ..._users,
          {
            'id': '45as1a4df1',
            'display': 'JayZ',
            'full_name': 'JayZ',
            'photo':
                'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940'
          },
        ];
      });
    });

    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    var arr = <Map<String, dynamic>>[];
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: <Widget>[
          RaisedButton(
            child: Text('Get Text'),
            onPressed: () {
              print(key.currentState.controller.markupText);
            },
          ),
          Container(
            padding: EdgeInsets.only(bottom: 10.0),
            width: MediaQuery.of(context).size.width,
            child: FlutterMentions(
              key: key,
              decoration: InputDecoration(hintText: 'Enter here...'),
              suggestionPosition: SuggestionPosition.Top,
              onMarkupChanged: (val) {
                // print(val);
              },
              onSuggestionVisibleChanged: (val) {
                setState(() {
                  _showList = val;
                });
              },
              onSearchChanged: (
                trigger,
                value,
              ) {
                print('again | $trigger | $value ');
              },
              hideSuggestionList: false,
              onEditingComplete: () {
                key.currentState.controller.clear();
                // key.currentState.controller.text = '';
              },
              minLines: 1,
              maxLines: 4,
              mentions: [
                Mention(
                    trigger: r'@',
                    style: TextStyle(
                      color: Colors.amber,
                    ),
                    matchAll: false,
                    data: _users,
                    suggestionBuilder: (data) {
                      return Container(
                        color: Colors.white,
                        padding: EdgeInsets.all(10.0),
                        child: Row(
                          children: <Widget>[
                            CircleAvatar(
                              backgroundImage: NetworkImage(
                                data['photo'],
                              ),
                            ),
                            SizedBox(
                              width: 20.0,
                            ),
                            Column(
                              children: <Widget>[
                                Text(data['full_name']),
                                Text('@${data['display']}'),
                              ],
                            )
                          ],
                        ),
                      );
                    }),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
53
likes
110
pub points
82%
popularity

A simple flutter input widget to add @ mentions functionality to your app.

Repository (GitHub)
View/report issues

Documentation

API reference

Uploader

fayeed52@gmail.com

License

MIT (LICENSE)

Dependencies

flutter, flutter_portal

More

Packages that depend on flutter_mentions