Skip to content

Commit

Permalink
remove To.layout
Browse files Browse the repository at this point in the history
  • Loading branch information
chen56 committed Apr 30, 2024
1 parent 48b6981 commit c1cec5d
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 47 deletions.
3 changes: 1 addition & 2 deletions notes/flutter_web/lib/routes.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:you_flutter/router.dart';
import 'package:flutter_web/routes/page.dart';
import 'package:flutter_web/routes/layout.dart';
import 'package:you_note_dart/note.dart';
import 'package:flutter_web/routes/notes/page.dart' as _notes_page;
import 'package:flutter_web/routes/notes/layout.dart' as _notes_layout;
Expand Down Expand Up @@ -67,7 +66,7 @@ import 'package:flutter_web/routes/notes/Improve_app/RepaintBoundary/page.dart'
import 'package:flutter_web/routes/notes/Improve_app/event&listener&lifeycle/page.dart' as _event_listener_lifeycle_page;

mixin RoutesMixin {
final To root = To('routes', builder: build, layout: layout, children: [
final To root = To('routes', builder: build, children: [
ToNote('notes', builder: _notes_page.build, layout: _notes_layout.layout, children: [
ToNote('research', children: [
ToNote('bash_note'),
Expand Down
1 change: 0 additions & 1 deletion notes/flutter_web/lib/routes/layout.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import 'package:you_flutter/router.dart';
/// ref: [PageLayoutBuilder]
Widget layout(BuildContext context, PageBuilder builder) {
// ignore: unnecessary_type_check
assert(layout is PageLayoutBuilder);
return RootLayout(
builder: builder,
);
Expand Down
5 changes: 3 additions & 2 deletions notes/flutter_web/lib/routes/notes/layout.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import 'package:flutter/widgets.dart';
import 'package:you_flutter/router.dart';
import 'package:you_note_dart/note.dart';
import 'package:you_note_dart/note_layouts.dart';

/// [NoteLayoutBuilder]
@ToType(type: ToNote)
Widget layout(BuildContext context, ToUri uri, NoteBuilder builder) {
Widget layout(BuildContext context, NoteBuilder builder) {
// ignore: unnecessary_type_check
assert(layout is NoteLayoutBuilder);
return NoteLayoutStyle1(uri: uri, builder: builder);
return NoteLayoutStyle1(builder: builder);
}
2 changes: 0 additions & 2 deletions notes/flutter_web/lib/routes/page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
// ignore_for_file: non_constant_identifier_names,camel_case_types
import 'package:flutter/material.dart';
import 'package:you_flutter/router.dart';

RootPage build(BuildContext context) {
return const RootPage();
Expand Down
32 changes: 4 additions & 28 deletions packages/you_flutter/lib/src/router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,7 @@ ref:
*/

typedef PageBuilder = Widget Function(BuildContext context);
typedef PageLayoutBuilder = Widget Function(BuildContext context, PageBuilder builder);
typedef LazyPageBuilder = Future<PageBuilder> Function();
// typedef PageBuilderAsync = Future<Widget> Function(BuildContext context, ToUri uri);

class NotFoundError extends ArgumentError {
NotFoundError({required Uri invalidValue, String name = "uri", String message = "Not Found"}) : super.value(invalidValue, name, message);
Expand All @@ -52,6 +50,8 @@ class NotFoundError extends ArgumentError {
mixin RouterMixin {
YouRouter get router;

To get root => router.root;

ToUri match(Uri uri) {
var root = router.root;
assert(uri.path.startsWith("/"));
Expand Down Expand Up @@ -155,13 +155,11 @@ base class To {

final List<To> children;
final PageBuilder? _builder;
final PageLayoutBuilder? layout;

// TODO P1 root Node的part是routes,有问题!
To(
this.part, {
PageBuilder? builder,
this.layout,
this.children = const [],
}) : _builder = builder,
assert(part == "/" || !part.contains("/"), "part:'$part' should be '/' or legal directory name") {
Expand All @@ -184,6 +182,8 @@ base class To {
children: children,
);

To get parent => _parent;

static PageBuilder? _asyncToSync(LazyPageBuilder? builder) {
if (builder == null) {
return null;
Expand Down Expand Up @@ -221,30 +221,6 @@ base class To {

int get level => isRoot ? 0 : _parent.level + 1;

To? findLayoutNode() {
return _findLayoutNode(this);
}

/// To类型完全相同,才认为节点兼容
To? _findLayoutNode(To toFind) {
if (isRoot) {
// 路由To类型不兼容
if (runtimeType != toFind.runtimeType) {
return null;
}
// 路由To类型兼容再看是不是有layout
return layout == null ? null : this;
}

// 现在是非root, 不兼容就向上找
if (runtimeType != toFind.runtimeType) {
return _parent._findLayoutNode(toFind);
}

// 没有就继续向上找
return layout != null ? this : _parent._findLayoutNode(toFind);
}

ToUri _match({
required Uri uri,
required List<String> segments,
Expand Down
11 changes: 4 additions & 7 deletions packages/you_note_dart/lib/src/layouts/note_layout_style_1.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ import 'package:you_note_dart/src/note.dart';
/// 左边routes树,右边页面内容
final class NoteLayoutStyle1 extends StatelessWidget {
final NoteBuilder builder;
final ToUri uri;

NoteLayoutStyle1({super.key, required this.uri, required this.builder});
NoteLayoutStyle1({super.key, required this.builder});

@override
Widget build(BuildContext context) {
Expand All @@ -33,7 +32,7 @@ final class NoteLayoutStyle1 extends StatelessWidget {
return Row(
children: [
// IntrinsicWidth(child: _NoteTreeView(uri)),
_NoteTreeView(uri),
_NoteTreeView(),
Flexible(child: ListView(children: pageContents)),
],
);
Expand All @@ -45,15 +44,13 @@ final class NoteLayoutStyle1 extends StatelessWidget {
}

class _NoteTreeView extends StatelessWidget {
final ToUri uri;

const _NoteTreeView(this.uri);
const _NoteTreeView();

@override
Widget build(BuildContext context) {
final router = YouRouter.of(context);

var validRoutes = uri.to.root.toList().where((e) => !e.isLeaf || (e.isValid));
var validRoutes = router.root.toList().where((e) => !e.isLeaf || (e.isValid));
var routeWidgets = validRoutes.map((node) {
String title = "▼ ${node.part}";
title = title.padLeft((node.level * 3) + title.length);
Expand Down
17 changes: 12 additions & 5 deletions packages/you_note_dart/lib/src/note.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import 'package:you_note_dart/src/layouts/note_layout_default.dart';

typedef NoteBuilder = void Function(BuildContext context, Cell print);
// TODO REMOVE typedef LazyNoteBuilder = Future<void> Function(BuildContext context, Cell print);
typedef NoteLayoutBuilder = Widget Function(BuildContext context, ToUri uri, NoteBuilder builder);
typedef NoteLayoutBuilder = Widget Function(BuildContext context, NoteBuilder builder);

base class ToNote extends To {
final NoteBuilder? _builder;
Expand Down Expand Up @@ -46,11 +46,19 @@ base class ToNote extends To {
if (_builder == null) {
return null;
}
To? find = findLayoutNode();
if (find == null) {
NoteLayoutBuilder? foundLayout = _findLayout();
if (foundLayout == null) {
return NoteLayoutDefault(uri: uri, builder: _builder);
}
return (find as ToNote)._layout!(context, uri, _builder);
return foundLayout(context, _builder);
}

NoteLayoutBuilder? _findLayout() {
if (_layout != null) return _layout;
if (isRoot) return null;
To? p = parent;
if (p is! ToNote) return null;
return p._findLayout();
}
}

Expand All @@ -65,7 +73,6 @@ class NoteRoute {

NoteConf? conf;


NoteRoute.root()
: basename = "",
parent = null;
Expand Down

0 comments on commit c1cec5d

Please sign in to comment.