Flutter标记滚动视图插件mark_scroll_view的使用

Flutter标记滚动视图插件mark_scroll_view的使用

Mask ScrollView 是一个高性能的A-Z列表视图,具有灵活且高效的使用方式。

展示

开始使用

首先,在你的项目中引入 mark_scroll_view 包:

import 'package:mark_scroll_view/mark_scroll_view.dart';

使用方法

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 mark_scroll_view 插件。

import 'dart:math';

import 'package:english_words/english_words.dart';
import 'package:flutter/material.dart';
import 'package:mark_scroll_view/mark_scroll_view.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Mask Scroll View'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  // 数据
  List<String> dataList = [];
  Map<String, List<String>> showMap = {};
  List<MarkScrollModel<String>> modelList = [];

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

  void decAdd(String value) {
    if (dataList.contains(value)) {
      String newValue = all[Random().nextInt(all.length - 1)];
      decAdd(newValue);
    } else {
      dataList.add(value.toLowerCase());
    }
  }

  void addWords() {
    dataList.clear();
    showMap.clear();
    modelList.clear();
    for (int i = 0; i < 50; i++) {
      String value = all[Random().nextInt(all.length - 1)];
      decAdd(value);
    }
    handleList();
  }

  void handleList() {
    dataList.sort((a, b) => a.compareTo(b));
    for (String value in dataList) {
      if (showMap.keys.contains(value[0])) {
        showMap[value[0]]!.add(value);
      } else {
        showMap[value[0]] = [value];
      }
    }

    showMap.forEach((key, value) {
      MarkScrollModel<String> model = MarkScrollModel(tag: key, children: value);
      modelList.add(model);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: MarkScrollView<String>(
        dataList: modelList,
        susBuilder: (context, index) {
          return Container(
            color: Theme.of(context).primaryColorLight,
            padding: const EdgeInsets.all(12),
            child: Text(
              modelList[index].tag.toUpperCase(),
            ),
          );
        },
        itemBuilder: (context, mainIndex, index) {
          String text = modelList[mainIndex].children[index];
          text = '${text[0].toUpperCase()}${text.substring(1)}';
          return Container(
            height: 60,
            padding: const EdgeInsets.only(left: 12),
            alignment: Alignment.centerLeft,
            color: Theme.of(context).secondaryHeaderColor,
            child: Text(text),
          );
        },
        markBuilder: (context, index) {
          return Text(
            modelList[index].tag.toUpperCase(),
          );
        },
        markBarOption: const MarkBarOption(
          defaultColor: Colors.white,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          setState(() {
            addWords();
          });
        },
        child: const Icon(Icons.refresh),
      ),
    );
  }
}

更多关于Flutter标记滚动视图插件mark_scroll_view的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter标记滚动视图插件mark_scroll_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


mark_scroll_view 是 Flutter 中一个用于标记滚动视图位置的插件。它允许你在滚动视图中标记特定的位置,并在用户滚动时触发相应的回调。这对于需要在滚动到特定位置时执行某些操作(如加载更多数据、显示提示等)的场景非常有用。

安装

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

dependencies:
  flutter:
    sdk: flutter
  mark_scroll_view: ^1.0.0  # 请检查最新版本

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

使用

以下是一个简单的示例,展示了如何使用 mark_scroll_view 插件来标记滚动视图的位置:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Mark Scroll View Example')),
        body: MarkScrollViewExample(),
      ),
    );
  }
}

class MarkScrollViewExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MarkScrollView(
      onMarkReached: (int markIndex) {
        // 当滚动到标记位置时触发
        print('Reached mark at index: $markIndex');
      },
      marks: [100.0, 300.0, 500.0], // 标记的位置
      child: ListView.builder(
        itemCount: 100,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text('Item $index'),
          );
        },
      ),
    );
  }
}
回到顶部