Флаттер - Как реализовать флажки с липкими заголовками? - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь реализовать липкие заголовки с помощью следующей библиотеки

sticky_header_list 1.0.2

https://pub.dartlang.org/packages/sticky_header_list#-readme-tab-

и объекта карты флажков представления списка

  Map<String, bool> valuesCarsHdr = {
    'Cars': false,
  };
  Map<String, bool> valuesCars = {
    'Car11': false,
    'Car12': false,
    'Car13': false,
    'Car14': false,
    'Car15': false,
    'Car16': false,
    'Car17': false,
    'Car18': false,
    'Car19': false,
    'Car20': false,
    'Car21': false,
  };

  Map<String, bool> valuesHdrHeadlights = {
    'Headlights': false,
  };
  Map<String, bool> valuesHeadlights = {
    'Headlights1': false,
    'Headlights2': false,
    'Headlights3': false,
    'Headlights4': false,
    'Headlights5': false,
    'Headlights6': false,
    'Headlights7': false,
    'Headlights8': false,
    'Headlights9': false,
    /...

  };

в соответствии с инструкциями, которые я пробовал следующие

  @override
  Widget build(BuildContext context) {
    this.widget.context = context;
    final Size screenSize = MediaQuery.of(context).size;

    return new Scaffold(
        appBar: new AppBar(
          title: new Text('Select Items'),
        ),
        body: new Container(
            height: screenSize.height,
            child: new StickyList(
              children: <StickyListRow>[
                new HeaderRow(child: _myHeaderCarsRow()),
                new RegularRow(child: _myRegularCarsRow()),
                new HeaderRow(child: _myHeaderCarsRow()),
                new RegularRow(child: _myRegularCarsRow())
              ],
            )));
  }

  Widget _myHeaderCarsRow()
  {
    return  new ListView(
      children: valuesCarsHdr.keys.map((String key) {
        return new CheckboxListTile(
          title: new Text(key),
          value: valuesCarsHdr[key],
          onChanged: (bool value) {
            setState(() {
              valuesCarsHdr[key] = value;
            });
          },
        );
      }).toList(),
    );
  }
  Widget _myRegularCarsRow()
  {
    return  new ListView(
      children: valuesCars.keys.map((String key) {
        return new CheckboxListTile(
          title: new Text(key),
          value: valuesCars[key],
          onChanged: (bool value) {
            setState(() {
              valuesCars[key] = value;
            });
          },
        );
      }).toList(),
    );
  }

Не уверен, что мне не хватает.Мой журнал Cat имеет следующий пакет

: flutter / src / render / sliver_multi_box_adaptor.dart: ошибочное утверждение: строка 471, позиция 12: 'child.hasSize': не соответствует действительности.

Любая помощь с благодарностью.Благодаря.

1 Ответ

0 голосов
/ 29 мая 2018

Я думаю, вы не поняли, как использовать библиотеку.Ниже, как я создал список, вы можете изменить заголовок и вид списка на то, что вы хотите

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

void main() => runApp(new MaterialApp(
      home: new MyApp(),
    ));

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new MyAppState();
  }
}

class MyAppState extends State<MyApp> {
  Map<String, bool> valuesCarsHdr = {
    'Cars': false,
  };
  Map<String, bool> valuesCars = {
    'Car11': false,
    'Car12': false,
    'Car13': false,
    'Car14': false,
    'Car15': false,
    'Car16': false,
    'Car17': false,
    'Car18': false,
    'Car19': false,
    'Car20': false,
    'Car21': false,
  };

  Map<String, bool> valuesHdrHeadlights = {
    'Headlights': false,
  };
  Map<String, bool> valuesHeadlights = {
    'Headlights1': false,
    'Headlights2': false,
    'Headlights3': false,
    'Headlights4': false,
    'Headlights5': false,
    'Headlights6': false,
    'Headlights7': false,
    'Headlights8': false,
    'Headlights9': false,
  };

  @override
  Widget build(BuildContext context) {
    //this.widget.context = context;
    final Size screenSize = MediaQuery.of(context).size;

    return new Scaffold(
        appBar: new AppBar(
          title: new Text('Select Items'),
        ),
        body: new Container(
            child: new StickyList(
          children: <StickyListRow>[
            new HeaderRow(child: _myHeaderCarsRow(1)),
            new RegularRow(child: _myRegularCarsRow()),
            new HeaderRow(child: _myHeaderCarsRow(2)),
            new RegularRow(child: _myRegularCarsRow())
          ],
        )));
  }

  Widget _myHeaderCarsRow(index) {
    return new Row(
      children: <Widget>[new Text("Header $index")],
    );
  }

  Widget _myRegularCarsRow() {
    return new Column(
      children: getRegularWidgets(),
    );
  }

  List<Widget> getRegularWidgets() {
    List<Widget> widgets = valuesCars.keys.map((key) {
      return new CheckboxListTile(
          title: new Text(key),
          value: valuesCars[key],
          onChanged: (bool value) {
            setState(() {
              valuesCarsHdr[key] = value;
            });
          });
    }).toList();

    return widgets;
  }
}
...