Flutter Instagram提及插件instagram_mention的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter Instagram提及插件instagram_mention的使用

Instagram Mention Widgets

Instagram CustomPainter

‘small details do matter’ ❤️

这个包提供了简单且几乎与真实的Instagram提及小部件相同的UI细节。它包含两种类型的部件:

  • InstagramMention - 仅文本
  • InstagramMentionWithAvatar - 文本和图像

使用方法

您可以在您的应用程序中像这样简单地使用这些部件:

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

class MyHomePage extends StatelessWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            // 仅文本
            InstagramMention(text: 'Lily Collins'),

            const SizedBox(height: 75),

            // 文本和图像
            InstagramMentionWithAvatar(
              image: Image.network('https://i.pinimg.com/originals/1f/b5/67/1fb567258e278aae24f49e6d5a1950b4.jpg'),
              text: 'Lily Collins',
            ),
          ],
        ),
      ),
    );
  }
}

或者,您可以使用我提供的自定义PainterRectangleWithNotchPainter,以便将绘画样式应用于您喜欢的任何部件。

Demo

Instagram CustomPainter

完整示例代码

以下是一个完整的示例demo,展示了如何在Flutter项目中使用instagram_mention插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Instagram Widgets Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: const MyHomePage(title: 'Instagram Widgets Demo Home Page'),
    );
  }
}

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

  final String? title;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title!),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            InstagramMention(text: 'devmuaz'),
            const SizedBox(height: 75),
            InstagramMentionWithAvatar(
              image: Image.network('https://i.pinimg.com/originals/1f/b5/67/1fb567258e278aae24f49e6d5a1950b4.jpg'),
              text: 'Lily Collins',
            )
          ],
        ),
      ),
    );
  }
}

Medium文章

您可以在我的devmuaz账户上阅读我写的一些很棒的Flutter内容。

贡献和支持

欢迎提交问题和拉取请求 😄

如果您发现这个包对您有用并喜欢它,请给它一个赞❤️并在GitHub上给仓库加星⭐️,这对我来说意义重大!

许可证

MIT


更多关于Flutter Instagram提及插件instagram_mention的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Instagram提及插件instagram_mention的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于在Flutter中使用instagram_mention插件来实现Instagram风格的提及功能,以下是一个简单的代码示例。需要注意的是,由于instagram_mention并非一个广泛认知的官方或知名Flutter插件,这里假设你指的是一个自定义或第三方实现的插件,其基本功能是处理文本中的提及(@username)。

在实际应用中,你可能需要找到或创建一个符合你需求的插件,或者自己实现这一功能。以下代码示例将展示如何在Flutter中模拟一个提及功能,虽然它不会直接使用名为instagram_mention的插件,但原理是相似的。

1. 添加依赖

首先,确保你的pubspec.yaml文件中包含了必要的依赖项,比如flutter_text_field_formatter,它可以帮助处理文本格式。不过,对于提及功能,我们主要依赖于Flutter的基础组件和逻辑。

dependencies:
  flutter:
    sdk: flutter
  flutter_text_field_formatter: ^2.0.0  # 可选,用于文本格式化

2. 创建提及模型

定义一个Mention模型来表示提及的用户。

class Mention {
  final String username;
  final int startIndex;
  final int endIndex;

  Mention({required this.username, required this.startIndex, required this.endIndex});
}

3. 提及检测逻辑

实现一个函数来检测文本中的提及并返回提及列表。

List<Mention> detectMentions(String text) {
  final RegExp mentionRegex = RegExp(r'@(\w+)');
  final Iterable<RegExpMatch> matches = mentionRegex.allMatches(text);
  List<Mention> mentions = [];

  for (RegExpMatch match in matches) {
    String username = match.group(1)!;
    int startIndex = match.start;
    int endIndex = match.end;
    mentions.add(Mention(username: username, startIndex: startIndex, endIndex: endIndex));
  }

  return mentions;
}

4. 构建UI

创建一个自定义的TextField,用于显示和编辑带有提及的文本。

import 'package:flutter/material.dart';

class MentionTextField extends StatefulWidget {
  @override
  _MentionTextFieldState createState() => _MentionTextFieldState();
}

class _MentionTextFieldState extends State<MentionTextField> {
  final TextEditingController _controller = TextEditingController();
  List<Mention> _mentions = [];

  @override
  void initState() {
    super.initState();
    _controller.addListener(() {
      setState(() {
        _mentions = detectMentions(_controller.text);
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        TextField(
          controller: _controller,
          decoration: InputDecoration(
            border: OutlineInputBorder(),
            labelText: 'Write a message',
          ),
        ),
        SizedBox(height: 10),
        Wrap(
          children: _buildMentionWidgets(),
        ),
      ],
    );
  }

  List<Widget> _buildMentionWidgets() {
    List<Widget> widgets = [];
    for (Mention mention in _mentions) {
      widgets.add(Chip(
        label: Text(
          '@${mention.username}',
          style: TextStyle(color: Colors.blue),
        ),
        backgroundColor: Colors.grey[200]!,
      ));
    }
    return widgets;
  }
}

5. 使用MentionTextField

在你的主应用中使用MentionTextField

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Instagram Mention Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: MentionTextField(),
        ),
      ),
    );
  }
}

这个示例展示了如何在Flutter中实现一个基本的提及功能,包括检测文本中的提及并以Chip的形式显示它们。虽然这个示例没有直接使用名为instagram_mention的插件,但它提供了一个起点,你可以根据实际需求进一步扩展和优化。如果你找到了一个具体的instagram_mention插件,通常你可以参考其文档和示例代码来集成到你的Flutter应用中。

回到顶部