Files
xiaojia22326@163.com de712740c6 add file
2019-01-31 17:39:38 +08:00

121 lines
3.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Created with Android Studio.
* User: ryan
* Date: 2018/12/31
* Time: 下午2:25
* email: zhu.yan@alibaba-inc.com
* tartget: ListView 的示例
*/
import 'package:flutter_go/components/widget_demo.dart';
import 'package:flutter/material.dart';
import 'package:flutter_markdown/flutter_markdown.dart';
import './demo.dart' as ListViewDemo;
const String _Text0 =
"""### **简介**
> ListView “滚动列表”
- 一个非常常用的控件,涉及到数据列表展示的,一般情况下都会选用该控件。
- 跟GridView相似基本上是一个slivers里面只包含一个SliverList的CustomScrollView。
""";
const String _Text1 =
"""### **基本用法**
> 布局行为
- ListView在主轴方向可以滚动在交叉轴方向则是填满ListView。
- 一个组合控件。ListView跟GridView类似都是继承自BoxScrollView。
- ### 在Flutter中有几种构建ListView的方式,分别是: **默认ListListView.builder ListView.separatedListView.custom**。
""";
const String _Text2 =
"""
> ListView()
- 默认 List 方式,是把数据 Iterable 添加到列表中,之后直接添加到 ListView 即可。
- Tips: 如果需要设置分割线,需要对列表 item 添加处理ListTile.divideTiles。
- 仅适用于内容较少的情形,因为它是一次性渲染所有的 items ,当 items 的数目较多时,很容易出现卡顿现象的,导致滑动不流畅。
""";
const String _Text3 =
"""
> ListView.builder()
- 设置单个item的属性懒加载的假如有 1000 个列表,初始渲染时并不会所有都渲染,而只会特定数量的 item ,这对于性能和用户体验来说,是很好的提升。
""";
const String _Text4 =
"""
> 官方示例 ListView.separated()
- 带分割线的itemseparated 相比较于 builder又多了一个参数 separatorBuilder ,用于控制列表各个元素的间隔如何渲染。
""";
const String _Text5 =
"""
> 官方示例 ListView.custom()
- 必须的参数就是 childrenDelegate , 然后传入一个 实现了 SliverChildDelegate 的组件,如 SliverChildListDelegate 和 SliverChildBuilderDelegate。
""";
class Demo extends StatefulWidget {
static const String routeName = '/components/List/ListView';
@override
_DemoState createState() => _DemoState();
}
class _DemoState extends State<Demo> {
@override
Widget build(BuildContext context) {
return WidgetDemo(
title: 'ListView',
codeUrl: 'components/List/ListView/demo.dart',
contentList: [allCheckboxs(context, this)],
docUrl: 'https://docs.flutter.io/flutter/widgets/ListView-class.html',
);
}
}
/*
* 所有的 ListView widget
* context: 运行上下文
* that: 指向有状态的 StatefulWidget
*/
Widget allCheckboxs(BuildContext context, _DemoState that) {
return Container(
//padding: EdgeInsets.only(bottom: 20.0, top: 20.0, left: 0, right: 0),
child: Column(
//mainAxisSize: MainAxisSize.max,
children: <Widget>[
MarkdownBody(data: _Text0),
SizedBox(height: 20.0), // 间距
MarkdownBody(data: _Text1),
SizedBox(height: 20.0), // 间距
MarkdownBody(data: _Text2),
ListViewDemo.ListViewLessDefault(0),
MarkdownBody(data: _Text3),
ListViewDemo.ListViewLessDefault(1),
SizedBox(height: 20.0), // 间距
MarkdownBody(data: _Text4),
ListViewDemo.ListViewLessDefault(2),
SizedBox(height: 20.0), // 间距
MarkdownBody(data: _Text5),
ListViewDemo.ListViewLessDefault(3),
])
);
}
/*
* 带align的text
* */
Widget textAlignBar(String txt) {
return Align(
alignment: FractionalOffset.centerLeft,
child: Column(
children: <Widget>[
SizedBox(height: 20.0),
MarkdownBody(data: txt)
])
);
}