dev
dart 116 lines 3.58 KB
Raw
1 import 'package:cake_wallet/src/widgets/cake_scrollbar.dart';
2 import 'package:cake_wallet/src/widgets/section_divider.dart';
3 import 'package:flutter/material.dart';
4 import 'package:cake_wallet/src/widgets/base_alert_dialog.dart';
5
6 class ChooseYatAddressAlert extends BaseAlertDialog {
7 ChooseYatAddressAlert({
8 required this.alertTitle,
9 required this.alertContent,
10 required this.addresses,
11 });
12
13 final String alertTitle;
14 final String alertContent;
15 final List<String> addresses;
16
17 @override
18 String get titleText => alertTitle;
19
20 @override
21 String get contentText => alertContent;
22
23 @override
24 bool get barrierDismissible => false;
25
26 @override
27 Widget actionButtons(BuildContext context) => ChooseYatAddressButtons(addresses);
28 }
29
30 class ChooseYatAddressButtons extends StatefulWidget {
31 ChooseYatAddressButtons(this.addresses);
32
33 final List<String> addresses;
34
35 @override
36 ChooseYatAddressButtonsState createState() => ChooseYatAddressButtonsState(addresses);
37 }
38
39 class ChooseYatAddressButtonsState extends State<ChooseYatAddressButtons> {
40 ChooseYatAddressButtonsState(this.addresses) : itemCount = addresses?.length ?? 0;
41
42 final List<String> addresses;
43 final int itemCount;
44 final double backgroundHeight = 118;
45 final double thumbHeight = 72;
46 ScrollController controller = ScrollController();
47 double fromTop = 0;
48
49 @override
50 Widget build(BuildContext context) {
51 controller.addListener(() {
52 fromTop = controller.hasClients
53 ? (controller.offset /
54 controller.position.maxScrollExtent *
55 (backgroundHeight - thumbHeight))
56 : 0;
57 setState(() {});
58 });
59
60 return Stack(
61 alignment: Alignment.center,
62 clipBehavior: Clip.none,
63 children: [
64 Container(
65 width: 300,
66 height: 158,
67 color: Theme.of(context).colorScheme.surface,
68 child: ListView.separated(
69 controller: controller,
70 padding: EdgeInsets.all(0),
71 itemCount: itemCount,
72 separatorBuilder: (_, __) => const HorizontalSectionDivider(),
73 itemBuilder: (context, index) {
74 final address = addresses[index];
75
76 return GestureDetector(
77 onTap: () => Navigator.of(context).pop<String>(address),
78 child: Container(
79 width: 300,
80 height: 52,
81 padding: EdgeInsets.only(left: 24, right: 24),
82 child: Row(
83 mainAxisAlignment: MainAxisAlignment.center,
84 crossAxisAlignment: CrossAxisAlignment.center,
85 children: [
86 Expanded(
87 child: Text(
88 address,
89 textAlign: TextAlign.center,
90 maxLines: 1,
91 overflow: TextOverflow.ellipsis,
92 style: Theme.of(context).textTheme.bodyMedium!.copyWith(
93 fontSize: 15,
94 fontWeight: FontWeight.w600,
95 color: Theme.of(context).colorScheme.onSurfaceVariant,
96 decoration: TextDecoration.none,
97 ),
98 ),
99 )
100 ],
101 ),
102 ),
103 );
104 },
105 ),
106 ),
107 if (itemCount > 3)
108 CakeScrollbar(
109 backgroundHeight: backgroundHeight,
110 thumbHeight: thumbHeight,
111 fromTop: fromTop,
112 )
113 ],
114 );
115 }
116 }