~cytrogen/fluent-reader-mobile

fluent-reader-mobile/lib/components/cupertino_toolbar.dart -rw-r--r-- 1.9 KiB
28b99e81 — Cytrogen feat: add subscription search/sort, rewrite README, upgrade infrastructure 9 hours ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
 * cupertino_toolbar
 * Copyright (c) 2019 Christian Mengler. All rights reserved.
 * See LICENSE for distribution and usage details.
 */

import 'package:fluent_reader_lite/utils/colors.dart';
import 'package:fluent_reader_lite/utils/global.dart';
import 'package:flutter/cupertino.dart';

class CupertinoToolbar extends StatelessWidget {
  CupertinoToolbar({
    Key? key,
    required this.items,
    required this.body
  }) : assert(
        items.every((CupertinoToolbarItem item) => true) == true,
       ),
       super(key: key);

  final List<CupertinoToolbarItem> items;
  final Widget body;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        Expanded(
          child: body
        ),
        Container(
          decoration: BoxDecoration(
            border: Border(
              top: BorderSide(color: MyColors.barDivider.resolveFrom(context), width: 0.0)
            )
          ),
          child: SafeArea(
            top: false,
            child: SizedBox(
              height: Global.isTablet ? 50.0 : 44.0,
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: _createButtons()
              )
            )
          )
        )
      ]
    );
  }

  List<Widget> _createButtons() {
    final List<Widget> children = <Widget>[];
    for (int i = 0; i < items.length; i += 1) {
      children.add(CupertinoButton(
        padding: EdgeInsets.zero,
        child: Icon(
          items[i].icon,
          semanticLabel: items[i].semanticLabel,
        ),
        onPressed: items[i].onPressed
      ));
    }
    return children;
  }
}

class CupertinoToolbarItem {
  const CupertinoToolbarItem({
    required this.icon,
    this.onPressed,
    this.semanticLabel
  });

  final IconData icon;
  final VoidCallback? onPressed;
  final String? semanticLabel;
}