Flutter仿美團(tuán)點(diǎn)餐的UI效果
前兩天公司項(xiàng)目緊,要我做一個(gè)左邊列表選擇后缰贝,展示右邊的標(biāo)簽馍悟,然后右邊的標(biāo)簽可以多選,捋了下邏輯剩晴,覺得很簡(jiǎn)單锣咒,于是手?jǐn)]了代碼,代碼如下
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class TestMenuPage extends StatefulWidget {
? @override
? _TestMenuPageState createState() => _TestMenuPageState();
}
class _TestMenuPageState extends State<TestMenuPage> {
? List<LeftData> leftList = [];
? int _leftIndex = 0;
? Map<int, List<int>> totalItem = {};
? double height;
? @override
? initState() {
? ? super.initState();
? ? leftList = List.generate(20, (index) => LeftData('$index組', index + 1)).toList();
? }
? @override
? Widget build(BuildContext context) {
? ? int length = 0;
? ? totalItem.forEach((key, value) {
? ? ? length += value.length;
? ? });
? ? height = MediaQuery.of(context).size.height;
? ? return Scaffold(
? ? ? appBar: AppBar(
? ? ? ? title: Text('測(cè)試菜單'),
? ? ? ? actions: [
? ? ? ? ? Container(
? ? ? ? ? ? width: 80,
? ? ? ? ? ? height: 50,
? ? ? ? ? ? child: Center(
? ? ? ? ? ? ? child: GestureDetector(
? ? ? ? ? ? ? ? onTap: () {
? ? ? ? ? ? ? ? ? print('所有選中的項(xiàng)目: ${totalItem.toString()}');
? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? child: Text(
? ? ? ? ? ? ? ? ? '完成',
? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? fontSize: 16,
? ? ? ? ? ? ? ? ? ? color: Colors.white,
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ),
? ? ? ? ? ? ),
? ? ? ? ? )
? ? ? ? ],
? ? ? ),
? ? ? body: Column(
? ? ? ? // mainAxisSize: MainAxisSize.min,
? ? ? ? children: [
? ? ? ? ? if (length != 0)
? ? ? ? ? ? Column(
? ? ? ? ? ? ? mainAxisSize: MainAxisSize.min,
? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? Container(
? ? ? ? ? ? ? ? ? height: 36,
? ? ? ? ? ? ? ? ? width: double.infinity,
? ? ? ? ? ? ? ? ? padding: EdgeInsets.symmetric(horizontal: 16),
? ? ? ? ? ? ? ? ? alignment: Alignment.centerLeft,
? ? ? ? ? ? ? ? ? child: Text.rich(
? ? ? ? ? ? ? ? ? ? TextSpan(
? ? ? ? ? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? ? ? ? ? TextSpan(
? ? ? ? ? ? ? ? ? ? ? ? ? text: '已選擇',
? ? ? ? ? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? ? ? ? ? fontSize: 16,
? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0xff282828,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? WidgetSpan(
? ? ? ? ? ? ? ? ? ? ? ? ? child: Container(
? ? ? ? ? ? ? ? ? ? ? ? ? ? width: 8,
? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? TextSpan(
? ? ? ? ? ? ? ? ? ? ? ? ? text: '擅長(zhǎng)治療疾病最多選擇20個(gè)',
? ? ? ? ? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? ? ? ? ? fontSize: 14,
? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0xff989898,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? Container(
? ? ? ? ? ? ? ? ? width: double.infinity,
? ? ? ? ? ? ? ? ? padding: EdgeInsets.only(
? ? ? ? ? ? ? ? ? ? left: 16,
? ? ? ? ? ? ? ? ? ? right: 16,
? ? ? ? ? ? ? ? ? ? top: 16,
? ? ? ? ? ? ? ? ? ? bottom: 16,
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? // height: 173,
? ? ? ? ? ? ? ? ? constraints: BoxConstraints(
? ? ? ? ? ? ? ? ? ? // minHeight: 50,
? ? ? ? ? ? ? ? ? ? maxHeight: 173,
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? child: Scrollbar(
? ? ? ? ? ? ? ? ? ? thickness: 2,
? ? ? ? ? ? ? ? ? ? child: SingleChildScrollView(
? ? ? ? ? ? ? ? ? ? ? physics: BouncingScrollPhysics(),
? ? ? ? ? ? ? ? ? ? ? child: Wrap(
? ? ? ? ? ? ? ? ? ? ? ? runSpacing: 13,
? ? ? ? ? ? ? ? ? ? ? ? spacing: 13,
? ? ? ? ? ? ? ? ? ? ? ? children: _grow(),
? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ],
? ? ? ? ? ? ),
? ? ? ? ? Expanded(
? ? ? ? ? ? flex: 2,
? ? ? ? ? ? child: Container(
? ? ? ? ? ? ? height: double.infinity,
? ? ? ? ? ? ? decoration: BoxDecoration(
? ? ? ? ? ? ? ? border: Border(
? ? ? ? ? ? ? ? ? top: BorderSide(
? ? ? ? ? ? ? ? ? ? color: Color(0xfff0f0f0),
? ? ? ? ? ? ? ? ? ? width: 1,
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ),
? ? ? ? ? ? ? child: Row(
? ? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? ? Container(
? ? ? ? ? ? ? ? ? ? width: 100,
? ? ? ? ? ? ? ? ? ? height: double.infinity,
? ? ? ? ? ? ? ? ? ? child: Scrollbar(
? ? ? ? ? ? ? ? ? ? ? thickness: 2,
? ? ? ? ? ? ? ? ? ? ? child: ListView.builder(
? ? ? ? ? ? ? ? ? ? ? ? physics: BouncingScrollPhysics(),
? ? ? ? ? ? ? ? ? ? ? ? shrinkWrap: true,
? ? ? ? ? ? ? ? ? ? ? ? itemBuilder: (c, index) {
? ? ? ? ? ? ? ? ? ? ? ? ? LeftData l = leftList[index];
? ? ? ? ? ? ? ? ? ? ? ? ? return GestureDetector(
? ? ? ? ? ? ? ? ? ? ? ? ? ? behavior: HitTestBehavior.opaque,
? ? ? ? ? ? ? ? ? ? ? ? ? ? onTap: () {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? setState(() {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _leftIndex = index;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? print('_leftIndex: $_leftIndex');
? ? ? ? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Container(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? height: 44,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? width: double.infinity,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: _leftIndex == index ? Colors.white : Color(0xfff2f2f2),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: _leftIndex == index
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Stack(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // mainAxisAlignment: MainAxisAlignment.center,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Positioned(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Center(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Container(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? decoration: BoxDecoration(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? border: Border(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? left: BorderSide(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xffc33b2a),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? width: 2,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? height: 15,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? width: 2,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? margin: EdgeInsets.only(right: 8),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? left: 20,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? top: 12,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bottom: 12,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // width: 2,
// height: 15,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Positioned(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Text(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? l.name,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fontSize: 16,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xff282828),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? left: 32,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? top: 12,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bottom: 12,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? : Stack(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Positioned(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Text(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? l.name,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fontSize: 16,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xff282828),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? left: 32,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? top: 12,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? bottom: 12,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? );
? ? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? itemCount: leftList.length,
? ? ? ? ? ? ? ? ? ? ? ? itemExtent: 44,
? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? Expanded(
? ? ? ? ? ? ? ? ? ? child: Container(
? ? ? ? ? ? ? ? ? ? ? color: Colors.white,
? ? ? ? ? ? ? ? ? ? ? child: Scrollbar(
? ? ? ? ? ? ? ? ? ? ? ? thickness: 2,
? ? ? ? ? ? ? ? ? ? ? ? child: SingleChildScrollView(
? ? ? ? ? ? ? ? ? ? ? ? ? physics: BouncingScrollPhysics(),
? ? ? ? ? ? ? ? ? ? ? ? ? child: Container(
? ? ? ? ? ? ? ? ? ? ? ? ? ? padding: EdgeInsets.all(10),
? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Wrap(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? spacing: 10,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? runSpacing: 10,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? children: List.generate(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 50,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (index) => Row(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mainAxisSize: MainAxisSize.min,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GestureDetector(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? behavior: HitTestBehavior.opaque,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? onTap: () {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? setState(() {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (length < 20) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (totalItem[_leftIndex] == null)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? totalItem[_leftIndex] = [];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? List<int> list = totalItem[_leftIndex];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (!list.contains(index))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? list.add(index);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? list.remove(index);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? print('totalItem: ${totalItem.toString()}');
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? print('最多只能選擇20個(gè)');
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _grow();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: totalItem[_leftIndex] != null &&
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? totalItem[_leftIndex].contains(index)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Container(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? height: 32,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? padding: EdgeInsets.symmetric(horizontal: 10),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? decoration: BoxDecoration(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? borderRadius: BorderRadius.all(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Radius.circular(2),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? border: Border.all(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xffc33b2a),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? width: 1,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Center(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Text(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '$_leftIndex組$index項(xiàng)',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xffc33b2a),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fontSize: 16,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? : Container(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? height: 32,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? padding: EdgeInsets.symmetric(horizontal: 10),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? decoration: BoxDecoration(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? borderRadius: BorderRadius.all(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Radius.circular(2),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? border: Border.all(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xffd0d0d0),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? width: 1,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Center(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? child: Text(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? '$_leftIndex組$index項(xiàng)',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xff282828),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fontSize: 16,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? )
? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ),
? ? ? ? ? ? ),
? ? ? ? ? ),
? ? ? ? ],
? ? ? ),
? ? );
? }
? List<Widget> _grow() {
? ? List<Widget> list = [];
? ? totalItem.forEach((key, value) {
? ? ? list.addAll(value
? ? ? ? ? .map(
? ? ? ? ? ? (e) => GestureDetector(
? ? ? ? ? ? ? behavior: HitTestBehavior.opaque,
? ? ? ? ? ? ? onTap: () {
? ? ? ? ? ? ? ? print('delete: $e');
? ? ? ? ? ? ? ? setState(() {
? ? ? ? ? ? ? ? ? totalItem[key].remove(e);
? ? ? ? ? ? ? ? });
? ? ? ? ? ? ? },
? ? ? ? ? ? ? child: Row(
? ? ? ? ? ? ? ? mainAxisSize: MainAxisSize.min,
? ? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? ? Container(
? ? ? ? ? ? ? ? ? ? height: 32,
? ? ? ? ? ? ? ? ? ? padding: EdgeInsets.symmetric(horizontal: 10),
? ? ? ? ? ? ? ? ? ? decoration: BoxDecoration(
? ? ? ? ? ? ? ? ? ? ? borderRadius: BorderRadius.all(
? ? ? ? ? ? ? ? ? ? ? ? Radius.circular(2),
? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? border: Border.all(
? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xffc33b2a),
? ? ? ? ? ? ? ? ? ? ? ? width: 1,
? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? child: Center(
? ? ? ? ? ? ? ? ? ? ? child: Row(
? ? ? ? ? ? ? ? ? ? ? ? children: [
? ? ? ? ? ? ? ? ? ? ? ? ? Text(
? ? ? ? ? ? ? ? ? ? ? ? ? ? '$key組$e項(xiàng)',
? ? ? ? ? ? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xffc33b2a),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fontSize: 16,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? Text(
? ? ? ? ? ? ? ? ? ? ? ? ? ? 'x',
? ? ? ? ? ? ? ? ? ? ? ? ? ? style: TextStyle(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? color: Color(0xffc33b2a),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fontSize: 16,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ? ),
? ? ? ? ? ? ? ? ],
? ? ? ? ? ? ? ),
? ? ? ? ? ? ),
? ? ? ? ? )
? ? ? ? ? .toList());
? ? });
? ? return list;
? }
}
class LeftData {
? String name;
? int id;
? LeftData(this.name, this.id);
}
效果見下圖:
不知道怎么弄gif圖赞弥,就看截圖吧毅整,哈哈
邏輯是:第一次進(jìn)入默認(rèn)選到第一組,展示第一組的所有標(biāo)簽绽左,然后根據(jù)選擇的哪一組悼嫉,從右邊標(biāo)簽里篩選出想要的,然后上面的區(qū)域展示勾選上的拼窥,點(diǎn)擊里面的x可以去掉該標(biāo)簽戏蔑,點(diǎn)擊下面的標(biāo)簽列表項(xiàng)也可以取消,上面的區(qū)域自適應(yīng)高度鲁纠。
寫的比較簡(jiǎn)單总棵,寫完這個(gè)之后,就把它拿到公司項(xiàng)目里改含,對(duì)接接口了彻舰,如果大家用得著,可以拿過去,把接口對(duì)上就ok了刃唤,