flutter_floor_layout 0.0.1 copy "flutter_floor_layout: ^0.0.1" to clipboard
flutter_floor_layout: ^0.0.1 copied to clipboard

A Flutter package for flexible multi-floor layout rendering.

example/lib/main.dart

import 'package:example/viewmodel/other_viewmodel.dart';
import 'package:example/widget/icon_grid_widget.dart';
import 'package:example/widget/other_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_floor_layout/flutter_floor_layout.dart';

import '../mock_data.dart';
import '../model/banner_model.dart';
import '../viewmodel/banner_viewmodel.dart';
import '../widget/banner_widget.dart';
import '../viewmodel/icon_grid_viewmodel.dart';
import '../widget/banner_widget.dart';
import '../types/example_floor_section_type.dart';
import 'model/example_floor_model.dart';

void main() {
  // 注册 Banner 楼层
  FloorRegistry.register(
    ExampleFloorType.banner,
        (m) => BannerViewModel(m as ExampleFloorModel),
        (vm) => BannerWidget(viewModel: vm as BannerViewModel),
  );
  FloorRegistry.register(
    ExampleFloorType.iconGrid,
        (m) => IconGridViewModel(m as ExampleFloorModel),
        (vm) => IconGridWidget(viewModel: vm as IconGridViewModel),
  );
  FloorRegistry.register(
    ExampleFloorType.product,
        (m) => ProductViewModel(m as ExampleFloorModel),
        (vm) => ProductWidget(viewModel: vm as ProductViewModel),
  );
  FloorRegistry.register(
    ExampleFloorType.colorBlock,
        (m) => ColorBlockViewModel(m as ExampleFloorModel),
        (vm) => ColorBlockWidget(viewModel: vm as ColorBlockViewModel),
  );

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Floor Layout Example',
      home: Scaffold(
        appBar: AppBar(title: const Text('Floor Layout Demo')),
        body: FloorContainer(floors: mockFloors),
      ),
    );
  }
}

/// FloorContainer 用于展示所有楼层,调用 FloorRegistry 根据 floorType 构造对应 Widget
class FloorContainer extends StatelessWidget {
  final List<FloorBaseModel> floors;
  const FloorContainer({super.key, required this.floors});

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: floors.length,
      itemBuilder: (context, index) {
        final floor = floors[index];
        final buildResult = FloorRegistry.build(floor.floorType, floor);
        if (buildResult == null) {
          return SizedBox.shrink();
        }
        final (_, widget) = buildResult;
        return widget;
      },
    );
  }
}
0
likes
140
points
23
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter package for flexible multi-floor layout rendering.

Repository (GitHub)
View/report issues

Documentation

API reference

License

unknown (license)

Dependencies

flutter

More

Packages that depend on flutter_floor_layout