80 lines
2.6 KiB
Dart
80 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_redux/flutter_redux.dart';
|
|
import 'package:invoiceninja_flutter/constants.dart';
|
|
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
|
|
import 'package:invoiceninja_flutter/utils/colors.dart';
|
|
|
|
class SearchText extends StatelessWidget {
|
|
const SearchText({
|
|
Key key,
|
|
this.filterController,
|
|
this.focusNode,
|
|
this.placeholder,
|
|
this.onChanged,
|
|
this.onCleared,
|
|
}) : super(key: key);
|
|
|
|
final Function(String) onChanged;
|
|
final Function onCleared;
|
|
final TextEditingController filterController;
|
|
final FocusNode focusNode;
|
|
final String placeholder;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final store = StoreProvider.of<AppState>(context);
|
|
final state = store.state;
|
|
final enableDarkMode = state.prefState.enableDarkMode;
|
|
final isFilterSet = filterController.text.isNotEmpty;
|
|
final textColor = Theme.of(context).textTheme.bodyText1.color;
|
|
|
|
Color color;
|
|
if (enableDarkMode) {
|
|
color = convertHexStringToColor(
|
|
isFilterSet ? kDefaultDarkBorderColor : kDefaultDarkBorderColor);
|
|
} else {
|
|
color = convertHexStringToColor(
|
|
isFilterSet ? kDefaultLightBorderColor : kDefaultLightBorderColor);
|
|
}
|
|
|
|
return Container(
|
|
padding: const EdgeInsets.only(left: 8.0),
|
|
height: 40,
|
|
margin: EdgeInsets.only(bottom: 2.0),
|
|
decoration: BoxDecoration(
|
|
color: color,
|
|
borderRadius: BorderRadius.all(Radius.circular(kBorderRadius)),
|
|
),
|
|
child: TextField(
|
|
focusNode: focusNode,
|
|
textAlign: filterController.text.isNotEmpty || focusNode.hasFocus
|
|
? TextAlign.start
|
|
: TextAlign.center,
|
|
textAlignVertical: TextAlignVertical.center,
|
|
decoration: InputDecoration(
|
|
contentPadding: EdgeInsets.only(left: 8, right: 8, bottom: 6),
|
|
suffixIcon: filterController.text.isNotEmpty || focusNode.hasFocus
|
|
? IconButton(
|
|
icon: Icon(
|
|
Icons.clear,
|
|
color: textColor,
|
|
),
|
|
onPressed: () {
|
|
filterController.text = '';
|
|
focusNode.unfocus(
|
|
disposition: UnfocusDisposition.previouslyFocusedChild);
|
|
onCleared();
|
|
},
|
|
)
|
|
: Icon(Icons.search, color: textColor),
|
|
border: InputBorder.none,
|
|
hintText: focusNode.hasFocus ? '' : placeholder,
|
|
),
|
|
autocorrect: false,
|
|
onChanged: (value) => onChanged(value),
|
|
controller: filterController,
|
|
),
|
|
);
|
|
}
|
|
}
|