@@ -5,15 +5,34 @@ import 'package:clerk_flutter/clerk_flutter.dart';
5
5
import 'package:common/common.dart' ;
6
6
import 'package:flutter/material.dart' ;
7
7
8
- class ClerkUserButton extends StatelessWidget {
9
- static const _closeDelay = Duration (milliseconds: 250 );
10
-
8
+ class ClerkUserButton extends StatefulWidget {
11
9
final bool showName;
12
10
13
- ClerkUserButton ({super .key, this .showName = true });
11
+ const ClerkUserButton ({super .key, this .showName = true });
12
+
13
+ @override
14
+ State <ClerkUserButton > createState () => _ClerkUserButtonState ();
15
+ }
16
+
17
+ class _ClerkUserButtonState extends State <ClerkUserButton > {
18
+ static const _closeDelay = Duration (milliseconds: 250 );
14
19
15
20
final _sessions = < Clerk .Session > [];
16
21
22
+ Future <void > _manage (List <Clerk .Session > sessions) async {
23
+ // adding to a list of existing sessions means we have ones that are now deleted
24
+ // still available in `_sessions`, making for prettier UI
25
+ _sessions.addOrReplaceAll (sessions, by: (s) => s.id);
26
+
27
+ // after a delay period, all deleted sessions will have been closed, so we can
28
+ // clear the `_sessions` cache of any such for next time round
29
+ // Using `removeWhere` maintains the list order in `_sessions`, stopping weird
30
+ // UI jumping as arbitrary list order is imposed
31
+ await Future .delayed (_closeDelay);
32
+
33
+ _sessions.removeWhere ((s) => sessions.contains (s) == false );
34
+ }
35
+
17
36
@override
18
37
Widget build (BuildContext context) {
19
38
return DecoratedBox (
@@ -26,19 +45,7 @@ class ClerkUserButton extends StatelessWidget {
26
45
final translator = auth.translator;
27
46
final sessions = auth.client.sessions;
28
47
29
- // adding to a list of existing sessions means we have ones that are now deleted
30
- // still available in `_sessions`, making for prettier UI
31
- _sessions.addOrReplaceAll (sessions, by: (s) => s.id);
32
-
33
- // after a delay period, all deleted sessions will have been closed, so we can
34
- // clear the `_sessions` cache of any such for next time round
35
- //
36
- // Using `removeWhere` maintains the list order in `_sessions`, stopping weird
37
- // UI jumping as arbitrary list order is imposed
38
- Future .delayed (
39
- _closeDelay,
40
- () => _sessions.removeWhere ((s) => sessions.contains (s) == false ),
41
- );
48
+ _manage (sessions);
42
49
43
50
return ClerkVerticalCard (
44
51
topPortion: Column (
@@ -48,9 +55,9 @@ class ClerkUserButton extends StatelessWidget {
48
55
_SessionRow (
49
56
key: Key (session.id),
50
57
session: session,
51
- closed: auth.client. sessions.contains (session) == false ,
58
+ closed: sessions.contains (session) == false ,
52
59
selected: session == auth.client.activeSession,
53
- showName: showName,
60
+ showName: widget. showName,
54
61
onTap: () => auth.call (context, () => auth.setActiveSession (session)),
55
62
),
56
63
if (auth.env.config.singleSessionMode == false )
@@ -82,7 +89,7 @@ class ClerkUserButton extends StatelessWidget {
82
89
],
83
90
),
84
91
bottomPortion: Closeable (
85
- open: auth.client. sessions.length > 1 ,
92
+ open: sessions.length > 1 ,
86
93
child: Padding (
87
94
padding: horizontalPadding16 + verticalPadding12,
88
95
child: GestureDetector (
@@ -191,7 +198,7 @@ class _DottedBorderPainter extends CustomPainter {
191
198
static const _twoPi = 2 * math.pi;
192
199
193
200
final double dashLength;
194
- final double gapLength;
201
+ final double gapLength; // actually, minimum gap length
195
202
196
203
final Paint _paint;
197
204
final Paint _backgroundPaint;
@@ -201,7 +208,10 @@ class _DottedBorderPainter extends CustomPainter {
201
208
required Color backgroundColor,
202
209
this .dashLength = 0 ,
203
210
this .gapLength = 0 ,
204
- }) : assert (dashLength > 0 || gapLength == 0 , 'dashLength cannot be 0 unless gapLength is 0' ),
211
+ }) : assert (
212
+ dashLength > 0 || gapLength == 0 ,
213
+ 'dashLength cannot be 0 or less unless gapLength is 0' ,
214
+ ),
205
215
_paint = Paint ()
206
216
..style = PaintingStyle .stroke
207
217
..color = color,
0 commit comments