有没有办法将无状态小部件的方法调用到另一个无状态小部件?

问题描述

这里,我有两个文件 dot_indicator.dart 和 main.dart。

Dots 类“updatePosition()”中的函数,如何在PageView 小部件的onPageChanged 中访问它。

import 'package:Flutter/material.dart';
import 'package:dots_indicator/dots_indicator.dart';

class Dots extends StatefulWidget {
  @override
  _Dotsstate createState() => _Dotsstate();
}

class _Dotsstate extends State<Dots> {
  final _totalDots = 2;
  double currentPosition = 0.0;

  double validPosition(double position) {
    if (position >= _totalDots) return 0;
    if (position < 0) return _totalDots - 1.0;
    return position;
  }

  void updatePosition(double position) {
    setState(() => currentPosition = validPosition(position));
  }

  String getCurrentPositionPretty() {
    return (currentPosition + 1.0).toStringAsPrecision(2);
  }

  @override
  Widget build(BuildContext context) {
    return DotsIndicator(
      dotsCount: _totalDots,position: currentPosition,decorator: DotsDecorator(
        activeColor: Colors.green,activeSize: Size.square(30.0),activeShape: RoundedRectangleBorder(),),);
  }
}

这个小部件有函数updatePosition(index),我想在另一个类中访问它。

import 'package:Flutter/material.dart';
import 'package:mobile_app/bottom_nav.dart';
import 'package:mobile_app/dot_indicator.dart';
import 'package:mobile_app/first_page.dart';
import 'package:mobile_app/second_page.dart';
import 'package:provider/provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,home: Scaffold(
        appBar: AppBar(
          backgroundColor: Color.fromrGBO(250,250,100),elevation: 0.0,title: Stack(
            children: <Widget>[
              Container(
                width: double.infinity,child: Dots(),],body: PageSlider(),bottomNavigationBar: AppBottomNav(),);
  }
}

class PageSlider extends StatefulWidget {
  const PageSlider({Key? key}) : super(key: key);

  @override
  _PageSliderState createState() => _PageSliderState();
}

class _PageSliderState extends State<PageSlider> {

  Dots _dots = new Dots();

  @override
  Widget build(BuildContext context) {
    PageController controller = PageController(initialPage: 0,keepPage: true);
    return PageView(
      controller: controller,onPageChanged: (index) => {
        print(index),//I want the updatePosition(index) here
      },children: <Widget>[
        FirstPage(),SecondPage(),);
  }
}
 

我尝试创建 Dots 类的实例并尝试在 PageSlider 类中使用它,它仍然无法工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)