Skip to content

Commit fa9da13

Browse files
committed
share blog and search function added
1 parent f4a8f43 commit fa9da13

File tree

21 files changed

+331
-42
lines changed

21 files changed

+331
-42
lines changed

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"java.configuration.updateBuildConfiguration": "interactive"
3+
}

android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ android {
4848
applicationId "com.example.my_blog_bloc"
4949
// You can update the following values to match your application needs.
5050
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
51-
minSdkVersion flutter.minSdkVersion
51+
minSdkVersion 21
5252
targetSdkVersion flutter.targetSdkVersion
5353
versionCode flutterVersionCode.toInteger()
5454
versionName flutterVersionName

lib/core/db/db_helper.dart

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,21 @@ class DatabaseHelper {
4343
});
4444
}
4545

46+
static Future<List<PostModel>> findPosts(String title) async {
47+
final db = await DatabaseHelper.db();
48+
final List<Map<String, dynamic>> maps = await db.query('post', where: 'title = ?', whereArgs: [title]);
49+
return List.generate(maps.length, (i) {
50+
return PostModel(
51+
id: maps[i]['id'],
52+
title: maps[i]['title'],
53+
content: maps[i]['content'],
54+
imagePath: maps[i]['imagePath'],
55+
isSelected: maps[i]['isSelected'],
56+
createdAt: DateTime.parse(maps[i]['createdAt']),
57+
);
58+
});
59+
}
60+
4661
static Future<int> updatePost(PostModel post) async {
4762
final db = await DatabaseHelper.db();
4863
return await db.update(

lib/features/add_post/data/repositories/update_post_repositories_impl.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class UpdatePostRepositoriesImpl implements UpdatePostRepository {
1414
@override
1515
Future<Either<Failure, int>>? updatePost(Post post) async {
1616
PostModel postModel = PostModel(
17+
id: post.id,
1718
title: post.title,
1819
content: post.content,
1920
imagePath: post.imagePath,
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'package:dartz/dartz.dart';
2-
import 'package:my_blog_bloc/core/model/post_model.dart';
2+
import '../../../../core/entities/post.dart';
33
import '../../../../core/errors/failures.dart';
44

55
abstract class PostPostsRepository {
6-
Future<Either<Failure, int>>? postPosts(PostModel postModel);
6+
Future<Either<Failure, int>>? postPosts(Post post);
77
}

lib/features/add_post/domain/repositories/update_post_repository.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:dartz/dartz.dart';
2-
import '../../../../core/entities/post.dart';
2+
import '../../../../core/entities/post.dart';
33
import '../../../../core/errors/failures.dart';
44

55
abstract class UpdatePostRepository {
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
import 'package:my_blog_bloc/core/model/post_model.dart';
1+
import '../../../../core/entities/post.dart';
22
import '../../../../core/errors/failures.dart';
33
import '../../../../core/usecases/usecase.dart';
44
import 'package:dartz/dartz.dart';
55
import '../repositories/post_posts_repositories.dart';
66

7-
class PostPosts implements UseCase<int, PostModel> {
7+
class PostPosts implements UseCase<int, Post> {
88
final PostPostsRepository postRepository;
99

1010
PostPosts(this.postRepository);
1111

1212
@override
13-
Future<Either<Failure, int>?> call(PostModel postModel) async {
14-
return await postRepository.postPosts(postModel);
13+
Future<Either<Failure, int>?> call(Post post) async {
14+
return await postRepository.postPosts(post);
1515
}
1616
}

lib/features/add_post/presentation/bloc/post_add_event.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import 'package:my_blog_bloc/core/model/post_model.dart';
2-
31
import '../../../../core/entities/post.dart';
42

53
abstract class PostAddEvent {}
@@ -11,12 +9,12 @@ class PostAddPickFromGalaryButtonPressEvent extends PostAddEvent {}
119
class PostAddPickFromCameraButtonPressEvent extends PostAddEvent {}
1210

1311
class PostAddSaveButtonPressEvent extends PostAddEvent {
14-
final PostModel newPost;
12+
final Post newPost;
1513
PostAddSaveButtonPressEvent(this.newPost);
1614
}
1715

1816
class PostAddUpdateButtonPressEvent extends PostAddEvent {
19-
final PostModel updatedPost;
17+
final Post updatedPost;
2018
PostAddUpdateButtonPressEvent(this.updatedPost);
2119
}
2220

lib/features/add_post/presentation/ui/post_add.dart

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class _AddPostState extends State<AddPost> {
8383
appBar: AppBar(
8484
title: const Text(AppStrings.titleLabel),
8585
),
86-
body: Column(children: [
86+
body: ListView(children: [
8787
Padding(
8888
padding: const EdgeInsets.all(8.0),
8989
child: TextField(
@@ -100,16 +100,18 @@ class _AddPostState extends State<AddPost> {
100100
),
101101
_imagePickerButtons(postAddBloc),
102102
const SizedBox(height: 20),
103-
state.imagePath == null
104-
? const Text('no image')
105-
: Container(
106-
width: 50,
107-
height: 50,
108-
decoration: BoxDecoration(
109-
border: Border.all(color: Colors.grey),
103+
Container(
104+
width: 100,
105+
height: 100,
106+
decoration: BoxDecoration(
107+
border: Border.all(color: Colors.grey),
108+
),
109+
child: state.imagePath == null
110+
? Image.asset('assets/images/noimage.jpg')
111+
: Image.file(
112+
File(state.imagePath!),
110113
),
111-
child: Image.file(File(state.imagePath!)),
112-
),
114+
),
113115
ElevatedButton(
114116
onPressed: () async {
115117
var title = titleController.text;
@@ -121,7 +123,7 @@ class _AddPostState extends State<AddPost> {
121123
id: widget.post!.id,
122124
title: titleController.text,
123125
content: contentController.text,
124-
imagePath: imagePath!,
126+
imagePath: imagePath,
125127
isSelected: 0,
126128
);
127129
postAddBloc.add(PostAddUpdateButtonPressEvent(updatedPost));

lib/features/home/presentation/bloc/post_bloc.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class PostBloc extends Bloc<PostEvent, PostState> {
2222
on<PostEditButtonClickedEvent>(postEditButtonClickedEvent);
2323
on<PostDeleteButtonClickedEvent>(postDeleteButtonClickedEvent);
2424
on<PostDeleteAllButtonClickedEvent>(postDeleteAllButtonClickedEvent);
25+
on<PostSearchIconClickedEvent>(postSearchIconClickedEvent);
2526
on<PostAddButtonClickedEvent>(postAddButtonClickedEvent);
2627
on<PostTileNavigateEvent>(postTileNavigateEvent);
2728
on<PostTileLongPressEvent>(postTileLongPressEvent);
@@ -84,4 +85,9 @@ class PostBloc extends Bloc<PostEvent, PostState> {
8485
emit(PostLoadedSuccessState(post));
8586
});
8687
}
88+
89+
FutureOr<void> postSearchIconClickedEvent(PostSearchIconClickedEvent event, Emitter<PostState> emit) async {
90+
List<PostModel> postList = await DatabaseHelper.findPosts(event.value);
91+
emit(PostLoadedSuccessState(postList));
92+
}
8793
}

0 commit comments

Comments
 (0)