You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
3.7 KiB
Dart
131 lines
3.7 KiB
Dart
import 'package:diplomaticquarterapp/core/model/packages_offers/responses/tamara_payment_option.dart';
|
|
import 'package:diplomaticquarterapp/theme/colors.dart';
|
|
import 'package:diplomaticquarterapp/uitl/CalendarUtils.dart';
|
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
|
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
|
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:jiffy/jiffy.dart';
|
|
import 'package:manage_calendar_events/manage_calendar_events.dart';
|
|
import 'package:permission_handler/permission_handler.dart';
|
|
|
|
|
|
class SingleSelectionDialog<T> extends StatefulWidget {
|
|
final List<T> items;
|
|
final String title;
|
|
final Widget icon;
|
|
|
|
SingleSelectionDialog(this.items, {required this.icon, required this.title});
|
|
|
|
Future<Future<T?>> show(BuildContext context) async {
|
|
return showDialog<T>(
|
|
context: context,
|
|
barrierDismissible: true, // user must tap button!
|
|
builder: (BuildContext context) {
|
|
return Dialog(
|
|
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0.0)),
|
|
insetPadding: EdgeInsets.all(21),
|
|
child: this,
|
|
);
|
|
},
|
|
);
|
|
}
|
|
|
|
@override
|
|
_SingleSelectionDialogState createState() => _SingleSelectionDialogState();
|
|
|
|
}
|
|
|
|
class _SingleSelectionDialogState extends State<SingleSelectionDialog> {
|
|
int i = 0;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Container(
|
|
//width: MediaQuery.of(context).size.width / 0.8,
|
|
padding: const EdgeInsets.all(20.0),
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: <Widget>[
|
|
Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
|
|
SizedBox(
|
|
height: 40,
|
|
child: widget.icon,
|
|
),
|
|
|
|
IconButton(
|
|
icon: Icon(Icons.clear),
|
|
color: Color(0xff2B353E),
|
|
onPressed: () {
|
|
Navigator.of(context).pop();
|
|
},
|
|
),
|
|
],
|
|
),
|
|
mHeight(20),
|
|
Text(
|
|
widget.title,
|
|
style: TextStyle(
|
|
fontSize: 16,
|
|
color: Color(0xff2B353E),
|
|
fontWeight: FontWeight.w600,
|
|
letterSpacing: -0.48,
|
|
),
|
|
),
|
|
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(vertical: 20),
|
|
child: optionList(widget.items),
|
|
),
|
|
|
|
mHeight(12),
|
|
DefaultButton(
|
|
TranslationBase.of(context).done,
|
|
() {
|
|
Navigator.pop(context, widget.items[i]);
|
|
},
|
|
color: CustomColors.green,
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget optionList(List<dynamic> options){
|
|
return ListView.builder(
|
|
shrinkWrap: true,
|
|
itemCount: options.length,
|
|
itemBuilder: (ctx,idx){
|
|
final opt = options[idx];
|
|
return Row(
|
|
children: [
|
|
Radio<int>(
|
|
value: idx,
|
|
groupValue: i,
|
|
onChanged: (int? value) {
|
|
setState(() {
|
|
i = value!;
|
|
});
|
|
},
|
|
),
|
|
Text(
|
|
opt.toString(),
|
|
style: TextStyle(
|
|
fontSize: 12,
|
|
fontWeight: FontWeight.w600,
|
|
letterSpacing: -0.48,
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
);
|
|
}
|
|
}
|