parent
b5bcee3842
commit
fc22339a6e
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 531 B |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,82 @@
|
||||
import 'package:aku_new_community/base/base_style.dart';
|
||||
import 'package:aku_new_community/widget/bee_scaffold.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:velocity_x/src/extensions/num_ext.dart';
|
||||
import 'package:velocity_x/src/extensions/string_ext.dart';
|
||||
|
||||
class TaskRemarkPage extends StatefulWidget {
|
||||
const TaskRemarkPage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_TaskRemarkPageState createState() => _TaskRemarkPageState();
|
||||
}
|
||||
|
||||
class _TaskRemarkPageState extends State<TaskRemarkPage> {
|
||||
TextEditingController _contentController = TextEditingController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_contentController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return BeeScaffold(
|
||||
title: '添加备注',
|
||||
body: ListView(
|
||||
padding: EdgeInsets.all(32.w),
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
'任务内容'
|
||||
.text
|
||||
.size(28.sp)
|
||||
.color(Colors.black.withOpacity(0.45))
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
32.w.heightBox,
|
||||
Container(
|
||||
width: double.infinity,
|
||||
padding: EdgeInsets.symmetric(horizontal: 24.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.black.withOpacity(0.06),
|
||||
borderRadius: BorderRadius.circular(16.w)),
|
||||
child: TextField(
|
||||
controller: _contentController,
|
||||
autofocus: false,
|
||||
onChanged: (text) => setState(() {}),
|
||||
minLines: 5,
|
||||
maxLength: 200,
|
||||
maxLines: 20,
|
||||
decoration: InputDecoration(
|
||||
border: InputBorder.none,
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
bottomNavi: Padding(
|
||||
padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 32.w),
|
||||
child: MaterialButton(
|
||||
elevation: 0,
|
||||
height: 93.w,
|
||||
disabledColor: Colors.black.withOpacity(0.06),
|
||||
disabledTextColor: Colors.black.withOpacity(0.25),
|
||||
textColor: Colors.black.withOpacity(0.85),
|
||||
shape:
|
||||
RoundedRectangleBorder(borderRadius: BorderRadius.circular(65.w)),
|
||||
color: kPrimaryColor,
|
||||
onPressed: () async {
|
||||
Get.back(result: _contentController.text);
|
||||
},
|
||||
child: '完成'.text.size(32.sp).bold.make(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
// Dart imports:
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:aku_new_community/extensions/widget_list_ext.dart';
|
||||
import 'package:aku_new_community/gen/assets.gen.dart';
|
||||
import 'package:aku_new_community/widget/picker/bee_image_picker.dart';
|
||||
// Package imports:
|
||||
import 'package:dotted_border/dotted_border.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:velocity_x/velocity_x.dart';
|
||||
|
||||
class BeePickImageWidget extends StatefulWidget {
|
||||
final double? size;
|
||||
final Function(List<File> files) onChanged;
|
||||
final String description;
|
||||
|
||||
BeePickImageWidget(
|
||||
{Key? key, this.size, required this.onChanged, this.description = '上传照片'})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
_BeePickImageWidgetState createState() => _BeePickImageWidgetState();
|
||||
}
|
||||
|
||||
class _BeePickImageWidgetState extends State<BeePickImageWidget> {
|
||||
List<File> _files = [];
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
children: [
|
||||
..._files.map((e) => showImage(e)).toList(),
|
||||
GestureDetector(
|
||||
onTap: () async {
|
||||
await BeeImagePicker.pick(title: '选择图片').then(
|
||||
(value) {
|
||||
if (value != null) {
|
||||
_files.add(
|
||||
File(value.path),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
widget.onChanged(_files);
|
||||
setState(() {});
|
||||
},
|
||||
child: DottedBorder(
|
||||
color: Colors.black.withOpacity(0.25),
|
||||
borderType: BorderType.RRect,
|
||||
strokeWidth: 2.w,
|
||||
dashPattern: [6, 3],
|
||||
radius: Radius.circular(8.w),
|
||||
child: Container(
|
||||
width: widget.size ?? 160.w,
|
||||
height: widget.size ?? 160.w,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Image.asset(
|
||||
Assets.icons.camera.path,
|
||||
width: 60.w,
|
||||
height: 60.w,
|
||||
color: Color(0xFF999999),
|
||||
),
|
||||
4.w.heightBox,
|
||||
widget.description.text
|
||||
.color(Colors.black.withOpacity(0.45))
|
||||
.size(22.sp)
|
||||
.make(),
|
||||
],
|
||||
),
|
||||
),
|
||||
).material(color: Colors.transparent),
|
||||
)
|
||||
].sepWidget(separate: 10.w.widthBox),
|
||||
);
|
||||
}
|
||||
|
||||
Widget showImage(File file) {
|
||||
return Stack(children: [
|
||||
Container(
|
||||
width: widget.size ?? 160.w,
|
||||
height: widget.size ?? 160.w,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8.w),
|
||||
color: Colors.black.withOpacity(0.03)),
|
||||
child: Image.file(file),
|
||||
),
|
||||
Positioned(
|
||||
top: 8.w,
|
||||
right: 8.w,
|
||||
child: Container(
|
||||
width: 40.w,
|
||||
height: 40.w,
|
||||
child: Icon(
|
||||
CupertinoIcons.xmark,
|
||||
size: 20.w,
|
||||
color: Colors.white,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(20.w),
|
||||
color: Color(0xFF000000),
|
||||
),
|
||||
).onTap(() {
|
||||
_files.remove(file);
|
||||
widget.onChanged(_files);
|
||||
setState(() {});
|
||||
}),
|
||||
)
|
||||
]);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue