Flutter导航列表管理插件flutter_easy_navigation_list的使用

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

Flutter导航列表管理插件flutter_easy_navigation_list的使用

demo

demo地址

Getting Started

本项目是一个Dart包的起点,用于创建一个可以轻松共享到多个Flutter或Dart项目的库模块。

若要开始使用Flutter,请查看我们的在线文档,其中包含教程、示例、移动开发指南以及完整的API参考。


完整示例代码

以下是使用flutter_easy_navigation_list插件的完整示例代码:

import 'dart:math';
import 'dart:ui';

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

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: ListText(),
      ),
    );
  }
}

class ListText extends StatefulWidget {
  ListText({Key? key}) : super(key: key);

  [@override](/user/override)
  _ListTextState createState() => _ListTextState();
}

class _ListTextState extends State<ListText> {
  late List<String> naList = []; // 字母列表
  late List<Widget> chList = []; // 列表项内容

  [@override](/user/override)
  void initState() {
    super.initState();

    // 初始化字母列表和内容列表
    for (int i = 0; i < 27; i++) {
      naList
          .add(i == 26 ? String.fromCharCode(35) : String.fromCharCode(i + 65)); // 添加字母 A-Z 和 #
      int num = Random().nextInt(10) + 3; // 随机生成每个字母下的子项数量
      List<Widget> cChList = [];
      for (int j = 0; j < num; j++) {
        cChList.add(
          Container(
            margin: EdgeInsets.only(
              bottom: 10,
              left: 16,
              right: 16,
            ),
            width: window.physicalSize.width,
            color: Colors.green,
            height: 50,
            alignment: Alignment.centerLeft,
            child: Text(
              naList[i] + ':' + j.toString(), // 每个子项的文本
            ),
          ),
        );
      }
      chList.add(
        Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisAlignment: MainAxisAlignment.start,
          mainAxisSize: MainAxisSize.min,
          children: cChList,
        ),
      );
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    /// 使用示例
    return Container(
      color: Colors.blue, // 背景色
      child: AutoCharacterNavigatorList(
        // 设置字母导航的方向为垂直方向
        alphabetChildrenPosition: Position(
          right: 16, // 导航字母距离屏幕右侧的距离
          top: 30,  // 导航字母距离屏幕顶部的距离
        ),
        alphabetChildrenStyle: AlphabetChildrenStyle(
          unSelectBackgroundColor: Colors.deepOrange, // 未选中时的背景颜色
          margin: EdgeInsets.zero, // 导航字母的边距
          totalWidth: 16, // 导航字母的总宽度
          alphabetDirection: Axis.vertical, // 导航字母的方向
        ),
        childrenNavigator: naList, // 导航字母列表
        children: chList, // 子项内容列表
      ),
    );
  }
}

更多关于Flutter导航列表管理插件flutter_easy_navigation_list的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter导航列表管理插件flutter_easy_navigation_list的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_easy_navigation_list 是一个用于简化 Flutter 应用中导航列表管理的插件。它提供了一种简单的方式来管理和导航列表项,特别适用于需要处理大量数据或复杂导航逻辑的场景。

安装

首先,你需要在 pubspec.yaml 文件中添加 flutter_easy_navigation_list 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_easy_navigation_list: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本使用

1. 导入包

import 'package:flutter_easy_navigation_list/flutter_easy_navigation_list.dart';

2. 创建导航列表

你可以使用 EasyNavigationList 来创建一个导航列表。以下是一个简单的示例:

class MyHomePage extends StatelessWidget {
  final List<String> items = List.generate(20, (index) => 'Item $index');

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Easy Navigation List'),
      ),
      body: EasyNavigationList(
        items: items,
        itemBuilder: (context, item, index) {
          return ListTile(
            title: Text(item),
            onTap: () {
              Navigator.push(
                context,
                MaterialPageRoute(
                  builder: (context) => DetailPage(item: item),
                ),
              );
            },
          );
        },
      ),
    );
  }
}

3. 处理导航

在上面的示例中,当用户点击列表项时,会导航到一个新的页面 DetailPage。你可以根据需要在 DetailPage 中显示更多的信息。

class DetailPage extends StatelessWidget {
  final String item;

  DetailPage({required this.item});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Detail Page'),
      ),
      body: Center(
        child: Text('You selected: $item'),
      ),
    );
  }
}

高级功能

1. 自定义分隔符

你可以通过 separatorBuilder 来自定义列表项之间的分隔符:

EasyNavigationList(
  items: items,
  itemBuilder: (context, item, index) {
    return ListTile(
      title: Text(item),
      onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => DetailPage(item: item),
          ),
        );
      },
    );
  },
  separatorBuilder: (context, index) {
    return Divider(
      color: Colors.grey,
      height: 1,
    );
  },
)

2. 自定义滚动行为

你可以通过 scrollControllerphysics 来自定义滚动行为:

EasyNavigationList(
  items: items,
  itemBuilder: (context, item, index) {
    return ListTile(
      title: Text(item),
      onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => DetailPage(item: item),
          ),
        );
      },
    );
  },
  scrollController: ScrollController(),
  physics: BouncingScrollPhysics(),
)

3. 支持分页加载

flutter_easy_navigation_list 还支持分页加载功能,你可以通过 onLoadMore 回调来实现:

EasyNavigationList(
  items: items,
  itemBuilder: (context, item, index) {
    return ListTile(
      title: Text(item),
      onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => DetailPage(item: item),
          ),
        );
      },
    );
  },
  onLoadMore: () async {
    // 加载更多数据
    await Future.delayed(Duration(seconds: 2));
    items.addAll(List.generate(10, (index) => 'New Item ${items.length + index}'));
    return true; // 返回 true 表示加载成功,false 表示加载失败或没有更多数据
  },
)
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!