mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 18:38:36 +08:00
Split the JournalList into its own file
This way the widgets are separate
This commit is contained in:
53
lib/journal_list.dart
Normal file
53
lib/journal_list.dart
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
|
||||||
|
import 'note.dart';
|
||||||
|
|
||||||
|
typedef void NoteSelectedFunction(Note note);
|
||||||
|
|
||||||
|
class JournalList extends StatelessWidget {
|
||||||
|
final NoteSelectedFunction noteSelectedFunction;
|
||||||
|
final List<Note> notes;
|
||||||
|
|
||||||
|
final _biggerFont = const TextStyle(fontSize: 18.0);
|
||||||
|
|
||||||
|
JournalList({this.noteSelectedFunction, this.notes});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return new ListView.builder(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
itemBuilder: (context, i) {
|
||||||
|
if (i >= notes.length) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//if (i.isOdd) return new Divider();
|
||||||
|
return _buildRow(context, notes[i]);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildRow(BuildContext context, Note journal) {
|
||||||
|
var formatter = new DateFormat('dd MMM, yyyy');
|
||||||
|
var title = formatter.format(journal.createdAt);
|
||||||
|
|
||||||
|
var timeFormatter = new DateFormat('Hm');
|
||||||
|
var time = timeFormatter.format(journal.createdAt);
|
||||||
|
|
||||||
|
var body = journal.body;
|
||||||
|
if (body.length >= 100) {
|
||||||
|
body = body.substring(0, 100);
|
||||||
|
}
|
||||||
|
body = body.replaceAll("\n", " ");
|
||||||
|
|
||||||
|
return new ListTile(
|
||||||
|
isThreeLine: true,
|
||||||
|
title: new Text(
|
||||||
|
title,
|
||||||
|
style: _biggerFont,
|
||||||
|
),
|
||||||
|
subtitle: new Text(time + "\n" + body),
|
||||||
|
onTap: () => noteSelectedFunction(journal),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -3,11 +3,11 @@ import 'dart:convert';
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:http/http.dart' as http;
|
import 'package:http/http.dart' as http;
|
||||||
import 'package:intl/intl.dart';
|
|
||||||
|
|
||||||
import 'note.dart';
|
import 'note.dart';
|
||||||
import 'note_editor.dart';
|
import 'note_editor.dart';
|
||||||
import 'note_viewer.dart';
|
import 'note_viewer.dart';
|
||||||
|
import 'journal_list.dart';
|
||||||
|
|
||||||
Future<List<Note>> fetchNotes() async {
|
Future<List<Note>> fetchNotes() async {
|
||||||
final response = await http.get('http://192.168.1.132:8000/notes');
|
final response = await http.get('http://192.168.1.132:8000/notes');
|
||||||
@ -23,9 +23,7 @@ Future<List<Note>> fetchNotes() async {
|
|||||||
|
|
||||||
void main() => runApp(new MyApp());
|
void main() => runApp(new MyApp());
|
||||||
|
|
||||||
class JournalList extends StatelessWidget {
|
class HomeScreen extends StatelessWidget {
|
||||||
final _biggerFont = const TextStyle(fontSize: 18.0);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var createButton = new FloatingActionButton(
|
var createButton = new FloatingActionButton(
|
||||||
@ -43,7 +41,10 @@ class JournalList extends StatelessWidget {
|
|||||||
builder: (context, snapshot) {
|
builder: (context, snapshot) {
|
||||||
if (snapshot.hasData) {
|
if (snapshot.hasData) {
|
||||||
var notes = snapshot.data;
|
var notes = snapshot.data;
|
||||||
return _buildSuggestions(context, notes);
|
return new JournalList(
|
||||||
|
notes: notes,
|
||||||
|
noteSelectedFunction: (note) => _noteSelected(note, context),
|
||||||
|
);
|
||||||
} else if (snapshot.hasError) {
|
} else if (snapshot.hasError) {
|
||||||
return new Text("${snapshot.error}");
|
return new Text("${snapshot.error}");
|
||||||
}
|
}
|
||||||
@ -53,49 +54,12 @@ class JournalList extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildRow(BuildContext context, Note journal) {
|
void _noteSelected(Note note, BuildContext context) {
|
||||||
var formatter = new DateFormat('dd MMM, yyyy');
|
|
||||||
var title = formatter.format(journal.createdAt);
|
|
||||||
|
|
||||||
var timeFormatter = new DateFormat('Hm');
|
|
||||||
var time = timeFormatter.format(journal.createdAt);
|
|
||||||
|
|
||||||
var body = journal.body;
|
|
||||||
if (body.length >= 100) {
|
|
||||||
body = body.substring(0, 100);
|
|
||||||
}
|
|
||||||
body = body.replaceAll("\n", " ");
|
|
||||||
|
|
||||||
return new ListTile(
|
|
||||||
isThreeLine: true,
|
|
||||||
title: new Text(
|
|
||||||
title,
|
|
||||||
style: _biggerFont,
|
|
||||||
),
|
|
||||||
subtitle: new Text(time + "\n" + body),
|
|
||||||
onTap: () => _itemTapped(context, journal),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _itemTapped(BuildContext context, Note note) {
|
|
||||||
var route =
|
var route =
|
||||||
new MaterialPageRoute(builder: (context) => new NoteViewer(note: note));
|
new MaterialPageRoute(builder: (context) => new NoteViewer(note: note));
|
||||||
Navigator.of(context).push(route);
|
Navigator.of(context).push(route);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildSuggestions(BuildContext context, List<Note> notes) {
|
|
||||||
return new ListView.builder(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
itemBuilder: (context, i) {
|
|
||||||
if (i >= notes.length) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
//if (i.isOdd) return new Divider();
|
|
||||||
return _buildRow(context, notes[i]);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _newPost(BuildContext context) {
|
void _newPost(BuildContext context) {
|
||||||
var route = new MaterialPageRoute(builder: (context) => new NoteEditor());
|
var route = new MaterialPageRoute(builder: (context) => new NoteEditor());
|
||||||
Navigator.of(context).push(route);
|
Navigator.of(context).push(route);
|
||||||
@ -105,6 +69,14 @@ class JournalList extends StatelessWidget {
|
|||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return new MaterialApp(title: 'Journal', home: new JournalList());
|
return new MaterialApp(
|
||||||
|
title: 'Journal',
|
||||||
|
home: new HomeScreen(),
|
||||||
|
theme: new ThemeData(
|
||||||
|
brightness: Brightness.dark,
|
||||||
|
primaryColor: Colors.lightBlue[800],
|
||||||
|
accentColor: Colors.cyan[600],
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user