| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 | import 'package:flowy_infra/strings.dart';import 'package:flowy_infra/text_style.dart';import 'package:flowy_infra/theme.dart';import 'package:flowy_infra_ui/style_widget/text.dart';import 'package:flowy_infra_ui/widget/buttons/primary_button.dart';import 'package:flowy_infra_ui/widget/buttons/secondary_button.dart';import 'package:flowy_infra_ui/widget/spacing.dart';import 'package:flutter/material.dart';import 'package:provider/provider.dart';import 'package:app_flowy/startup/tasks/application_task.dart';import 'package:flowy_infra/size.dart';import 'package:flowy_infra_ui/style_widget/text_input.dart';import 'package:flowy_infra_ui/widget/dialog/styled_dialogs.dart';import 'package:textstyle_extensions/textstyle_extensions.dart';export 'package:flowy_infra_ui/widget/dialog/styled_dialogs.dart';class TextFieldDialog extends StatefulWidget {  final String value;  final String title;  final void Function()? cancel;  final void Function(String) confirm;  const TextFieldDialog({    required this.title,    required this.value,    required this.confirm,    this.cancel,    Key? key,  }) : super(key: key);  @override  State<TextFieldDialog> createState() => _CreateTextFieldDialog();}class _CreateTextFieldDialog extends State<TextFieldDialog> {  String newValue = "";  @override  void initState() {    newValue = widget.value;    super.initState();  }  @override  Widget build(BuildContext context) {    final theme = context.watch<AppTheme>();    return StyledDialog(      child: Column(        crossAxisAlignment: CrossAxisAlignment.start,        children: <Widget>[          ...[            FlowyText.medium(widget.title, color: theme.shader4),            VSpace(Insets.sm * 1.5),          ],          FlowyFormTextInput(            hintText: widget.value,            textStyle: const TextStyle(fontSize: 24, fontWeight: FontWeight.w400),            autoFocus: true,            onChanged: (text) {              newValue = text;            },          ),          const VSpace(10),          OkCancelButton(            onOkPressed: () {              widget.confirm(newValue);            },            onCancelPressed: () {              if (widget.cancel != null) {                widget.cancel!();              }            },          )        ],      ),    );  }}class OkCancelDialog extends StatelessWidget {  final VoidCallback? onOkPressed;  final VoidCallback? onCancelPressed;  final String? okTitle;  final String? cancelTitle;  final String? title;  final String message;  final double? maxWidth;  const OkCancelDialog(      {Key? key,      this.onOkPressed,      this.onCancelPressed,      this.okTitle,      this.cancelTitle,      this.title,      required this.message,      this.maxWidth})      : super(key: key);  @override  Widget build(BuildContext context) {    final theme = context.watch<AppTheme>();    return StyledDialog(      maxWidth: maxWidth ?? 500,      child: Column(        crossAxisAlignment: CrossAxisAlignment.start,        children: <Widget>[          if (title != null) ...[            Text(title!.toUpperCase(), style: TextStyles.T1.textColor(theme.shader1)),            VSpace(Insets.sm * 1.5),            Container(color: theme.bg1, height: 1),            VSpace(Insets.m * 1.5),          ],          Text(message, style: TextStyles.Body1.textHeight(1.5)),          SizedBox(height: Insets.l),          OkCancelButton(            onOkPressed: onOkPressed,            onCancelPressed: onCancelPressed,            okTitle: okTitle?.toUpperCase(),            cancelTitle: cancelTitle?.toUpperCase(),          )        ],      ),    );  }}class OkCancelButton extends StatelessWidget {  final VoidCallback? onOkPressed;  final VoidCallback? onCancelPressed;  final String? okTitle;  final String? cancelTitle;  final double? minHeight;  const OkCancelButton(      {Key? key, this.onOkPressed, this.onCancelPressed, this.okTitle, this.cancelTitle, this.minHeight})      : super(key: key);  @override  Widget build(BuildContext context) {    return SizedBox(      height: 48,      child: Row(        mainAxisAlignment: MainAxisAlignment.end,        children: <Widget>[          if (onCancelPressed != null)            SecondaryTextButton(              cancelTitle ?? S.BTN_CANCEL,              onPressed: () {                onCancelPressed!();                AppGlobals.nav.pop();              },              bigMode: true,            ),          HSpace(Insets.m),          if (onOkPressed != null)            PrimaryTextButton(              okTitle ?? S.BTN_OK,              onPressed: () {                onOkPressed!();                AppGlobals.nav.pop();              },              bigMode: true,            ),        ],      ),    );  }}
 |