照片预览添加删除按钮

master
张萌 4 years ago
parent 04b44e65f0
commit ac6c97ee8c

@ -1,7 +1,8 @@
import 'package:ansu_ui/painters/as_numeric_painter.dart'; import 'package:ansu_ui/painters/as_numeric_painter.dart';
import 'package:ansu_ui/styles/as_colors.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:ansu_ui/styles/as_colors.dart';
///## ///##
class ASNumericButton extends StatefulWidget { class ASNumericButton extends StatefulWidget {
@ -131,6 +132,7 @@ class _ASNumericButtonState extends State<ASNumericButton> {
alignment: Alignment.center, alignment: Alignment.center,
child: IntrinsicWidth( child: IntrinsicWidth(
child: TextField( child: TextField(
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
keyboardType: TextInputType.number, keyboardType: TextInputType.number,
controller: _controller, controller: _controller,
onChanged: (text) { onChanged: (text) {

@ -1,4 +1,5 @@
import 'package:ansu_ui/extension/num_extension.dart'; import 'package:ansu_ui/extension/num_extension.dart';
import 'package:ansu_ui/list_tile/as_list_tile.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
extension SeparateExt on List<Widget> { extension SeparateExt on List<Widget> {
@ -12,7 +13,10 @@ extension SeparateExt on List<Widget> {
} }
if (element.runtimeType == Visibility) { if (element.runtimeType == Visibility) {
return (element as Visibility).visible; return !(element as Visibility).visible;
}
if (element.runtimeType == ASListTile) {
return !(element as ASListTile).visible;
} }
return false; return false;
}); });

@ -31,27 +31,30 @@ class ASOptionTile extends StatelessWidget {
int get length => items!.length; int get length => items!.length;
List<Widget> get _widgets => leading == null List<Widget> get _widgets {
? (items ?? []) var list = <Widget>[];
: <Widget>[ if (leading == null) {
Container( return list = items ?? [];
alignment: Alignment.centerLeft, } else {
child: this.leading is String list.add(Container(
? Padding( alignment: Alignment.centerLeft,
padding: child: leading is String
EdgeInsets.symmetric(vertical: 14.w, horizontal: 10.w), ? Padding(
child: Text( padding: EdgeInsets.symmetric(vertical: 14.w, horizontal: 10.w),
this.leading, child: Text(
style: TextStyle( this.leading,
color: kTextColor, style: TextStyle(
fontSize: 16.sp, color: kTextColor,
fontWeight: FontWeight.bold), fontSize: 16.sp,
), fontWeight: FontWeight.bold),
) ),
: this.leading, )
), : leading,
...(items ?? []), ));
]; list.addAll((items ?? []));
return list;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -66,7 +69,7 @@ class ASOptionTile extends StatelessWidget {
child: item ?? child: item ??
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: items!.sepWidget( children: _widgets.sepWidget(
separate: this.padding == null separate: this.padding == null
? ASDivider( ? ASDivider(
indent: 10.w, indent: 10.w,

@ -1,6 +1,7 @@
import 'dart:io'; import 'dart:io';
import 'package:ansu_ui/ansu_ui.dart'; import 'package:ansu_ui/ansu_ui.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -8,19 +9,30 @@ class AsGridImageView extends StatelessWidget {
final List<File>? files; final List<File>? files;
final List<String>? nets; final List<String>? nets;
final String? placeholder; final String? placeholder;
final void Function(dynamic value)? onDelete;
final double? iconSize;
const AsGridImageView.fromFile( const AsGridImageView.fromFile(
{Key? key, required this.files, this.placeholder}) {Key? key,
required this.files,
this.placeholder,
this.onDelete,
this.iconSize})
: nets = null, : nets = null,
super(key: key); super(key: key);
const AsGridImageView.fromNets( const AsGridImageView.fromNets(
{Key? key, required this.nets, this.placeholder}) {Key? key,
required this.nets,
this.placeholder,
this.onDelete,
this.iconSize})
: files = null, : files = null,
super(key: key); super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var size = iconSize ?? 16.w;
return GridView( return GridView(
padding: EdgeInsets.all(10.w), padding: EdgeInsets.all(10.w),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
@ -37,19 +49,52 @@ class AsGridImageView extends StatelessWidget {
tag: e, tag: e,
net: e, net: e,
), ),
child: Hero( child: Stack(
tag: e, children: [
child: FadeInImage.assetNetwork( Hero(
placeholder: placeholder ?? '', image: e), tag: e,
child: FadeInImage.assetNetwork(
placeholder: placeholder ?? '', image: e),
),
Positioned(
top: size / 2,
right: size / 2,
child: GestureDetector(
onTap: () {
if (onDelete == null) {
onDelete!(e);
}
},
child: Icon(
CupertinoIcons.xmark_circle_fill,
color: Colors.black45,
),
))
],
), ),
)) ))
.toList() .toList()
: files! : files!
.map((e) => GestureDetector( .map((e) => Stack(children: [
onTap: () => Positioned(
PhotoViewer.fromFile(context, tag: e.path, file: e), top: 0,
child: Hero(tag: e.path, child: Image.file(e)), right: 0,
)) child: GestureDetector(
onTap: () {
if (onDelete != null) {
onDelete!(e);
}
},
child: Icon(
CupertinoIcons.xmark_circle_fill,
color: Colors.black45,
),
)),
GestureDetector(
onTap: () => PhotoViewer.fromFile(context,
tag: e.path, file: e),
child: Hero(tag: e.path, child: Image.file(e)))
]))
.toList()); .toList());
} }
} }

Loading…
Cancel
Save