【问题标题】:Velocity using scroll physics Flutter使用滚动物理 Flutter 的速度
【发布时间】:2021-07-14 10:40:12
【问题描述】:

这是我得到的完整错误;

错误:

'CustomScrollPhysics.applyTo' ('ScrollPhysics Function(ScrollPhysics)') 不是有效的覆盖 'ScrollPhysics.applyTo'('ScrollPhysics 函数(ScrollPhysics?)')。 (invalid_override at [testingfile] lib\main.dart:77)

我正在尝试使用滚动物理来计算列表视图的速度。 代码如下。

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:math' as math;

Future<void> main () async => runApp(MyApp());  ///Becasue of using layout builder widget as scaffold.

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: LayoutBuilder(
        builder: (BuildContext context, BoxConstraints constraints) {
          return Material(
            color: Colors.black38,
            child: Center(
              child: ConstrainedBox(
                constraints: BoxConstraints(
                  maxWidth: 400.0,
                  maxHeight: constraints.maxHeight,
                ),
                child: ListView.builder(
                  physics: CustomScrollPhysics(),
                  itemExtent: 250.0,  ///each box take specif space
                  itemBuilder: (BuildContext context, int index) => Container(
                    padding: EdgeInsets.symmetric(vertical: 9.0),
                    child: Material(
                      elevation: 4.0,
                      borderRadius: BorderRadius.circular(5.0),
                      color:
                      index % 2 == 0 ? Colors.cyan: Colors.deepOrange,
                      child: Center(
                        child: Text(index.toString()),
                      ),
                    ),
                  ),

                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

class CustomSimulation extends Simulation {
  final double initPosition;
  final double velocity;

  CustomSimulation({required this.initPosition, required this.velocity});

  @override
  double x(double time) {
    var max = math.max(math.min(initPosition, 0.0), initPosition + velocity * time);
    print(max.toString());
    return max;
  }

  @override
  double dx(double time) {

    print(velocity.toString());
    return velocity;
  }

  @override
  bool isDone(double time) {
    return false;
  }
}

class CustomScrollPhysics extends ScrollPhysics {
  @override
  ScrollPhysics applyTo(ScrollPhysics ancestor) {
    return CustomScrollPhysics();
  }

  @override
  Simulation createBallisticSimulation(
      ScrollMetrics position, double velocity) {
    return CustomSimulation(
      initPosition: position.pixels,
      velocity: velocity,
    );
  }
}

任何帮助将不胜感激!

【问题讨论】:

    标签: android flutter android-studio dart


    【解决方案1】:

    在第 77 行进行以下更改:

      ScrollPhysics applyTo(ScrollPhysics? ancestor) {
    
    import 'package:flutter/material.dart';
    import 'dart:async';
    import 'dart:math' as math;
    
    Future<void> main () async => runApp(MyApp());  ///Becasue of using layout builder widget as scaffold.
    
    class MyApp extends StatelessWidget {
      const MyApp({Key? key}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: LayoutBuilder(
            builder: (BuildContext context, BoxConstraints constraints) {
              return Material(
                color: Colors.black38,
                child: Center(
                  child: ConstrainedBox(
                    constraints: BoxConstraints(
                      maxWidth: 400.0,
                      maxHeight: constraints.maxHeight,
                    ),
                    child: ListView.builder(
                      physics: CustomScrollPhysics(),
                      itemExtent: 250.0,  ///each box take specif space
                      itemBuilder: (BuildContext context, int index) => Container(
                        padding: EdgeInsets.symmetric(vertical: 9.0),
                        child: Material(
                          elevation: 4.0,
                          borderRadius: BorderRadius.circular(5.0),
                          color:
                          index % 2 == 0 ? Colors.cyan: Colors.deepOrange,
                          child: Center(
                            child: Text(index.toString()),
                          ),
                        ),
                      ),
    
                    ),
                  ),
                ),
              );
            },
          ),
        );
      }
    }
    
    class CustomSimulation extends Simulation {
      final double initPosition;
      final double velocity;
    
      CustomSimulation({required this.initPosition, required this.velocity});
    
      @override
      double x(double time) {
        var max = math.max(math.min(initPosition, 0.0), initPosition + velocity * time);
        print(max.toString());
        return max;
      }
    
      @override
      double dx(double time) {
    
        print(velocity.toString());
        return velocity;
      }
    
      @override
      bool isDone(double time) {
        return false;
      }
    }
    
    class CustomScrollPhysics extends ScrollPhysics {
      @override
      ScrollPhysics applyTo(ScrollPhysics? ancestor) {
        return CustomScrollPhysics();
      }
    
      @override
      Simulation createBallisticSimulation(
          ScrollMetrics position, double velocity) {
        return CustomSimulation(
          initPosition: position.pixels,
          velocity: velocity,
        );
      }
    }
    

    【讨论】:

    • 感谢您的回答。顺便说一句,有没有办法获得每时每刻的速度(实时速度)?以恒定速度滚动此卷轴后,有没有办法增加一些摩擦力并获得速度?
    • 不知道。
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 2019-12-31
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多